aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--.github/FUNDING.yml2
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md41
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md31
-rw-r--r--.github/workflows/analysis_ports.yml346
-rw-r--r--.github/workflows/ci.yml21
-rw-r--r--.gitignore58
-rw-r--r--.travis.yml380
-rw-r--r--Makefile.in5
-rw-r--r--README-Travis.md2
-rw-r--r--acx_nlnetlabs.m466
-rw-r--r--cachedb/cachedb.c2
-rw-r--r--config.h.in6
-rwxr-xr-xconfig.sub21
-rwxr-xr-xconfigure130
-rw-r--r--configure.ac43
-rw-r--r--contrib/Dockerfile.tests11
-rw-r--r--contrib/drop2rpz2
-rw-r--r--contrib/unbound.service.in3
-rw-r--r--daemon/daemon.c3
-rw-r--r--daemon/remote.c2
-rw-r--r--daemon/stats.c2
-rw-r--r--daemon/unbound.c1
-rw-r--r--daemon/worker.c82
-rw-r--r--dns64/dns64.c13
-rw-r--r--dnscrypt/dnscrypt.c4
-rw-r--r--dnscrypt/dnscrypt.h4
-rw-r--r--dnstap/dtstream.c6
-rw-r--r--dnstap/unbound-dnstap-socket.c12
-rw-r--r--doc/Changelog164
-rw-r--r--doc/README2
-rw-r--r--doc/README.tests8
-rw-r--r--doc/example.conf.in17
-rw-r--r--doc/libunbound.3.in4
-rw-r--r--doc/unbound-anchor.8.in2
-rw-r--r--doc/unbound-checkconf.8.in2
-rw-r--r--doc/unbound-control.8.in6
-rw-r--r--doc/unbound-host.1.in2
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in95
-rw-r--r--doc/unbound.doxygen6
-rw-r--r--edns-subnet/edns-subnet.h2
-rw-r--r--edns-subnet/subnetmod.c2
-rw-r--r--ipsecmod/ipsecmod.c2
-rw-r--r--ipsecmod/ipsecmod.h2
-rw-r--r--iterator/iter_delegpt.c1
-rw-r--r--iterator/iter_delegpt.h2
-rw-r--r--iterator/iter_fwd.c2
-rw-r--r--iterator/iter_hints.c4
-rw-r--r--iterator/iter_utils.c152
-rw-r--r--iterator/iter_utils.h7
-rw-r--r--iterator/iterator.c76
-rw-r--r--iterator/iterator.h5
-rw-r--r--libunbound/context.c2
-rw-r--r--libunbound/context.h29
-rw-r--r--libunbound/libunbound.c4
-rw-r--r--libunbound/libworker.c10
-rw-r--r--libunbound/python/doc/examples/example4.rst2
-rw-r--r--libunbound/python/libunbound.i2
-rw-r--r--libunbound/unbound-event.h2
-rw-r--r--libunbound/unbound.h32
-rw-r--r--libunbound/worker.h10
-rw-r--r--pythonmod/doc/examples/example5.rst2
-rw-r--r--pythonmod/doc/modules/struct.rst6
-rw-r--r--pythonmod/doc/usecase.rst2
-rw-r--r--pythonmod/examples/edns.py2
-rw-r--r--pythonmod/interface.i13
-rw-r--r--pythonmod/pythonmod_utils.c2
-rw-r--r--respip/respip.c75
-rw-r--r--respip/respip.h3
-rw-r--r--services/authzone.c215
-rw-r--r--services/authzone.h5
-rw-r--r--services/cache/rrset.h4
-rw-r--r--services/listen_dnsport.c71
-rw-r--r--services/listen_dnsport.h5
-rw-r--r--services/localzone.c35
-rw-r--r--services/localzone.h6
-rw-r--r--services/mesh.c95
-rw-r--r--services/outbound_list.h2
-rw-r--r--services/outside_network.c11
-rw-r--r--services/rpz.c1743
-rw-r--r--services/rpz.h54
-rw-r--r--sldns/parseutil.h2
-rw-r--r--sldns/str2wire.c4
-rw-r--r--sldns/wire2str.h2
-rw-r--r--smallapp/unbound-anchor.c8
-rw-r--r--smallapp/unbound-checkconf.c62
-rw-r--r--smallapp/unbound-control.c2
-rw-r--r--smallapp/worker_cb.c4
-rw-r--r--testcode/asynclook.c2
-rw-r--r--testcode/dohclient.c6
-rw-r--r--testcode/fake_event.c4
-rw-r--r--testcode/lock_verify.c33
-rw-r--r--testcode/perf.c2
-rw-r--r--testcode/petal.c10
-rw-r--r--testcode/streamtcp.c2
-rw-r--r--testcode/testbound.c11
-rw-r--r--testcode/unitmain.c2
-rwxr-xr-xtestdata/10-unbound-anchor.tdir/keys/unbound-control-setup2
-rw-r--r--testdata/auth_xfr_ixfrmismatch.rpl2
-rw-r--r--testdata/auth_zonemd_xfr_chain_keyinxfr.rpl315
-rw-r--r--testdata/fwd.rpl2
-rw-r--r--testdata/fwd_any.rpl2
-rw-r--r--testdata/fwd_error.rpl2
-rw-r--r--testdata/fwd_error_retries.rpl27
-rw-r--r--testdata/fwd_timeout.rpl2
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.conf20
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.dsc16
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.post10
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.pre31
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.test35
-rw-r--r--testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.testns25
-rw-r--r--testdata/fwd_zero.tdir/fwd_zero.test2
-rw-r--r--testdata/http_user_agent.tdir/http_user_agent.test10
-rw-r--r--testdata/iter_primenoglue.rpl2
-rw-r--r--testdata/iter_scrub_dname_rev.rpl2
-rw-r--r--testdata/iter_scrub_dname_sec.rpl2
-rw-r--r--testdata/root_anchor.tdir/root_anchor.test4
-rw-r--r--testdata/rpz_clientip.rpl264
-rw-r--r--testdata/rpz_nsdname.rpl390
-rw-r--r--testdata/rpz_nsip.rpl408
-rw-r--r--testdata/rpz_qname.rpl104
-rw-r--r--testdata/rpz_qname_tcponly.rpl117
-rw-r--r--testdata/rpz_respip.rpl28
-rw-r--r--testdata/rpz_respip_tcponly.rpl207
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.conf19
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.dsc16
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.post10
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.pre35
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.test37
-rw-r--r--testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.testns48
-rw-r--r--testdata/svcb.tdir/svcb.test2
-rw-r--r--testdata/ttl_msg.rpl2
-rw-r--r--testdata/val_keyprefetch_verify.rpl2
-rw-r--r--testdata/val_nodata_failwc.rpl2
-rw-r--r--testdata/val_nsec3_optout_cache.rpl4
-rw-r--r--util/config_file.c3
-rw-r--r--util/config_file.h6
-rw-r--r--util/configlexer.c7058
-rw-r--r--util/configlexer.lex3
-rw-r--r--util/configparser.c5186
-rw-r--r--util/configparser.h696
-rw-r--r--util/configparser.y481
-rw-r--r--util/data/msgencode.c20
-rw-r--r--util/data/msgparse.c150
-rw-r--r--util/data/msgparse.h23
-rw-r--r--util/data/msgreply.c67
-rw-r--r--util/data/msgreply.h27
-rw-r--r--util/data/packed_rrset.h8
-rw-r--r--util/edns.c50
-rw-r--r--util/edns.h12
-rw-r--r--util/fptr_wlist.c2
-rw-r--r--util/fptr_wlist.h2
-rw-r--r--util/iana_ports.inc1
-rw-r--r--util/mini_event.c9
-rw-r--r--util/module.h5
-rw-r--r--util/net_help.c25
-rw-r--r--util/netevent.c63
-rw-r--r--util/netevent.h2
-rw-r--r--util/regional.c2
-rw-r--r--util/shm_side/shm_main.c2
-rw-r--r--util/tube.c6
-rw-r--r--util/ub_event.c2
-rw-r--r--validator/autotrust.c4
-rw-r--r--validator/validator.c4
-rw-r--r--validator/validator.h2
166 files changed, 12114 insertions, 8484 deletions
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 6414a0ab5302..000000000000
--- a/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-testdata/*.[0-9] linguist-documentation
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 2a357c0c7778..000000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-github: [NLnetLabs]
-custom: ['https://nlnetlabs.nl/funding/']
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 35d7ee94f9da..000000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve Unbound
-title: ''
-labels: ''
-assignees: ''
-
----
-
-<!--
-Thanks for taking the time to report an issue!
-
-Before continuing please make sure that you checked the existing (opened and closed) issues and pull requests to avoid opening a duplicate issue. We would rather prefer to add the information to the existing one. If you are able, feel free to reopen the closed issue afterwards. If not, please create a new issue linking to the old one.
-
-If you rather have a support question and you need guidance on running/configuring Unbound, please refrain from opening an issue and use the community support mailing list instead (https://www.nlnetlabs.nl/support/mailing-lists/).
-We would like to keep GitHub issues for possible bugs and feature requests only.
-
-If you are unsure whether an issue is a bug or not, feel free to reach out to mailing list users or open an issue here.
-
-If you are opening an issue, please complete as much of the following sections as possible to give us a better understanding of your situation.
--->
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To reproduce**
-Steps to reproduce the behavior:
-1.
-2.
-3.
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**System:**
- - Unbound version:
- - OS:
- - `unbound -V` output:
-
-**Additional information**
-Add any other information that you may have gathered about the issue here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index e9ca08b7ab65..000000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for Unbound
-title: "[FR]"
-labels: ''
-assignees: ''
-
----
-
-<!--
-Thanks for taking the time to report an issue!
-
-Before continuing please make sure that you checked the existing (opened and closed) issues and pull requests to avoid opening a duplicate issue. We would rather prefer to add the information to the existing one. If you are able, feel free to reopen the closed issue afterwards. If not, please create a new issue linking to the old one.
-
-If you rather have a support question and you need guidance on running/configuring Unbound, please refrain from opening an issue and use the community support mailing list instead (https://www.nlnetlabs.nl/support/mailing-lists/).
-We would like to keep GitHub issues for possible bugs and feature requests only.
-
-If you are unsure whether an issue is a bug or not, feel free to reach out to mailing list users or open an issue here.
-
-If you are opening an issue, please complete as much of the following sections as possible to give us a better understanding of your situation.
--->
-
-**Current behavior**
-Is there a current behavior that the feature relates to?
-If yes, would you wish the current behavior to change?
-
-**Describe the desired feature**
-A clear and concise description of what the feature should be.
-
-**Potential use-case**
-Describe how you see this feature being useful to other Unbound users.
diff --git a/.github/workflows/analysis_ports.yml b/.github/workflows/analysis_ports.yml
deleted file mode 100644
index fbbdd80185a9..000000000000
--- a/.github/workflows/analysis_ports.yml
+++ /dev/null
@@ -1,346 +0,0 @@
-name: Analysis and Ports
-
-on:
- workflow_dispatch:
- inputs:
- start:
- description: 'Start analysis and port workflow'
- default: 'yes'
- required: true
-
-jobs:
- build:
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- include:
- - name: GCC on Linux
- os: ubuntu-latest
- config: "--enable-debug --disable-flto"
- make_test: "yes"
- - name: Clang-analyzer
- os: ubuntu-latest
- config: "CC=clang --enable-debug --disable-flto --disable-static"
- make_test: "yes"
- clang_analysis: "yes"
- - name: libevent
- os: ubuntu-latest
- install_libevent: "yes"
- config: "CC=clang --enable-debug --disable-flto --with-libevent --disable-static"
- make_test: "yes"
- clang_analysis: "yes"
- - name: OS X
- os: macos-latest
- install_expat: "yes"
- config: "--enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl --with-libexpat=/usr/local/opt/expat"
- make_test: "yes"
- - name: Clang on OS X
- os: macos-latest
- install_expat: "yes"
- config: "CC=clang --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl --with-libexpat=/usr/local/opt/expat --disable-static"
- make_test: "yes"
- clang_analysis: "yes"
- - name: ubsan (gcc undefined behaviour sanitizer)
- os: ubuntu-latest
- config: 'CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover=all" --disable-flto --disable-static'
- make_test: "yes"
- - name: asan (gcc address sanitizer)
- os: ubuntu-latest
- config: 'CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" --disable-flto --disable-static'
- make_test: "yes"
- - name: Apple iPhone on iOS, armv7
- os: macos-latest
- AUTOTOOLS_HOST: armv7-apple-ios
- OPENSSL_HOST: ios-cross
- IOS_SDK: iPhoneOS
- IOS_CPU: armv7s
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: Apple iPhone on iOS, arm64
- os: macos-latest
- AUTOTOOLS_HOST: aarch64-apple-ios
- OPENSSL_HOST: ios64-cross
- IOS_SDK: iPhoneOS
- IOS_CPU: arm64
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: Apple TV on iOS, arm64
- os: macos-latest
- AUTOTOOLS_HOST: aarch64-apple-ios
- OPENSSL_HOST: ios64-cross
- IOS_SDK: AppleTVOS
- IOS_CPU: arm64
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: Apple Watch on iOS, armv7
- os: macos-latest
- AUTOTOOLS_HOST: armv7-apple-ios
- OPENSSL_HOST: ios-cross
- IOS_SDK: WatchOS
- IOS_CPU: armv7k
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: iPhoneSimulator on OS X, i386
- os: macos-latest
- AUTOTOOLS_HOST: i386-apple-ios
- OPENSSL_HOST: iphoneos-cross
- IOS_SDK: iPhoneSimulator
- IOS_CPU: i386
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: iPhoneSimulator on OS X, x86_64
- os: macos-latest
- AUTOTOOLS_HOST: x86_64-apple-ios
- OPENSSL_HOST: iphoneos-cross
- IOS_SDK: iPhoneSimulator
- IOS_CPU: x86_64
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: AppleTVSimulator on OS X, x86_64
- os: macos-latest
- AUTOTOOLS_HOST: x86_64-apple-ios
- OPENSSL_HOST: iphoneos-cross
- IOS_SDK: AppleTVSimulator
- IOS_CPU: x86_64
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: WatchSimulator on OS X, i386
- os: macos-latest
- AUTOTOOLS_HOST: i386-apple-ios
- OPENSSL_HOST: iphoneos-cross
- IOS_SDK: WatchSimulator
- IOS_CPU: i386
- test_ios: "yes"
- config: "no"
- make: "no"
- - name: Android armv7a
- os: ubuntu-latest
- AUTOTOOLS_HOST: armv7a-linux-androidabi
- OPENSSL_HOST: android-arm
- ANDROID_CPU: armv7a
- ANDROID_API: 23
- test_android: "yes"
- config: "no"
- make: "no"
- - name: Android aarch64
- os: ubuntu-latest
- AUTOTOOLS_HOST: aarch64-linux-android
- OPENSSL_HOST: android-arm64
- ANDROID_CPU: aarch64
- ANDROID_API: 23
- test_android: "yes"
- config: "no"
- make: "no"
- - name: Android x86
- os: ubuntu-latest
- AUTOTOOLS_HOST: i686-linux-android
- OPENSSL_HOST: android-x86
- ANDROID_CPU: x86
- ANDROID_API: 23
- test_android: "yes"
- config: "no"
- make: "no"
- - name: Android x86_64
- os: ubuntu-latest
- AUTOTOOLS_HOST: x86_64-linux-android
- OPENSSL_HOST: android-x86_64
- ANDROID_CPU: x86_64
- ANDROID_API: 23
- test_android: "yes"
- config: "no"
- make: "no"
- - name: Windows
- os: windows-latest
- test_windows: "yes"
- config: "no"
- make: "no"
-
- steps:
- - uses: actions/checkout@v2
- with:
- submodules: false
- - name: test_windows
- if: ${{ matrix.test_windows == 'yes' }}
- shell: bash
- run: |
- export unboundpath=`pwd`
- echo unboundpath=${unboundpath}
- cd ..
- export prepath=`pwd`
- echo prepath=${prepath}
- #echo "curl cpanm"
- #curl -L -k -s -S -o cpanm https://cpanmin.us/
- #echo "perl cpanm Pod::Usage"
- #perl cpanm Pod::Usage
- mkdir openssl
- echo "curl openssl"
- curl -L -k -s -S -o openssl-1.1.1j.tar.gz https://www.openssl.org/source/openssl-1.1.1j.tar.gz
- tar xzf openssl-1.1.1j.tar.gz
- cd openssl-1.1.1j
- # remove pod::Usage because we do not need -help or -man output
- # from the Configure script
- echo "Fixup ./Configure by removing use Pod::Usage require"
- sed -e 's/use Pod::Usage//' < Configure > Configure.fix
- echo "./Configure.fix no-shared no-asm -DOPENSSL_NO_CAPIENG mingw64 --prefix=\""$prepath/openssl\"""
- ./Configure.fix no-shared no-asm -DOPENSSL_NO_CAPIENG mingw64 --prefix="$prepath/openssl"
- # make the libs only, build faster
- echo "make build_libs"
- #make
- make build_libs
- mv Makefile Makefile.orig
- # fixup \\ in the installtop to /.
- echo "fixup INSTALLTOP"
- sed -e 's?^INSTALLTOP=.*$?INSTALLTOP='"$prepath"'/openssl?' < Makefile.orig > Makefile
- # install the includes and libs only, build faster
- echo "make install_dev"
- #make install_sw
- make install_dev
- cd ..
- mkdir expat
- echo "curl expat"
- curl -L -k -s -S -o expat-2.2.10.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_10/expat-2.2.10.tar.gz
- tar xzf expat-2.2.10.tar.gz
- cd expat-2.2.10
- echo "./configure SHELL=/usr/bin/bash CONFIG_SHELL=/usr/bin/bash --prefix=\"$prepath/expat\" --exec-prefix=\"$prepath/expat\" --bindir=\"$prepath/expat/bin\" --includedir=\"$prepath/expat/include\" --mandir=\"$prepath/expat/man\" --libdir=\"$prepath/expat/lib\""
- ./configure SHELL=/usr/bin/bash CONFIG_SHELL=/usr/bin/bash --prefix="$prepath/expat" --exec-prefix="$prepath/expat" --bindir="$prepath/expat/bin" --includedir="$prepath/expat/include" --mandir="$prepath/expat/man" --libdir="$prepath/expat/lib"
- # fixup SHELL is treated specially, but SHELZZ is not by make.
- echo "Fixup Makefiles by renaming SHELL to SHELLZZ"
- mv Makefile Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < Makefile.orig > Makefile
- mv lib/Makefile lib/Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < lib/Makefile.orig > lib/Makefile
- mv doc/Makefile doc/Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < doc/Makefile.orig > doc/Makefile
- mv examples/Makefile examples/Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < examples/Makefile.orig > examples/Makefile
- mv tests/Makefile tests/Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < tests/Makefile.orig > tests/Makefile
- mv xmlwf/Makefile xmlwf/Makefile.orig
- sed -e 's/SHELL/SHELLZZ/g' < xmlwf/Makefile.orig > xmlwf/Makefile
- echo "make"
- make
- echo "make install"
- make install
- cd ..
- echo "unbound"
- cd unbound
- echo "./configure --enable-debug --enable-static-exe --disable-flto \"--with-ssl=$prepath/openssl\" --with-libexpat=\"$prepath/expat\" --disable-shared"
- ./configure --enable-debug --enable-static-exe --disable-flto "--with-ssl=$prepath/openssl" --with-libexpat="$prepath/expat" --disable-shared
- make
- # specific test output
- #make testbound.exe; ./testbound.exe -s
- #make testbound; ./testbound.exe -p testdata/acl.rpl -o -vvvv
- make test
- - name: test_android
- if: ${{ matrix.test_android == 'yes' }}
- env:
- AUTOTOOLS_HOST: ${{ matrix.AUTOTOOLS_HOST }}
- OPENSSL_HOST: ${{ matrix.OPENSSL_HOST }}
- ANDROID_API: ${{ matrix.ANDROID_API }}
- ANDROID_CPU: ${{ matrix.ANDROID_CPU }}
- run: |
- #(already installed) ./contrib/android/install_tools.sh
- export ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
- echo ANDROID_PREFIX=${ANDROID_PREFIX}
- export ANDROID_SDK_ROOT="$HOME/android-sdk"
- echo ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}
- export ANDROID_NDK_ROOT="$HOME/android-ndk"
- echo ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}
- export AUTOTOOLS_BUILD="$(./config.guess)"
- echo AUTOTOOLS_BUILD=${AUTOTOOLS_BUILD}
- export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig"
- echo PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
- export CONFIG_OPTS="--build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST --prefix=$ANDROID_PREFIX --with-ssl=$ANDROID_PREFIX --disable-gost --with-libexpat=$ANDROID_PREFIX"
- echo CONFIG_OPTS=${CONFIG_OPTS}
- echo "::group::install_ndk"
- echo "./contrib/android/install_ndk.sh"
- ./contrib/android/install_ndk.sh
- echo "::endgroup::"
- echo "::group::setenv_android.sh"
- echo "./contrib/android/setenv_android.sh"
- source ./contrib/android/setenv_android.sh
- echo "::endgroup::"
- echo "::group::install_openssl"
- echo "./contrib/android/install_openssl.sh"
- ./contrib/android/install_openssl.sh
- echo "::endgroup::"
- echo "::group::install_expat"
- echo "./contrib/android/install_expat.sh"
- ./contrib/android/install_expat.sh
- echo "::endgroup::"
- echo "::group::configure"
- echo "./configure ${CONFIG_OPTS}"
- ./configure ${CONFIG_OPTS}
- echo "::endgroup::"
- echo "::group::make"
- # make is here to preserve environment variables
- make
- echo "::endgroup::"
- echo "::group::make install"
- make install
- echo "::endgroup::"
- - name: test ios
- if: ${{ matrix.test_ios == 'yes' }}
- env:
- AUTOTOOLS_HOST: ${{ matrix.AUTOTOOLS_HOST }}
- OPENSSL_HOST: ${{ matrix.OPENSSL_HOST }}
- IOS_SDK: ${{ matrix.IOS_SDK }}
- IOS_CPU: ${{ matrix.IOS_CPU }}
- run: |
- #(already installed) ./contrib/ios/install_tools.sh
- export AUTOTOOLS_BUILD="$(./config.guess)"
- echo AUTOTOOLS_BUILD=${AUTOTOOLS_BUILD}
- export IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- echo IOS_PREFIX=${IOS_PREFIX}
- export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig"
- echo PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
- export CONFIG_OPTS="--build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST --prefix=$IOS_PREFIX --with-ssl=$IOS_PREFIX --disable-gost --with-libexpat=$IOS_PREFIX"
- echo CONFIG_OPTS=${CONFIG_OPTS}
- echo "::group::setenv_ios.sh"
- echo "./contrib/ios/setenv_ios.sh"
- source ./contrib/ios/setenv_ios.sh
- echo "::endgroup::"
- echo "::group::install_openssl"
- echo "./contrib/ios/install_openssl.sh"
- ./contrib/ios/install_openssl.sh
- echo "::endgroup::"
- echo "::group::install_expat"
- echo "./contrib/ios/install_expat.sh"
- ./contrib/ios/install_expat.sh
- echo "::endgroup::"
- echo "::group::configure"
- echo "./configure ${CONFIG_OPTS}"
- ./configure ${CONFIG_OPTS}
- echo "::endgroup::"
- echo "::group::make"
- # make is here to preserve environment variables
- make
- echo "::endgroup::"
- echo "::group::make install"
- make install
- echo "::endgroup::"
- - name: install libevent
- if: ${{ matrix.install_libevent == 'yes' }}
- run: sudo apt-get install libevent-dev
- - name: install expat
- if: ${{ matrix.install_expat == 'yes' }}
- run: brew install expat
- - name: configure
- if: ${{ matrix.config != 'no' }}
- run: ./configure ${{ matrix.config }}
- - name: make
- if: ${{ matrix.make != 'no' }}
- run: make
- - name: make test
- if: ${{ matrix.make_test == 'yes' }}
- run: make test
- - name: clang-analysis
- if: ${{ matrix.clang_analysis == 'yes' }}
- run: (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 73d68fbf35c9..000000000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-name: ci
-
-on:
- push:
- branches: [ master ]
- pull_request:
- branches: [ master ]
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
- - name: configure
- run: ./configure --enable-debug
- - name: make
- run: make
- - name: make test
- run: make test
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index d0c69f81d2e9..000000000000
--- a/.gitignore
+++ /dev/null
@@ -1,58 +0,0 @@
-*.lo
-*.o
-/.libs/
-/.source
-/Makefile
-/autom4te.cache/
-/config.h
-/config.h.in~
-/config.log
-/config.status
-/dnstap/dnstap_config.h
-/dnscrypt/dnscrypt_config.h
-/doc/example.conf
-/doc/libunbound.3
-/doc/unbound-anchor.8
-/doc/unbound-checkconf.8
-/doc/unbound-control.8
-/doc/unbound-host.1
-/doc/unbound.8
-/doc/unbound.conf.5
-/libtool
-/libunbound.la
-/_unbound.la
-/smallapp/unbound-control-setup.sh
-/unbound
-/unbound-anchor
-/unbound-checkconf
-/unbound-control
-/unbound-control-setup
-/unbound-host
-/unbound.h
-/asynclook
-/delayer
-/dohclient
-/lock-verify
-/memstats
-/perf
-/petal
-/pktview
-/streamtcp
-/unbound-dnstap-socket
-/testbound
-/unittest
-/contrib/libunbound.pc
-/contrib/unbound.service
-/contrib/unbound.socket
-/contrib/unbound_portable.service
-/dnstap/dnstap.pb-c.c
-/dnstap/dnstap.pb-c.h
-/libunbound/python/libunbound_wrap.c
-/libunbound/python/unbound.py
-/pythonmod/interface.h
-/pythonmod/unboundmodule.py
-/testdata/result.*
-/testdata/.done-*
-/testdata/.perfstats.txt
-/doc/html
-/doc/xml
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1f514b5d08d4..000000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,380 +0,0 @@
-language: c
-
-git:
- depth: 5
-
-addons:
- apt:
- packages:
- - libssl-dev
- - libevent-dev
- - libexpat-dev
- - clang
- homebrew:
- packages:
- - openssl
- - libevent
- - expat
- # homebrew update takes 20min or hangs, so disable update
- #update: true
-
-jobs:
- include:
- - os: linux
- name: GCC on Linux, Amd64
- compiler: gcc
- arch: amd64
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: Clang on Linux, Amd64, clang-analysis
- compiler: clang
- arch: amd64
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - TEST_ANALYZER=yes
- - os: osx
- osx_image: xcode12.2
- name: Clang on OS X, Amd64, clang-analysis
- compiler: clang
- arch: amd64
- env:
- - TEST_OSX=yes
- - CONFIG_OPTS="--enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl --with-libexpat=/usr/local/opt/expat"
- - TEST_ANALYZER=yes
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: linux
- name: Libevent, GCC on Linux, Amd64
- compiler: gcc
- arch: amd64
- env:
- - TEST_LIBEVENT=yes
- - CONFIG_OPTS="--with-libevent"
- - os: linux
- name: Libevent, Clang on Linux, Amd64
- compiler: clang
- arch: amd64
- env:
- - TEST_LIBEVENT=yes
- - CONFIG_OPTS="--with-libevent"
- - os: osx
- osx_image: xcode12.2
- name: Libevent, Clang on OS X, Amd64
- compiler: clang
- arch: amd64
- env:
- - TEST_OSX=yes
- - TEST_LIBEVENT=yes
- - CONFIG_OPTS="--disable-flto --with-ssl=/usr/local/opt/openssl --with-libevent=/usr/local/opt/libevent --with-libexpat=/usr/local/opt/expat"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: linux
- name: UBsan, GCC on Linux, Amd64
- compiler: gcc
- arch: amd64
- dist: bionic
- env:
- - TEST_UBSAN=yes
- - os: linux
- name: UBsan, Clang on Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_UBSAN=yes
- - os: linux
- name: Asan, GCC on Linux, Amd64
- compiler: gcc
- arch: amd64
- dist: bionic
- env:
- - TEST_ASAN=yes
- - os: linux
- name: Asan, Clang on Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_ASAN=yes
- - os: linux
- name: GCC on Linux, Aarch64
- compiler: gcc
- arch: arm64
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: Clang on Linux, Aarch64
- compiler: clang
- arch: arm64
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: GCC on Linux, PowerPC64
- compiler: gcc
- arch: ppc64le
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: Clang on Linux, PowerPC64
- compiler: clang
- arch: ppc64le
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: GCC on Linux, s390x
- compiler: gcc
- arch: s390x
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: linux
- name: Clang on Linux, s390x
- compiler: clang
- arch: s390x
- dist: bionic
- env:
- - CONFIG_OPTS="--enable-debug --disable-flto"
- - os: osx
- osx_image: xcode12.2
- name: Apple iPhone on iOS, armv7
- compiler: clang
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=armv7-apple-ios
- - OPENSSL_HOST=ios-cross
- - IOS_SDK=iPhoneOS
- - IOS_CPU=armv7s
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: Apple iPhone on iOS, arm64
- compiler: clang
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=aarch64-apple-ios
- - OPENSSL_HOST=ios64-cross
- - IOS_SDK=iPhoneOS
- - IOS_CPU=arm64
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: Apple TV on iOS, arm64
- compiler: clang
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=aarch64-apple-ios
- - OPENSSL_HOST=ios64-cross
- - IOS_SDK=AppleTVOS
- - IOS_CPU=arm64
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: Apple Watch on iOS, armv7
- compiler: clang
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=armv7-apple-ios
- - OPENSSL_HOST=ios-cross
- - IOS_SDK=WatchOS
- - IOS_CPU=armv7k
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: iPhoneSimulator on OS X, i386
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=i386-apple-ios
- - OPENSSL_HOST=iphoneos-cross
- - IOS_CPU=i386
- - IOS_SDK=iPhoneSimulator
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: iPhoneSimulator on OS X, x86_64
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=x86_64-apple-ios
- - OPENSSL_HOST=iphoneos-cross
- - IOS_CPU=x86_64
- - IOS_SDK=iPhoneSimulator
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: AppleTVSimulator on OS X, x86_64
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=x86_64-apple-ios
- - OPENSSL_HOST=iphoneos-cross
- - IOS_CPU=x86_64
- - IOS_SDK=AppleTVSimulator
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: osx
- osx_image: xcode12.2
- name: WatchSimulator on OS X, i386
- env:
- - TEST_IOS=yes
- - AUTOTOOLS_HOST=i386-apple-ios
- - OPENSSL_HOST=iphoneos-cross
- - IOS_CPU=i386
- - IOS_SDK=WatchSimulator
- - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
- - HOMEBREW_NO_AUTO_UPDATE=1
- - os: linux
- name: Android armv7a, Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_ANDROID=yes
- - AUTOTOOLS_HOST=armv7a-linux-androideabi
- - OPENSSL_HOST=android-arm
- - ANDROID_CPU=armv7a
- - ANDROID_API=23
- - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
- - ANDROID_SDK_ROOT="$HOME/android-sdk"
- - ANDROID_NDK_ROOT="$HOME/android-ndk"
- - os: linux
- name: Android aarch64, Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_ANDROID=yes
- - AUTOTOOLS_HOST=aarch64-linux-android
- - OPENSSL_HOST=android-arm64
- - ANDROID_CPU=aarch64
- - ANDROID_API=23
- - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
- - ANDROID_SDK_ROOT="$HOME/android-sdk"
- - ANDROID_NDK_ROOT="$HOME/android-ndk"
- - os: linux
- name: Android x86, Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_ANDROID=yes
- - AUTOTOOLS_HOST=i686-linux-android
- - OPENSSL_HOST=android-x86
- - ANDROID_CPU=x86
- - ANDROID_API=23
- - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
- - ANDROID_SDK_ROOT="$HOME/android-sdk"
- - ANDROID_NDK_ROOT="$HOME/android-ndk"
- - os: linux
- name: Android x86_64, Linux, Amd64
- compiler: clang
- arch: amd64
- dist: bionic
- env:
- - TEST_ANDROID=yes
- - AUTOTOOLS_HOST=x86_64-linux-android
- - OPENSSL_HOST=android-x86_64
- - ANDROID_CPU=x86_64
- - ANDROID_API=23
- - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
- - ANDROID_SDK_ROOT="$HOME/android-sdk"
- - ANDROID_NDK_ROOT="$HOME/android-ndk"
-
- allow_failures:
- - os: osx
- name: Apple iPhone on iOS, armv7
- - os: osx
- name: Apple iPhone on iOS, arm64
- - os: osx
- name: Apple TV on iOS, arm64
- - os: osx
- name: Apple Watch on iOS, armv7
- - os: osx
- name: iPhoneSimulator on OS X, i386
- - os: osx
- name: iPhoneSimulator on OS X, x86_64
- - os: osx
- name: AppleTVSimulator on OS X, x86_64
- - os: osx
- name: WatchSimulator on OS X, i386
- - os: linux
- name: Android armv7a, Linux, Amd64
- - os: linux
- name: Android aarch64, Linux, Amd64
- - os: linux
- name: Android x86, Linux, Amd64
- - os: linux
- name: Android x86_64, Linux, Amd64
-
-before_script:
- - |
- if [ "$TEST_ANDROID" = "yes" ]; then
- ./contrib/android/install_tools.sh
- elif [ "$TEST_IOS" = "yes" ]; then
- ./contrib/ios/install_tools.sh
- fi
-
-# The Travis docs say to avoid calling exit in the script. It leads to
-# some code duplication to avoid failures in cross-compiles. Also see
-# https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs.
-script:
- - |
- export MAKE_TEST="yes"
- if [ "$TEST_UBSAN" = "yes" ]; then
- export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover=all"
- elif [ "$TEST_ASAN" = "yes" ]; then
- export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address"
- fi
- - |
- if [ "$TEST_IOS" = "yes" ]; then
- export AUTOTOOLS_BUILD="$(./config.guess)"
- export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig"
- source ./contrib/ios/setenv_ios.sh
- ./contrib/ios/install_openssl.sh
- ./contrib/ios/install_expat.sh
- export CONFIG_OPTS="\
- --build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST \
- --prefix=$IOS_PREFIX \
- --with-ssl=$IOS_PREFIX --disable-gost \
- --with-libexpat=$IOS_PREFIX "
- echo CONFIG_OPTS ${CONFIG_OPTS}
- export MAKE_TEST=no
- export TEST_INSTALL=yes
- fi
- - |
- if [ "$TEST_ANDROID" = "yes" ]; then
- export AUTOTOOLS_BUILD="$(./config.guess)"
- export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig"
- ./contrib/android/install_ndk.sh
- source ./contrib/android/setenv_android.sh
- ./contrib/android/install_openssl.sh
- ./contrib/android/install_expat.sh
- export CONFIG_OPTS="\
- --build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST \
- --prefix=$ANDROID_PREFIX \
- --with-ssl=$ANDROID_PREFIX --disable-gost \
- --with-libexpat=$ANDROID_PREFIX "
- echo CONFIG_OPTS ${CONFIG_OPTS}
- export MAKE_TEST=no
- export TEST_INSTALL=yes
- fi
- - ./configure ${CONFIG_OPTS}
- - make -j 2
- - |
- if [ "$MAKE_TEST" = "yes" ]; then
- make test
- fi
- - |
- if [ "$TEST_INSTALL" = "yes" ]; then
- make install
- fi
- - |
- if [ "$TEST_ANALYZER" = "yes" ]; then
- (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
- fi
diff --git a/Makefile.in b/Makefile.in
index ff5dc8fae856..55125a441977 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -61,6 +61,7 @@ PYTHON_CPPFLAGS=-I. @PYTHON_CPPFLAGS@
CFLAGS=-DSRCDIR=$(srcdir) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
+PYTHON_LIBS=@PYTHON_LIBS@
LIBOBJS=@LIBOBJS@
# filter out ctime_r from compat obj.
LIBOBJ_WITHOUT_CTIME=@LIBOBJ_WITHOUT_CTIME@
@@ -85,6 +86,8 @@ LINTFLAGS+=@NETBSD_LINTFLAGS@
LINTFLAGS+="-Dsigset_t=long"
# FreeBSD
LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=int" "-D__va_list=va_list" "-D__uint32_t=uint32_t" "-D_Alignof(x)=x" "-D__aligned(x)=" "-D__requires_exclusive(x)=" "-D__requires_unlocked(x)=" "-D__locks_exclusive(x)=" "-D__trylocks_exclusive(x)=" "-D__unlocks(x)=" "-D__locks_shared(x)=" "-D__trylocks_shared(x)="
+# GCC Docker
+LINTFLAGS+=@GCC_DOCKER_LINTFLAGS@
INSTALL=$(SHELL) $(srcdir)/install-sh
@@ -476,7 +479,7 @@ libunbound/python/libunbound_wrap.c: $(srcdir)/libunbound/python/libunbound.i un
# Pyunbound python unbound wrapper
_unbound.la: libunbound_wrap.lo libunbound.la
- $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) -L. -L.libs libunbound.la $(LIBS)
+ $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) -L. -L.libs libunbound.la $(PYTHON_LIBS)
util/config_file.c: util/configparser.h
util/configlexer.c: $(srcdir)/util/configlexer.lex util/configparser.h
diff --git a/README-Travis.md b/README-Travis.md
index 3ce22cc20f59..ca64456124af 100644
--- a/README-Travis.md
+++ b/README-Travis.md
@@ -241,7 +241,7 @@ If you are working from a developer machine you probably already have the necess
The fourth step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory.
-`IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair recieves a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported.
+`IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair receives a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported.
`PKG_CONFIG_PATH` is an important variable. It is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`.
diff --git a/acx_nlnetlabs.m4 b/acx_nlnetlabs.m4
index 39e92d875331..1574f97bfe02 100644
--- a/acx_nlnetlabs.m4
+++ b/acx_nlnetlabs.m4
@@ -2,7 +2,10 @@
# Copyright 2009, Wouter Wijngaards, NLnet Labs.
# BSD licensed.
#
-# Version 41
+# Version 43
+# 2021-08-17 fix sed script in ssldir split handling.
+# 2021-08-17 fix for openssl to detect split version, with ssldir_include
+# and ssldir_lib output directories.
# 2021-07-30 fix for openssl use of lib64 directory.
# 2021-06-14 fix nonblocking test to use host instead of target for mingw test.
# 2021-05-17 fix nonblocking socket test from grep on mingw32 to mingw for
@@ -647,6 +650,30 @@ AC_DEFUN([ACX_SSL_CHECKS], [
withval=$1
if test x_$withval != x_no; then
AC_MSG_CHECKING(for SSL)
+ if test -n "$withval"; then
+ dnl look for openssl install with different version, eg.
+ dnl in /usr/include/openssl11/openssl/ssl.h
+ dnl and /usr/lib64/openssl11/libssl.so
+ dnl with the --with-ssl=/usr/include/openssl11
+ if test ! -f "$withval/include/openssl/ssl.h" -a -f "$withval/openssl/ssl.h"; then
+ ssldir="$withval"
+ found_ssl="yes"
+ withval=""
+ ssldir_include="$ssldir"
+ dnl find the libdir
+ ssldir_lib=`echo $ssldir | sed -e 's/include/lib/'`
+ if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
+ : # found here
+ else
+ ssldir_lib=`echo $ssldir | sed -e 's/include/lib64/'`
+ if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
+ : # found here
+ else
+ AC_MSG_ERROR([Could not find openssl lib file, $ssldir_lib/libssl.[so,a], pass like "/usr/local" or "/usr/include/openssl11"])
+ fi
+ fi
+ fi
+ fi
if test x_$withval = x_ -o x_$withval = x_yes; then
withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr"
fi
@@ -654,12 +681,12 @@ AC_DEFUN([ACX_SSL_CHECKS], [
ssldir="$dir"
if test -f "$dir/include/openssl/ssl.h"; then
found_ssl="yes"
- AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.])
- dnl assume /usr/include is already in the include-path.
- if test "$ssldir" != "/usr"; then
- CPPFLAGS="$CPPFLAGS -I$ssldir/include"
- LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include"
- fi
+ ssldir_include="$ssldir/include"
+ if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
+ ssldir_lib="$ssldir/lib64"
+ else
+ ssldir_lib="$ssldir/lib"
+ fi
break;
fi
done
@@ -667,19 +694,16 @@ AC_DEFUN([ACX_SSL_CHECKS], [
AC_MSG_ERROR(Cannot find the SSL libraries in $withval)
else
AC_MSG_RESULT(found in $ssldir)
+ AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.])
HAVE_SSL=yes
- dnl assume /usr is already in the lib and dynlib paths.
- if test "$ssldir" != "/usr" -a "$ssldir" != ""; then
- if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
- LDFLAGS="$LDFLAGS -L$ssldir/lib64"
- LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib64"
- ACX_RUNTIME_PATH_ADD([$ssldir/lib64])
- else
- LDFLAGS="$LDFLAGS -L$ssldir/lib"
- LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib"
- ACX_RUNTIME_PATH_ADD([$ssldir/lib])
- fi
- fi
+ dnl assume /usr is already in the include, lib and dynlib paths.
+ if test "$ssldir" != "/usr"; then
+ CPPFLAGS="$CPPFLAGS -I$ssldir_include"
+ LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir_include"
+ LDFLAGS="$LDFLAGS -L$ssldir_lib"
+ LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir_lib"
+ ACX_RUNTIME_PATH_ADD([$ssldir_lib])
+ fi
AC_MSG_CHECKING([for EVP_sha256 in -lcrypto])
LIBS="$LIBS -lcrypto"
@@ -758,7 +782,7 @@ dnl
AC_DEFUN([ACX_WITH_SSL],
[
AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
- /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
+ /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr or specify like /usr/include/openssl11)]),[
],[
withval="yes"
])
@@ -776,7 +800,7 @@ dnl
AC_DEFUN([ACX_WITH_SSL_OPTIONAL],
[
AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl
- /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[
+ /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr or specify like /usr/include/openssl11)]),[
],[
withval="yes"
])
diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c
index af4ffe5f28b5..725bc6ce8b38 100644
--- a/cachedb/cachedb.c
+++ b/cachedb/cachedb.c
@@ -519,7 +519,7 @@ parse_data(struct module_qstate* qstate, struct sldns_buffer* buf)
sldns_buffer_set_limit(buf, lim);
return 0;
}
- if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
+ if(parse_extract_edns_from_response_msg(prs, &edns, qstate->env->scratch) !=
LDNS_RCODE_NOERROR) {
sldns_buffer_set_limit(buf, lim);
return 0;
diff --git a/config.h.in b/config.h.in
index ea6afa4802ee..e8a26735d2d3 100644
--- a/config.h.in
+++ b/config.h.in
@@ -72,6 +72,9 @@
/* If we have be64toh */
#undef HAVE_BE64TOH
+/* Define to 1 if you have the `BIO_set_callback_ex' function. */
+#undef HAVE_BIO_SET_CALLBACK_EX
+
/* Define to 1 if you have the <bsd/stdlib.h> header file. */
#undef HAVE_BSD_STDLIB_H
@@ -315,6 +318,9 @@
/* Define to 1 if you have the <ifaddrs.h> header file. */
#undef HAVE_IFADDRS_H
+/* Define to 1 if you have the `if_nametoindex' function. */
+#undef HAVE_IF_NAMETOINDEX
+
/* Define to 1 if you have the `inet_aton' function. */
#undef HAVE_INET_ATON
diff --git a/config.sub b/config.sub
index d80c5d759e48..d74fb6deac94 100755
--- a/config.sub
+++ b/config.sub
@@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
-timestamp='2021-07-03'
+timestamp='2021-08-14'
# 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
@@ -121,9 +121,11 @@ esac
# Split fields of configuration type
# shellcheck disable=SC2162
+saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <<EOF
$1
EOF
+IFS=$saved_IFS
# Separate into logical components for further validation
case $1 in
@@ -172,6 +174,10 @@ case $1 in
basic_machine=$field1
basic_os=$field2
;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
@@ -931,9 +937,11 @@ case $basic_machine in
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read cpu vendor <<EOF
$basic_machine
EOF
+ IFS=$saved_IFS
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -1313,9 +1321,11 @@ case $basic_os in
;;
*-*)
# shellcheck disable=SC2162
+ saved_IFS=$IFS
IFS="-" read kernel os <<EOF
$basic_os
EOF
+ IFS=$saved_IFS
;;
# Default OS when just kernel was specified
nto*)
@@ -1697,7 +1707,7 @@ fi
# Now, validate our (potentially fixed-up) OS.
case $os in
# Sometimes we do "kernel-libc", so those need to count as OSes.
- musl* | newlib* | uclibc*)
+ musl* | newlib* | relibc* | uclibc*)
;;
# Likewise for "kernel-abi"
eabi* | gnueabi*)
@@ -1738,7 +1748,7 @@ case $os in
| skyos* | haiku* | rdos* | toppers* | drops* | es* \
| onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
| midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*)
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@@ -1755,11 +1765,12 @@ esac
# As a final step for OS-related things, validate the OS-kernel combination
# (given a valid OS), if there is a kernel.
case $kernel-$os in
- linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* )
;;
uclinux-uclibc* )
;;
- -dietlibc* | -newlib* | -musl* | -uclibc* )
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
diff --git a/configure b/configure
index 346fd5e5b076..df25819eabbf 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for unbound 1.13.2.
+# Generated by GNU Autoconf 2.69 for unbound 1.14.0rc1.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.13.2'
-PACKAGE_STRING='unbound 1.13.2'
+PACKAGE_VERSION='1.14.0rc1'
+PACKAGE_STRING='unbound 1.14.0rc1'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -682,6 +682,7 @@ SSLLIB
HAVE_SSL
PC_CRYPTO_DEPENDENCY
CONFIG_DATE
+GCC_DOCKER_LINTFLAGS
NETBSD_LINTFLAGS
PYUNBOUND_UNINSTALL
PYUNBOUND_INSTALL
@@ -697,6 +698,7 @@ swig
SWIG_LIB
SWIG
PC_PY_DEPENDENCY
+PYTHON_LIBS
PY_MAJOR_VERSION
PYTHON_SITE_PKG
PYTHON_LDFLAGS
@@ -1464,7 +1466,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures unbound 1.13.2 to adapt to many kinds of systems.
+\`configure' configures unbound 1.14.0rc1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1529,7 +1531,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.13.2:";;
+ short | recursive ) echo "Configuration of unbound 1.14.0rc1:";;
esac
cat <<\_ACEOF
@@ -1649,7 +1651,7 @@ Optional Packages:
--with-nettle=path use libnettle as crypto library, installed at path.
--with-ssl=pathname enable SSL (will check /usr/local/ssl /usr/lib/ssl
/usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw
- /usr)
+ /usr or specify like /usr/include/openssl11)
--with-libbsd Use portable libbsd functions
--with-deprecate-rsa-1024
Deprecate RSA 1024 bit length, makes that an
@@ -1771,7 +1773,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.13.2
+unbound configure 1.14.0rc1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2480,7 +2482,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by unbound $as_me 1.13.2, which was
+It was created by unbound $as_me 1.14.0rc1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2830,13 +2832,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=13
+UNBOUND_VERSION_MINOR=14
-UNBOUND_VERSION_MICRO=2
+UNBOUND_VERSION_MICRO=0rc1
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=13
+LIBUNBOUND_REVISION=14
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -2917,6 +2919,7 @@ LIBUNBOUND_AGE=1
# 1.13.0 had 9:11:1
# 1.13.1 had 9:12:1
# 1.13.2 had 9:13:1
+# 1.14.0 had 9:14:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -15322,7 +15325,7 @@ if test "$ac_res" != no; then :
fi
-# check wether strptime also works
+# check whether strptime also works
# check some functions of the OS before linking libs (while still runnable).
for ac_header in unistd.h
@@ -17553,11 +17556,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
$as_echo "#define HAVE_PYTHON 1" >>confdefs.h
- if test -n "$LIBS"; then
- LIBS="$PYTHON_LDFLAGS $LIBS"
- else
- LIBS="$PYTHON_LDFLAGS"
+ if test x_$ub_with_pythonmod != x_no; then
+ if test -n "$LIBS"; then
+ LIBS="$PYTHON_LDFLAGS $LIBS"
+ else
+ LIBS="$PYTHON_LDFLAGS"
+ fi
fi
+ PYTHON_LIBS="$PYTHON_LDFLAGS"
+
if test -n "$CPPFLAGS"; then
CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
else
@@ -17887,6 +17894,12 @@ if test "`uname`" = "NetBSD"; then
NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
fi
+
+if test "`uname -o`" = "GNU/Linux"; then
+ # splint cannot parse modern c99 header files
+ GCC_DOCKER_LINTFLAGS='-syntax'
+
+fi
CONFIG_DATE=`date +%Y%m%d`
@@ -17993,6 +18006,25 @@ fi
if test x_$withval != x_no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL" >&5
$as_echo_n "checking for SSL... " >&6; }
+ if test -n "$withval"; then
+ if test ! -f "$withval/include/openssl/ssl.h" -a -f "$withval/openssl/ssl.h"; then
+ ssldir="$withval"
+ found_ssl="yes"
+ withval=""
+ ssldir_include="$ssldir"
+ ssldir_lib=`echo $ssldir | sed -e 's/include/lib/'`
+ if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
+ : # found here
+ else
+ ssldir_lib=`echo $ssldir | sed -e 's/include/lib64/'`
+ if test -f "$ssldir_lib/libssl.a" -o -f "$ssldir_lib/libssl.so"; then
+ : # found here
+ else
+ as_fn_error $? "Could not find openssl lib file, $ssldir_lib/libssl.so,a, pass like \"/usr/local\" or \"/usr/include/openssl11\"" "$LINENO" 5
+ fi
+ fi
+ fi
+ fi
if test x_$withval = x_ -o x_$withval = x_yes; then
withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr"
fi
@@ -18000,15 +18032,12 @@ $as_echo_n "checking for SSL... " >&6; }
ssldir="$dir"
if test -f "$dir/include/openssl/ssl.h"; then
found_ssl="yes"
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SSL /**/
-_ACEOF
-
- if test "$ssldir" != "/usr"; then
- CPPFLAGS="$CPPFLAGS -I$ssldir/include"
- LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include"
- fi
+ ssldir_include="$ssldir/include"
+ if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
+ ssldir_lib="$ssldir/lib64"
+ else
+ ssldir_lib="$ssldir/lib"
+ fi
break;
fi
done
@@ -18017,30 +18046,25 @@ _ACEOF
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $ssldir" >&5
$as_echo "found in $ssldir" >&6; }
- HAVE_SSL=yes
- if test "$ssldir" != "/usr" -a "$ssldir" != ""; then
- if test ! -d "$ssldir/lib" -a -d "$ssldir/lib64"; then
- LDFLAGS="$LDFLAGS -L$ssldir/lib64"
- LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib64"
- if test "x$enable_rpath" = xyes; then
- if echo "$ssldir/lib64" | grep "^/" >/dev/null; then
- RUNTIME_PATH="$RUNTIME_PATH -R$ssldir/lib64"
- fi
- fi
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSL /**/
+_ACEOF
- else
- LDFLAGS="$LDFLAGS -L$ssldir/lib"
- LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib"
+ HAVE_SSL=yes
+ if test "$ssldir" != "/usr"; then
+ CPPFLAGS="$CPPFLAGS -I$ssldir_include"
+ LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir_include"
+ LDFLAGS="$LDFLAGS -L$ssldir_lib"
+ LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir_lib"
if test "x$enable_rpath" = xyes; then
- if echo "$ssldir/lib" | grep "^/" >/dev/null; then
- RUNTIME_PATH="$RUNTIME_PATH -R$ssldir/lib"
+ if echo "$ssldir_lib" | grep "^/" >/dev/null; then
+ RUNTIME_PATH="$RUNTIME_PATH -R$ssldir_lib"
fi
fi
- fi
- fi
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_sha256 in -lcrypto" >&5
$as_echo_n "checking for EVP_sha256 in -lcrypto... " >&6; }
@@ -18328,7 +18352,7 @@ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
SSLLIB="-lssl"
-PC_CRYPTO_DEPENDENCY="libcrypto libssl"
+PC_CRYPTO_DEPENDENCY=""
# check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
@@ -18369,7 +18393,7 @@ rm -f core conftest.err conftest.$ac_objext \
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LibreSSL" >&5
$as_echo_n "checking for LibreSSL... " >&6; }
-if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
+if grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -18436,7 +18460,7 @@ fi
done
-for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new
+for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -18758,7 +18782,7 @@ $as_echo "#define CLIENT_SUBNET 1" >>confdefs.h
;;
esac
-# check wether gost also works
+# check whether gost also works
# Check whether --enable-gost was given.
if test "${enable_gost+set}" = set; then :
@@ -18791,7 +18815,7 @@ $as_echo_n "checking if GOST works... " >&6; }
if test c${cross_compiling} = cno; then
BAKCFLAGS="$CFLAGS"
if test -n "$ssldir"; then
- CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib"
+ CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
fi
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
@@ -18974,8 +18998,8 @@ fi
# see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if openssl supports SHA2 and ECDSA with EVP" >&5
$as_echo_n "checking if openssl supports SHA2 and ECDSA with EVP... " >&6; }
- if grep OPENSSL_VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
- if grep OPENSSL_VERSION_NUMBER $ssldir/include/openssl/opensslv.h | grep 0x0 >/dev/null; then
+ if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
+ if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -20398,7 +20422,7 @@ if test "$ac_res" != no; then :
fi
-for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs
+for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -21816,7 +21840,7 @@ _ACEOF
-version=1.13.2
+version=1.14.0rc1
date=`date +'%b %e, %Y'`
@@ -22335,7 +22359,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by unbound $as_me 1.13.2, which was
+This file was extended by unbound $as_me 1.14.0rc1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22401,7 +22425,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-unbound config.status 1.13.2
+unbound config.status 1.14.0rc1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index fe911723c87e..418ea099f6ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,15 +10,15 @@ sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
-m4_define([VERSION_MINOR],[13])
-m4_define([VERSION_MICRO],[2])
+m4_define([VERSION_MINOR],[14])
+m4_define([VERSION_MICRO],[0rc1])
AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound])
AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=13
+LIBUNBOUND_REVISION=14
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -99,6 +99,7 @@ LIBUNBOUND_AGE=1
# 1.13.0 had 9:11:1
# 1.13.1 had 9:12:1
# 1.13.2 had 9:13:1
+# 1.14.0 had 9:14:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -457,7 +458,7 @@ AC_SUBST(RUNTIME_PATH)
AC_SEARCH_LIBS([inet_pton], [nsl])
AC_SEARCH_LIBS([socket], [socket])
-# check wether strptime also works
+# check whether strptime also works
AC_DEFUN([AC_CHECK_STRPTIME_WORKS],
[AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING(whether strptime works)
@@ -699,11 +700,15 @@ if test x_$ub_test_python != x_no; then
AC_SUBST(PY_MAJOR_VERSION)
# Have Python
AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.])
- if test -n "$LIBS"; then
- LIBS="$PYTHON_LDFLAGS $LIBS"
- else
- LIBS="$PYTHON_LDFLAGS"
+ if test x_$ub_with_pythonmod != x_no; then
+ if test -n "$LIBS"; then
+ LIBS="$PYTHON_LDFLAGS $LIBS"
+ else
+ LIBS="$PYTHON_LDFLAGS"
+ fi
fi
+ PYTHON_LIBS="$PYTHON_LDFLAGS"
+ AC_SUBST(PYTHON_LIBS)
if test -n "$CPPFLAGS"; then
CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
else
@@ -776,6 +781,12 @@ if test "`uname`" = "NetBSD"; then
NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_'
AC_SUBST(NETBSD_LINTFLAGS)
fi
+
+if test "`uname -o`" = "GNU/Linux"; then
+ # splint cannot parse modern c99 header files
+ GCC_DOCKER_LINTFLAGS='-syntax'
+ AC_SUBST(GCC_DOCKER_LINTFLAGS)
+fi
CONFIG_DATE=`date +%Y%m%d`
AC_SUBST(CONFIG_DATE)
@@ -830,7 +841,7 @@ ACX_WITH_SSL
ACX_LIB_SSL
SSLLIB="-lssl"
-PC_CRYPTO_DEPENDENCY="libcrypto libssl"
+PC_CRYPTO_DEPENDENCY=""
AC_SUBST(PC_CRYPTO_DEPENDENCY)
# check if -lcrypt32 is needed because CAPIENG needs that. (on windows)
@@ -850,7 +861,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
])
AC_MSG_CHECKING([for LibreSSL])
-if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
+if grep VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL])
# libressl provides these compat functions, but they may also be
@@ -860,7 +871,7 @@ else
AC_MSG_RESULT([no])
fi
AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT])
-AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new])
+AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex])
# these check_funcs need -lssl
BAKLIBS="$LIBS"
@@ -973,14 +984,14 @@ case "$enable_subnet" in
;;
esac
-# check wether gost also works
+# check whether gost also works
AC_DEFUN([AC_CHECK_GOST_WORKS],
[AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING([if GOST works])
if test c${cross_compiling} = cno; then
BAKCFLAGS="$CFLAGS"
if test -n "$ssldir"; then
- CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib"
+ CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib"
fi
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <string.h>
@@ -1103,8 +1114,8 @@ case "$enable_ecdsa" in
])
# see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP])
- if grep OPENSSL_VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
- if grep OPENSSL_VERSION_NUMBER $ssldir/include/openssl/opensslv.h | grep 0x0 >/dev/null; then
+ if grep OPENSSL_VERSION_TEXT $ssldir_include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then
+ if grep OPENSSL_VERSION_NUMBER $ssldir_include/openssl/opensslv.h | grep 0x0 >/dev/null; then
AC_MSG_RESULT([no])
AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl])
else
@@ -1594,7 +1605,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([
AC_MSG_RESULT(no))
AC_SEARCH_LIBS([setusercontext], [util])
-AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs])
+AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex])
AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
diff --git a/contrib/Dockerfile.tests b/contrib/Dockerfile.tests
new file mode 100644
index 000000000000..417daccb21f9
--- /dev/null
+++ b/contrib/Dockerfile.tests
@@ -0,0 +1,11 @@
+FROM gcc:latest
+WORKDIR /usr/src/unbound
+RUN apt-get update
+# install semantic parser & lexical analyzer
+RUN apt-get install -y bison flex
+# install packages used in tests
+RUN apt-get install -y ldnsutils dnsutils xxd splint doxygen netcat
+# accept short rsa keys, which are used in tests
+RUN sed -i 's/SECLEVEL=2/SECLEVEL=1/g' /usr/lib/ssl/openssl.cnf
+
+CMD ["/bin/bash"]
diff --git a/contrib/drop2rpz b/contrib/drop2rpz
index 01602f651166..6ac9b492efe3 100644
--- a/contrib/drop2rpz
+++ b/contrib/drop2rpz
@@ -4,7 +4,7 @@
#
# unbound.conf:
# rpz:
-# name: "spamhaus-drop.rpz.local."
+# name: "drop.spamhaus.org.rpz.local."
# zonefile: "/path/tp/spamhaus-drop.rpz.local"
# rpz-log: yes
# rpz-log-name: "spamhaus-drop"
diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in
index 90ee708ce2c5..ada5fac9c224 100644
--- a/contrib/unbound.service.in
+++ b/contrib/unbound.service.in
@@ -64,7 +64,8 @@ ProtectClock=true
ProtectControlGroups=true
ProtectKernelLogs=true
ProtectKernelModules=true
-ProtectKernelTunables=true
+# This breaks using socket options like 'so-rcvbuf'. Explicitly disable for visibility.
+ProtectKernelTunables=false
ProtectProc=invisible
ProtectSystem=strict
RuntimeDirectory=unbound
diff --git a/daemon/daemon.c b/daemon/daemon.c
index 6d666788325a..0e3923b4e9f2 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -210,7 +210,6 @@ daemon_init(void)
}
#endif /* USE_WINSOCK */
signal_handling_record();
- checklock_start();
#ifdef HAVE_SSL
# ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS
ERR_load_crypto_strings();
@@ -280,6 +279,7 @@ daemon_init(void)
free(daemon);
return NULL;
}
+ listen_setup_locks();
if(gettimeofday(&daemon->time_boot, NULL) < 0)
log_err("gettimeofday: %s", strerror(errno));
daemon->time_last_stat = daemon->time_boot;
@@ -781,6 +781,7 @@ daemon_delete(struct daemon* daemon)
alloc_clear(&daemon->superalloc);
acl_list_delete(daemon->acl);
tcl_list_delete(daemon->tcl);
+ listen_desetup_locks();
free(daemon->chroot);
free(daemon->pidfile);
free(daemon->env);
diff --git a/daemon/remote.c b/daemon/remote.c
index 923ddefa4f29..adf0383895d4 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -813,7 +813,7 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon,
iter = mod_get_mem(&worker->env, "iterator");
respip = mod_get_mem(&worker->env, "respip");
#ifdef CLIENT_SUBNET
- subnet = mod_get_mem(&worker->env, "subnet");
+ subnet = mod_get_mem(&worker->env, "subnetcache");
#endif /* CLIENT_SUBNET */
#ifdef USE_IPSECMOD
ipsecmod = mod_get_mem(&worker->env, "ipsecmod");
diff --git a/daemon/stats.c b/daemon/stats.c
index 8720a52d6c6e..d08f18dbb137 100644
--- a/daemon/stats.c
+++ b/daemon/stats.c
@@ -137,7 +137,7 @@ static void
set_subnet_stats(struct worker* worker, struct ub_server_stats* svr,
int reset)
{
- int m = modstack_find(&worker->env.mesh->mods, "subnet");
+ int m = modstack_find(&worker->env.mesh->mods, "subnetcache");
struct subnet_env* sne;
if(m == -1)
return;
diff --git a/daemon/unbound.c b/daemon/unbound.c
index 934a96c8068b..457a08032857 100644
--- a/daemon/unbound.c
+++ b/daemon/unbound.c
@@ -781,6 +781,7 @@ main(int argc, char* argv[])
int cmdline_cfg = 0;
#endif
+ checklock_start();
log_init(NULL, 0, NULL);
log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0];
log_ident_set_default(log_ident_default);
diff --git a/daemon/worker.c b/daemon/worker.c
index e9e163a0448b..5d2483cd2cd9 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -146,7 +146,7 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
(&worker->env, i);
#ifdef CLIENT_SUBNET
else if(strcmp(worker->env.mesh->mods.mod[i]->name,
- "subnet")==0)
+ "subnetcache")==0)
subnet += (*worker->env.mesh->mods.mod[i]->get_mem)
(&worker->env, i);
#endif /* CLIENT_SUBNET */
@@ -205,7 +205,7 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
(&worker->env, i);
#ifdef CLIENT_SUBNET
else if(strcmp(worker->env.mesh->mods.mod[i]->name,
- "subnet")==0)
+ "subnetcache")==0)
subnet += (*worker->env.mesh->mods.mod[i]->get_mem)
(&worker->env, i);
#endif /* CLIENT_SUBNET */
@@ -449,7 +449,6 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
* Then check if it needs validation, if so, this routine fails,
* so that iterator can prime and validator can verify rrsets.
*/
- struct edns_data edns_bak;
uint16_t udpsize = edns->udp_size;
int secure = 0;
time_t timenow = *worker->env.now;
@@ -508,7 +507,6 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
}
}
/* return this delegation from the cache */
- edns_bak = *edns;
edns->edns_version = EDNS_ADVERTISED_VERSION;
edns->udp_size = EDNS_ADVERTISED_SIZE;
edns->ext_rcode = 0;
@@ -518,15 +516,13 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
worker->env.now_tv))
return 0;
msg->rep->flags |= BIT_QR|BIT_RA;
- if(!apply_edns_options(edns, &edns_bak, worker->env.cfg,
- repinfo->c, worker->scratchpad) ||
- !reply_info_answer_encode(&msg->qinfo, msg->rep, id, flags,
+ if(!reply_info_answer_encode(&msg->qinfo, msg->rep, id, flags,
repinfo->c->buffer, 0, 1, worker->scratchpad,
udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) {
if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL,
LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
worker->env.now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
&msg->qinfo, id, flags, edns);
}
@@ -604,7 +600,6 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
struct reply_info* rep, uint16_t id, uint16_t flags,
struct comm_reply* repinfo, struct edns_data* edns)
{
- struct edns_data edns_bak;
time_t timenow = *worker->env.now;
uint16_t udpsize = edns->udp_size;
struct reply_info* encode_rep = rep;
@@ -685,7 +680,6 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
}
} else *is_secure_answer = 0;
- edns_bak = *edns;
edns->edns_version = EDNS_ADVERTISED_VERSION;
edns->udp_size = EDNS_ADVERTISED_SIZE;
edns->ext_rcode = 0;
@@ -722,15 +716,13 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
if(!*partial_repp)
goto bail_out;
}
- } else if(!apply_edns_options(edns, &edns_bak, worker->env.cfg,
- repinfo->c, worker->scratchpad) ||
- !reply_info_answer_encode(qinfo, encode_rep, id, flags,
+ } else if(!reply_info_answer_encode(qinfo, encode_rep, id, flags,
repinfo->c->buffer, timenow, 1, worker->scratchpad,
udpsize, edns, (int)(edns->bits & EDNS_DO), *is_secure_answer)) {
if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL,
LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
worker->env.now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
qinfo, id, flags, edns);
}
@@ -789,6 +781,14 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns,
int i;
unsigned int rd = LDNS_RD_WIRE(sldns_buffer_begin(pkt));
unsigned int cd = LDNS_CD_WIRE(sldns_buffer_begin(pkt));
+ size_t udpsize = edns->udp_size;
+ edns->edns_version = EDNS_ADVERTISED_VERSION;
+ edns->udp_size = EDNS_ADVERTISED_SIZE;
+ edns->bits &= EDNS_DO;
+ if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL,
+ LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad,
+ worker->env.now_tv))
+ edns->opt_list_inplace_cb_out = NULL;
sldns_buffer_clear(pkt);
sldns_buffer_skip(pkt, (ssize_t)sizeof(uint16_t)); /* skip id */
sldns_buffer_write_u16(pkt, (uint16_t)(BIT_QR|BIT_RA));
@@ -804,6 +804,12 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns,
for(i=0; i<num; i++) {
size_t len = strlen(str[i]);
if(len>255) len=255; /* cap size of TXT record */
+ if(sldns_buffer_position(pkt)+2+2+2+4+2+1+len+
+ calc_edns_field_size(edns) > udpsize) {
+ sldns_buffer_write_u16_at(pkt, 6, i); /* ANCOUNT */
+ LDNS_TC_SET(sldns_buffer_begin(pkt));
+ break;
+ }
sldns_buffer_write_u16(pkt, 0xc00c); /* compr ptr to query */
sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_TXT);
sldns_buffer_write_u16(pkt, LDNS_RR_CLASS_CH);
@@ -813,13 +819,6 @@ chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns,
sldns_buffer_write(pkt, str[i], len);
}
sldns_buffer_flip(pkt);
- edns->edns_version = EDNS_ADVERTISED_VERSION;
- edns->udp_size = EDNS_ADVERTISED_SIZE;
- edns->bits &= EDNS_DO;
- if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL,
- LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad,
- worker->env.now_tv))
- edns->opt_list = NULL;
if(sldns_buffer_capacity(pkt) >=
sldns_buffer_limit(pkt)+calc_edns_field_size(edns))
attach_edns_record(pkt, edns);
@@ -1004,7 +1003,6 @@ answer_notify(struct worker* w, struct query_info* qinfo,
edns->udp_size = EDNS_ADVERTISED_SIZE;
edns->ext_rcode = 0;
edns->bits &= EDNS_DO;
- edns->opt_list = NULL;
error_encode(pkt, rcode, qinfo,
*(uint16_t*)(void *)sldns_buffer_begin(pkt),
sldns_buffer_read_u16_at(pkt, 2), edns);
@@ -1241,7 +1239,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
}
goto send_reply;
}
- if((ret=parse_edns_from_pkt(c->buffer, &edns, worker->scratchpad)) != 0) {
+ if((ret=parse_edns_from_query_pkt(c->buffer, &edns, worker->env.cfg, c,
+ worker->scratchpad)) != 0) {
struct edns_data reply_edns;
verbose(VERB_ALGO, "worker parse edns: formerror.");
log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
@@ -1256,13 +1255,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
goto send_reply;
}
if(edns.edns_present) {
- struct edns_option* edns_opt;
if(edns.edns_version != 0) {
edns.ext_rcode = (uint8_t)(EDNS_RCODE_BADVERS>>4);
edns.edns_version = EDNS_ADVERTISED_VERSION;
edns.udp_size = EDNS_ADVERTISED_SIZE;
edns.bits &= EDNS_DO;
- edns.opt_list = NULL;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = NULL;
+ edns.opt_list_inplace_cb_out = NULL;
edns.padding_block_size = 0;
verbose(VERB_ALGO, "query with bad edns version.");
log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
@@ -1282,26 +1282,6 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
edns.udp_size = NORMAL_UDP_SIZE;
}
- if(c->type != comm_udp) {
- edns_opt = edns_opt_list_find(edns.opt_list, LDNS_EDNS_KEEPALIVE);
- if(edns_opt && edns_opt->opt_len > 0) {
- edns.ext_rcode = 0;
- edns.edns_version = EDNS_ADVERTISED_VERSION;
- edns.udp_size = EDNS_ADVERTISED_SIZE;
- edns.bits &= EDNS_DO;
- edns.opt_list = NULL;
- verbose(VERB_ALGO, "query with bad edns keepalive.");
- log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen);
- error_encode(c->buffer, LDNS_RCODE_FORMERR, &qinfo,
- *(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
- sldns_buffer_read_u16_at(c->buffer, 2), NULL);
- if(sldns_buffer_capacity(c->buffer) >=
- sldns_buffer_limit(c->buffer)+calc_edns_field_size(&edns))
- attach_edns_record(c->buffer, &edns);
- regional_free_all(worker->scratchpad);
- goto send_reply;
- }
- }
}
if(edns.udp_size > worker->daemon->cfg->max_udp_size &&
c->type == comm_udp) {
@@ -1355,7 +1335,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
goto send_reply;
}
if(worker->env.auth_zones &&
- rpz_apply_qname_trigger(worker->env.auth_zones,
+ rpz_callback_from_worker_request(worker->env.auth_zones,
&worker->env, &qinfo, &edns, c->buffer, worker->scratchpad,
repinfo, acladdr->taglist, acladdr->taglen, &worker->stats)) {
regional_free_all(worker->scratchpad);
@@ -1453,7 +1433,7 @@ lookup_cache:
* this is a two-pass operation, and lookup_qinfo is different for
* each pass. We should still pass the original qinfo to
* answer_from_cache(), however, since it's used to build the reply. */
- if(!edns_bypass_cache_stage(edns.opt_list, &worker->env)) {
+ if(!edns_bypass_cache_stage(edns.opt_list_in, &worker->env)) {
is_expired_answer = 0;
is_secure_answer = 0;
h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2));
@@ -1988,8 +1968,8 @@ worker_delete(struct worker* worker)
struct outbound_entry*
worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
int want_dnssec, int nocaps, struct sockaddr_storage* addr,
- socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream,
- char* tls_auth_name, struct module_qstate* q)
+ socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream,
+ int ssl_upstream, char* tls_auth_name, struct module_qstate* q)
{
struct worker* worker = q->env->worker;
struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
@@ -1998,7 +1978,7 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
return NULL;
e->qstate = q;
e->qsent = outnet_serviced_query(worker->back, qinfo, flags, dnssec,
- want_dnssec, nocaps, q->env->cfg->tcp_upstream,
+ want_dnssec, nocaps, tcp_upstream,
ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q,
worker_handle_service_reply, e, worker->back->udp_buff, q->env);
if(!e->qsent) {
@@ -2045,7 +2025,7 @@ struct outbound_entry* libworker_send_query(
uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec),
int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps),
struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen),
- uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen),
+ uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
struct module_qstate* ATTR_UNUSED(q))
{
diff --git a/dns64/dns64.c b/dns64/dns64.c
index c79bc9c65796..d01b436e1d6c 100644
--- a/dns64/dns64.c
+++ b/dns64/dns64.c
@@ -685,8 +685,12 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
switch(event) {
case module_event_new:
/* Tag this query as being new and fall through. */
- iq = (struct dns64_qstate*)regional_alloc(
- qstate->region, sizeof(*iq));
+ if (!(iq = (struct dns64_qstate*)regional_alloc(
+ qstate->region, sizeof(*iq)))) {
+ log_err("out of memory");
+ qstate->ext_state[id] = module_error;
+ return;
+ }
qstate->minfo[id] = iq;
iq->state = DNS64_NEW_QUERY;
iq->started_no_cache_store = qstate->no_cache_store;
@@ -913,8 +917,9 @@ dns64_adjust_ptr(struct module_qstate* qstate, struct module_qstate* super)
sizeof(struct dns_msg))))
return;
super->return_msg->qinfo = super->qinfo;
- super->return_msg->rep = reply_info_copy(qstate->return_msg->rep, NULL,
- super->region);
+ if (!(super->return_msg->rep = reply_info_copy(qstate->return_msg->rep,
+ NULL, super->region)))
+ return;
/*
* Adjust the domain name of the answer RR set so that it matches the
diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c
index 9b324ae69052..4902447fda01 100644
--- a/dnscrypt/dnscrypt.c
+++ b/dnscrypt/dnscrypt.c
@@ -435,7 +435,7 @@ dnscrypt_hrtime(void)
/**
* Add the server nonce part to once.
- * The nonce is made half of client nonce and the seconf half of the server
+ * The nonce is made half of client nonce and the second half of the server
* nonce, both of them of size crypto_box_HALF_NONCEBYTES.
* \param[in] nonce: a uint8_t* of size crypto_box_NONCEBYTES
*/
@@ -674,7 +674,7 @@ dnsc_find_cert(struct dnsc_env* dnscenv, struct sldns_buffer* buffer)
/**
* Insert local-zone and local-data into configuration.
* In order to be able to serve certs over TXT, we can reuse the local-zone and
- * local-data config option. The zone and qname are infered from the
+ * local-data config option. The zone and qname are inferred from the
* provider_name and the content of the TXT record from the certificate content.
* returns the number of certificate TXT record that were loaded.
* < 0 in case of error.
diff --git a/dnscrypt/dnscrypt.h b/dnscrypt/dnscrypt.h
index 666f54e62aa4..b0da9b732681 100644
--- a/dnscrypt/dnscrypt.h
+++ b/dnscrypt/dnscrypt.h
@@ -114,7 +114,7 @@ void dnsc_delete(struct dnsc_env *env);
/**
* handle a crypted dnscrypt request.
- * Determine wether or not a query is coming over the dnscrypt listener and
+ * Determine whether or not a query is coming over the dnscrypt listener and
* attempt to uncurve it or detect if it is a certificate query.
* return 0 in case of failure.
*/
@@ -122,7 +122,7 @@ int dnsc_handle_curved_request(struct dnsc_env* dnscenv,
struct comm_reply* repinfo);
/**
* handle an unencrypted dnscrypt request.
- * Determine wether or not a query is going over the dnscrypt channel and
+ * Determine whether or not a query is going over the dnscrypt channel and
* attempt to curve it unless it was not crypted like when it is a
* certificate query.
* \return 0 in case of failure.
diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c
index f1ace3c34023..14aacaef567b 100644
--- a/dnstap/dtstream.c
+++ b/dnstap/dtstream.c
@@ -251,7 +251,7 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len)
entry->buf = buf;
entry->len = len;
- /* aqcuire lock */
+ /* acquire lock */
lock_basic_lock(&mq->lock);
/* if list was empty, start timer for (eventual) wakeup */
if(mq->first == NULL)
@@ -930,7 +930,7 @@ static int dtio_write_more_of_data(struct dt_io_thread* dtio)
return 1;
}
-/** write more of the current messsage. false if incomplete, true if
+/** write more of the current message. false if incomplete, true if
* the message is done */
static int dtio_write_more(struct dt_io_thread* dtio)
{
@@ -1181,7 +1181,7 @@ static int dtio_read_accept_frame(struct dt_io_thread* dtio)
goto close_connection;
return 1;
} else {
- /* unknow content type */
+ /* unknown content type */
verbose(VERB_ALGO, "dnstap: ACCEPT frame "
"contains unknown content type, "
"closing connection");
diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c
index 3de8ab3f0899..990b8a866af1 100644
--- a/dnstap/unbound-dnstap-socket.c
+++ b/dnstap/unbound-dnstap-socket.c
@@ -1264,9 +1264,9 @@ int main(int argc, char** argv)
memset(&tls_list, 0, sizeof(tls_list));
/* lock debug start (if any) */
+ checklock_start();
log_ident_set("unbound-dnstap-socket");
log_init(0, 0, 0);
- checklock_start();
#ifdef SIGPIPE
if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
@@ -1415,8 +1415,9 @@ struct outbound_entry* worker_send_query(
int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
- size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
- char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
+ size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
+ int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
+ struct module_qstate* ATTR_UNUSED(q))
{
log_assert(0);
return 0;
@@ -1447,8 +1448,9 @@ struct outbound_entry* libworker_send_query(
int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
- size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
- char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
+ size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
+ int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
+ struct module_qstate* ATTR_UNUSED(q))
{
log_assert(0);
return 0;
diff --git a/doc/Changelog b/doc/Changelog
index 91abd0da0258..8aec7694f42d 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,3 +1,167 @@
+1 December 2021: Wouter
+ - configure is set to 1.14.0, and release branch.
+ - Fix doc/unbound.doxygen to remove obsolete tag warning.
+
+1 December 2021: George
+ - Merge PR #511 from yan12125: Reduce unnecessary linking.
+ - Merge PR #493 from Jaap: Fix generation of libunbound.pc.
+ - Merge PR #555 from fobser: Allow interface names as scope-id in IPv6
+ link-local addresses.
+ - Merge PR #562 from Willem: Reset keepalive per new tcp session.
+ - Merge PR #522 from sibeream: memory management violations fixed.
+ - Merge PR #530 from Shchelk: Fix: dereferencing a null pointer.
+ - Fix #454: listen_dnsport.c:825: error: ‘IPV6_TCLASS’ undeclared.
+ - Fix #574: Review fixes for size allocation.
+
+30 November 2021: Wouter
+ - Fix to remove git tracking and ci information from release tarballs.
+ - iana portlist update.
+
+29 November 2021: Wouter
+ - Merge PR #570 from rex4539: Fix typos.
+ - Fix for #570: regen aclocal.m4, fix configure.ac for spelling.
+ - Fix to make python module opt_list use opt_list_in.
+ - Fix #574: unbound-checkconf reports fatal error if interface names
+ are used as value for interfaces:
+ - Fix #574: Review fixes for it.
+ - Fix #576: [FR] UB_* error codes in unbound.h
+ - Fix #574: Review fix for spelling.
+
+15 November 2021: Tom
+ - Improve EDNS option handling, now also works for synthesised
+ responses such as local-data and server.id CH TXT responses.
+
+5 November 2021: George
+ - Fix for #558: fix loop in comm_point->tcp_free when a comm_point is
+ reclaimed more than once during callbacks.
+ - Fix for #558: clear the UB_EV_TIMEOUT bit before adding an event.
+
+5 November 2021: Wouter
+ - Fix that forward-zone name is documented as the full name of the
+ zone. It is not relative but a fully qualified domain name.
+ - Fix analyzer review failure in rpz action override code to not
+ crash on unlocking the local zone lock.
+ - Fix to remove unused code from rpz resolve client and action
+ function.
+ - Merge #565: unbound.service.in: Disable ProtectKernelTunables again.
+
+2 November 2021: Wouter
+ - Fix #552: Unbound assumes index.html exists on RPZ host.
+
+11 October 2021: Wouter
+ - Fix chaos replies to have truncation for short message lengths,
+ or long reply strings.
+ - Fix to protect custom regional create against small values.
+
+4 October 2021: Wouter
+ - Fix to add example.conf note for outbound-msg-retry.
+
+27 September 2021: Wouter
+ - Implement RFC8375: Special-Use Domain 'home.arpa.'.
+
+21 September 2021: Wouter
+ - For crosscompile on windows, detect 64bit stackprotector library.
+ - Fix crosscompile shell syntax.
+ - Fix crosscompile windows to use libssp when it exists.
+ - For the windows compile script disable gost.
+ - Fix that on windows, use BIO_set_callback_ex instead of deprecated
+ BIO_set_callback.
+ - Fix crosscompile script for the shared build flags.
+
+20 September 2021: Wouter
+ - Fix crosscompile on windows to work with openssl 3.0.0 the
+ link with ws2_32 needs -l:libssp.a for __strcpy_chk.
+ Also copy results from lib64 directory if needed.
+
+10 September 2021: Wouter
+ - Fix initialisation errors reported by gcc sanitizer.
+ - Fix lock debug code for gcc sanitizer reports.
+ - Fix more initialisation errors reported by gcc sanitizer.
+
+8 September 2021: Wouter
+ - Merged #41 from Moritz Schneider: made outbound-msg-retry
+ configurable.
+ - Small fixes for #41: changelog, conflicts resolved,
+ processQueryResponse takes an iterator env argument like other
+ functions in the iterator, no colon in string for set_option,
+ and some whitespace style, to make it similar to the rest.
+ - Fix for #41: change outbound retry to int to fix signed comparison
+ warnings.
+ - Fix root_anchor test to check with new icannbundle date.
+
+3 September 2021: Wouter
+ - Fix #538: Fix subnetcache statistics.
+
+1 September 2021: Wouter
+ - Fix tcp fastopen failure when disabled, try normal connect instead.
+
+27 August 2021: Wouter
+ - Fix #533: Negative responses get cached even when setting
+ cache-max-negative-ttl: 1
+
+25 August 2021: Wouter
+ - Merge #401: RPZ triggers. This add additional RPZ triggers,
+ unbound supports a full set of rpz triggers, and this now
+ includes nsdname, nsip and clientip triggers. Also actions
+ are fully supported, and this now includes the tcp-only action.
+ - Fix #536: error: RPZ: name of record (drop.spamhaus.org.rpz.local.)
+ to insert into RPZ.
+ - Fix the stream wait stream_wait_count_lock and http2 buffer locks
+ setup and desetup from race condition.
+ - Fix RPZ locks. Do not unlock zones lock if requested and rpz find
+ zone does not find the zone. Readlock the clientip that is found
+ for ipbased triggers. Unlock the nsdname zone lock when done.
+ Unlock zone and ip in rpz nsip and nsdname callback. Unlock
+ authzone and localzone if clientip found in rpz worker call.
+ - Fix compile warning in libunbound for listen desetup routine.
+ - Fix asynclook unit test for setup of lockchecks before log.
+
+20 August 2021: Wouter
+ - Fix #529: Fix: log_assert does nothing if UNBOUND_DEBUG is
+ undefined.
+ - Fix #531: Fix: passed to proc after free.
+
+17 August 2021: Wouter
+ - Fix that --with-ssl can use "/usr/include/openssl11" to pass the
+ location of a different openssl version.
+ - Fix #527: not sending quad9 cert to syslog (and may be more).
+ - Fix sed script in ssldir split handling.
+
+16 August 2021: George
+ - Merge PR #528 from fobser: Make sldns_str2wire_svcparam_buf()
+ static.
+
+16 August 2021: Wouter
+ - Fix to support harden-algo-downgrade for ZONEMD dnssec checks.
+
+13 August 2021: Wouter
+ - Support using system-wide crypto policies.
+ - Fix for #431: Squelch permission denied errors for udp connect,
+ and udp send, they are visible at higher verbosity settings.
+ - Fix zonemd verification of key that is not in DNS but in the zone
+ and needs a chain of trust.
+ - zonemd, fix order of bogus printout string manipulation.
+
+12 August 2021: George
+ - Merge PR #514, from ziollek: Docker environment for run tests.
+ - For #514: generate configure.
+
+12 August 2021: Wouter
+ - And 1.13.2rc1 became the 1.13.2 with the fix for the python module
+ build. The current code repository continues with version 1.13.3.
+ - Add test tool readzone to .gitignore.
+ - Merge #521: Update mini_event.c.
+ - Merge #523: fix: free() call more than once with the same pointer.
+ - Merge #519: Support for selective enabling tcp-upstream for
+ stub/forward zones.
+ - For #519: note stub-tcp-upstream and forward-tcp-upstream in
+ the example configuration file.
+ - For #519: yacc and lex. And fix python bindings, and test program
+ unbound-dnstap-socket.
+ - For #519: fix comments for doxygen.
+ - Fix to print error from unbound-anchor for writing to the key
+ file, also when not verbose.
+
5 August 2021: Wouter
- Tag for 1.13.2rc1 release.
- Fix #520: Unbound 1.13.2rc1 fails to build python module.
diff --git a/doc/README b/doc/README
index a051380e1d7b..ea18f4fe5c05 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.13.2
+README for Unbound 1.14.0rc1
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/README.tests b/doc/README.tests
index 5385e2b2221f..376f01717fdd 100644
--- a/doc/README.tests
+++ b/doc/README.tests
@@ -15,6 +15,14 @@ You need to have the following programs installed and in your PATH.
* xxd and nc (optional) - for (malformed) packet transmission.
The optional programs are detected and can be omitted.
+You can also use prepared Dockerfile to run tests inside docker based on latest gcc image:
+* build container: docker build -t unbound-tester -f contrib/Dockerfile.tests .
+* run container: docker run -it --mount type=bind,source="$(pwd)",target=/usr/src/unbound --rm unbound-tester
+* configure environment: ./configure
+* run test: make test
+* run long tests: make longtest
+It is worth to mention that you need to enable [ipv6 in your docker daemon configuration](https://docs.docker.com/config/daemon/ipv6/) because some tests need ipv6 network stack.
+
testdata/ contains the data for tests.
testcode/ contains scripts and c code for the tests.
diff --git a/doc/example.conf.in b/doc/example.conf.in
index a0c002d2c386..2dfd770fd4c5 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -1,7 +1,7 @@
#
# Example configuration file.
#
-# See unbound.conf(5) man page, version 1.13.2.
+# See unbound.conf(5) man page, version 1.14.0rc1.
#
# this is a comment.
@@ -164,6 +164,9 @@ server:
# perform connect for UDP sockets to mitigate ICMP side channel.
# udp-connect: yes
+ # The number of retries when a non-positive response is received.
+ # outbound-msg-retry: 5
+
# msec for waiting for an unknown server to reply. Increase if you
# are behind a slow satellite link, to eg. 1128.
# unknown-server-time-limit: 376
@@ -666,6 +669,7 @@ server:
# local-zone: "localhost." nodefault
# local-zone: "127.in-addr.arpa." nodefault
# local-zone: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." nodefault
+ # local-zone: "home.arpa." nodefault
# local-zone: "onion." nodefault
# local-zone: "test." nodefault
# local-zone: "invalid." nodefault
@@ -987,6 +991,7 @@ remote-control:
# stub-addr: 192.0.2.68
# stub-prime: no
# stub-first: no
+# stub-tcp-upstream: no
# stub-tls-upstream: no
# stub-no-cache: no
# stub-zone:
@@ -1004,6 +1009,7 @@ remote-control:
# forward-addr: 192.0.2.68
# forward-addr: 192.0.2.73@5355 # forward to port 5355.
# forward-first: no
+# forward-tcp-upstream: no
# forward-tls-upstream: no
# forward-no-cache: no
# forward-zone:
@@ -1150,10 +1156,11 @@ remote-control:
# dnstap-log-forwarder-response-messages: no
# Response Policy Zones
-# RPZ policies. Applied in order of configuration. QNAME and Response IP
-# Address trigger are the only supported triggers. Supported actions are:
-# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Policies can be loaded from
-# file, using zone transfer, or using HTTP. The respip module needs to be added
+# RPZ policies. Applied in order of configuration. QNAME, Response IP
+# Address, nsdname, nsip and clientip triggers are supported. Supported
+# actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp-only
+# and drop. Policies can be loaded from a file, or using zone
+# transfer, or using HTTP. The respip module needs to be added
# to the module-config, e.g.: module-config: "respip validator iterator".
# rpz:
# name: "rpz.example.com"
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index 73562cd6b41f..a35b41bf0525 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "libunbound" "3" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" libunbound.3 -- unbound library functions manual
.\"
@@ -44,7 +44,7 @@
.B ub_ctx_zone_remove,
.B ub_ctx_data_add,
.B ub_ctx_data_remove
-\- Unbound DNS validating resolver 1.13.2 functions.
+\- Unbound DNS validating resolver 1.14.0rc1 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index 25f7f1baf147..84d6f348c484 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound-anchor" "8" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index 3756201f830e..c84b1c8ab83a 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound-checkconf" "8" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index fb3510fa3cb5..d268b0b94b7e 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound-control" "8" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
@@ -684,8 +684,8 @@ specific cache, after getting processed by the edns client subnet module.
.TP
.I num.rpz.action.<rpz_action>
Number of queries answered using configured RPZ policy, per RPZ action type.
-Possible actions are: nxdomain, nodata, passthru, drop, local_data, disabled,
-and cname_override.
+Possible actions are: nxdomain, nodata, passthru, drop, tcp\-only, local\-data,
+disabled, and cname\-override.
.SH "FILES"
.TP
.I @ub_conf_file@
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index 4823b9afcaf5..85863835b505 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound\-host" "1" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index 82c4e98eb191..6f956b6a184d 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound" "8" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.13.2.
+\- Unbound DNS validating resolver 1.14.0rc1.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index e44560ec9eb6..baf024b70960 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "Aug 12, 2021" "NLnet Labs" "unbound 1.13.2"
+.TH "unbound.conf" "5" "Dec 2, 2021" "NLnet Labs" "unbound 1.14.0rc1"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -485,7 +485,9 @@ advertised timeout.
.TP
.B tcp\-upstream: \fI<yes or no>
Enable or disable whether the upstream queries use TCP only for transport.
-Default is no. Useful in tunneling scenarios.
+Default is no. Useful in tunneling scenarios. If set to no you can specify
+TCP transport only for selected forward or stub zones using forward-tcp-upstream
+or stub-tcp-upstream respectively.
.TP
.B udp\-upstream\-without\-downstream: \fI<yes or no>
Enable udp upstream even if do-udp is no. Default is no, and this does not
@@ -1410,13 +1412,13 @@ has no other effect than turning off default contents for the
given zone. Use \fInodefault\fR if you use exactly that zone, if you want to
use a subzone, use \fItransparent\fR.
.P
-The default zones are localhost, reverse 127.0.0.1 and ::1, the onion, test,
-invalid and the AS112 zones. The AS112 zones are reverse DNS zones for
-private use and reserved IP addresses for which the servers on the internet
-cannot provide correct answers. They are configured by default to give
-nxdomain (no reverse information) answers. The defaults can be turned off
-by specifying your own local\-zone of that name, or using the 'nodefault'
-type. Below is a list of the default zone contents.
+The default zones are localhost, reverse 127.0.0.1 and ::1, the home.arpa,
+the onion, test, invalid and the AS112 zones. The AS112 zones are reverse
+DNS zones for private use and reserved IP addresses for which the servers
+on the internet cannot provide correct answers. They are configured by
+default to give nxdomain (no reverse information) answers. The defaults
+can be turned off by specifying your own local\-zone of that name, or
+using the 'nodefault' type. Below is a list of the default zone contents.
.TP 10
\h'5'\fIlocalhost\fR
The IP4 and IP6 localhost information is given. NS and SOA records are provided
@@ -1457,6 +1459,15 @@ local\-data: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
PTR localhost."
.fi
.TP 10
+\h'5'\fIhome.arpa (RFC 8375)\fR
+Default content:
+.nf
+local\-zone: "home.arpa." static
+local\-data: "home.arpa. 10800 IN NS localhost."
+local\-data: "home.arpa. 10800 IN
+ SOA localhost. nobody.invalid. 1 3600 1200 604800 10800"
+.fi
+.TP 10
\h'5'\fIonion (RFC 7686)\fR
Default content:
.nf
@@ -1702,6 +1713,11 @@ This can make ordinary queries complete (if repeatedly queried for),
and enter the cache, whilst also mitigating the traffic flow by the
factor given.
.TP 5
+.B outbound\-msg\-retry: \fI<number>
+The number of retries unbound will do in case of a non positive response is
+received. If a forward nameserver is used, this is the number of retries per
+forward nameserver in case of throwaway response.
+.TP 5
.B fast\-server\-permil: \fI<number>
Specify how many times out of 1000 to pick from the set of fastest servers.
0 turns the feature off. A value of 900 would pick from the fastest
@@ -1822,7 +1838,7 @@ zone. The local zone nodefault (or \fItransparent\fR) clause makes the
(reverse\-) zone bypass unbound's filtering of RFC1918 zones.
.TP
.B name: \fI<domain name>
-Name of the stub zone.
+Name of the stub zone. This is the full domain name of the zone.
.TP
.B stub\-host: \fI<domain name>
Name of stub zone nameserver. Is itself resolved before it is used.
@@ -1853,6 +1869,10 @@ Default is no.
.B stub\-ssl\-upstream: \fI<yes or no>
Alternate syntax for \fBstub\-tls\-upstream\fR.
.TP
+.B stub\-tcp\-upstream: \fI<yes or no>
+If it is set to "yes" then upstream queries use TCP only for transport regardless of global flag tcp-upstream.
+Default is no.
+.TP
.B stub\-no\-cache: \fI<yes or no>
Default is no. If enabled, data inside the stub is not cached. This is
useful when you want immediate changes to be visible.
@@ -1875,7 +1895,7 @@ forward all queries to that other server (unless it can answer from
the cache).
.TP
.B name: \fI<domain name>
-Name of the forward zone.
+Name of the forward zone. This is the full domain name of the zone.
.TP
.B forward\-host: \fI<domain name>
Name of server to forward to. Is itself resolved before it is used.
@@ -1905,6 +1925,10 @@ load CA certs, otherwise the connections cannot be authenticated.
.B forward\-ssl\-upstream: \fI<yes or no>
Alternate syntax for \fBforward\-tls\-upstream\fR.
.TP
+.B forward\-tcp\-upstream: \fI<yes or no>
+If it is set to "yes" then upstream queries use TCP only for transport regardless of global flag tcp-upstream.
+Default is no.
+.TP
.B forward\-no\-cache: \fI<yes or no>
Default is no. If enabled, data inside the forward is not cached. This is
useful when you want immediate changes to be visible.
@@ -2391,7 +2415,7 @@ This option defaults to "default".
.P
The following
.B cachedb
-otions are specific to the redis backend.
+options are specific to the redis backend.
.TP
.B redis-server-host: \fI<server address or name>\fR
The IP (either v6 or v4) address or domain name of the Redis server.
@@ -2506,10 +2530,49 @@ with a different name. RPZ clauses are applied in order of configuration. The
\fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.:
\fBmodule-config: "respip validator iterator"\fR.
.P
-Only the QNAME and Response IP Address triggers are supported. The supported RPZ
-actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers
-are applied after
-\fBlocal-zones\fR and before \fBauth-zones\fR.
+QNAME, Response IP Address, nsdname, nsip and clientip triggers are supported.
+Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp\-only
+and drop. RPZ QNAME triggers are applied after \fBlocal\-zones\fR and
+before \fBauth\-zones\fR.
+.P
+The rpz zone is formatted with a SOA start record as usual. The items in
+the zone are entries, that specify what to act on (the trigger) and what to
+do (the action). The trigger to act on is recorded in the name, the action
+to do is recorded as the resource record. The names all end in the zone
+name, so you could type the trigger names without a trailing dot in the
+zonefile.
+.P
+An example RPZ record, that answers example.com with NXDOMAIN
+.nf
+ example.com CNAME .
+.fi
+.P
+The triggers are encoded in the name on the left
+.nf
+ name query name
+ netblock.rpz-client-ip client IP address
+ netblock.rpz-ip response IP address in the answer
+ name.rpz-nsdname nameserver name
+ netblock.rpz-nsip nameserver IP address
+.fi
+The netblock is written as <netblocklen>.<ip address in reverse>.
+For IPv6 use 'zz' for '::'. Specify individual addresses with scope length
+of 32 or 128. For example, 24.10.100.51.198.rpz-ip is 198.51.100.10/24 and
+32.10.zz.db8.2001.rpz-ip is 2001:db8:0:0:0:0:0:10/32.
+.P
+The actions are specified with the record on the right
+.nf
+ CNAME . nxdomain reply
+ CNAME *. nodata reply
+ CNAME rpz-passthru. do nothing, allow to continue
+ CNAME rpz-drop. the query is dropped
+ CNAME rpz-tcp-only. answer over TCP
+ A 192.0.2.1 answer with this IP address
+.fi
+Other records like AAAA, TXT and other CNAMEs (not rpz-..) can also be used to
+answer queries with that content.
+.P
+The RPZ zones can be configured in the config file with these settings in the \fBrpz:\fR block.
.TP
.B name: \fI<zone name>
Name of the authority zone.
diff --git a/doc/unbound.doxygen b/doc/unbound.doxygen
index 823e092536e4..7222dbc274e9 100644
--- a/doc/unbound.doxygen
+++ b/doc/unbound.doxygen
@@ -279,10 +279,10 @@ TYPEDEF_HIDES_STRUCT = NO
# For small to medium size projects (<1000 input files) the default value is
# probably good enough. For larger projects a too small cache size can cause
# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penality.
+# causing a significant performance penalty.
# If the system has enough physical memory increasing the cache will improve the
# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will rougly double the
+# a logarithmic scale so increasing the size by one will roughly double the
# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
# corresponding to a cache size of 2^16 = 65536 symbols
@@ -779,7 +779,7 @@ ALPHABETICAL_INDEX = YES
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
# in which this list will be split (can be a number in the range [1..20])
-COLS_IN_ALPHA_INDEX = 5
+#COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all
# classes will be put under the same header in the alphabetical index.
diff --git a/edns-subnet/edns-subnet.h b/edns-subnet/edns-subnet.h
index 4b306080ad6d..6ab541de9487 100644
--- a/edns-subnet/edns-subnet.h
+++ b/edns-subnet/edns-subnet.h
@@ -59,7 +59,7 @@ struct ecs_data {
/**
* copy the first n BITS from src to dst iff both src and dst
- * are large enough, return 0 on succes
+ * are large enough, return 0 on success
*/
int
copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n);
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index ade40c66e85f..81f0bf3ade55 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -497,7 +497,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq)
if (!s_in->subnet_validdata) {
/* The authority indicated no support for edns subnet. As a
* consequence the answer ended up in the regular cache. It
- * is still usefull to put it in the edns subnet cache for
+ * is still useful to put it in the edns subnet cache for
* when a client explicitly asks for subnet specific answer. */
verbose(VERB_QUERY, "subnetcache: Authority indicates no support");
if(!sq->started_no_cache_store) {
diff --git a/ipsecmod/ipsecmod.c b/ipsecmod/ipsecmod.c
index e42af6f497ea..577f7112e194 100644
--- a/ipsecmod/ipsecmod.c
+++ b/ipsecmod/ipsecmod.c
@@ -37,7 +37,7 @@
* \file
*
* This file contains a module that facilitates opportunistic IPsec. It does so
- * by also quering for the IPSECKEY for A/AAAA queries and calling a
+ * by also querying for the IPSECKEY for A/AAAA queries and calling a
* configurable hook (eg. signaling an IKE daemon) before replying.
*/
diff --git a/ipsecmod/ipsecmod.h b/ipsecmod/ipsecmod.h
index e00816d4bf99..272f473c2eac 100644
--- a/ipsecmod/ipsecmod.h
+++ b/ipsecmod/ipsecmod.h
@@ -37,7 +37,7 @@
* \file
*
* This file contains a module that facilitates opportunistic IPsec. It does so
- * by also quering for the IPSECKEY for A/AAAA queries and calling a
+ * by also querying for the IPSECKEY for A/AAAA queries and calling a
* configurable hook (eg. signaling an IKE daemon) before replying.
*/
diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c
index 9a672b0af39d..bdac42b0ddb3 100644
--- a/iterator/iter_delegpt.c
+++ b/iterator/iter_delegpt.c
@@ -73,6 +73,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region)
copy->bogus = dp->bogus;
copy->has_parent_side_NS = dp->has_parent_side_NS;
copy->ssl_upstream = dp->ssl_upstream;
+ copy->tcp_upstream = dp->tcp_upstream;
for(ns = dp->nslist; ns; ns = ns->next) {
if(!delegpt_add_ns(copy, region, ns->name, ns->lame))
return NULL;
diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h
index 138eb6e1b60a..9c8cfb281bae 100644
--- a/iterator/iter_delegpt.h
+++ b/iterator/iter_delegpt.h
@@ -83,6 +83,8 @@ struct delegpt {
uint8_t dp_type_mlc;
/** use SSL for upstream query */
uint8_t ssl_upstream;
+ /** use TCP for upstream query */
+ uint8_t tcp_upstream;
/** delegpt from authoritative zone that is locally hosted */
uint8_t auth_dp;
/*** no cache */
diff --git a/iterator/iter_fwd.c b/iterator/iter_fwd.c
index ea3d70e07320..128007a0412c 100644
--- a/iterator/iter_fwd.c
+++ b/iterator/iter_fwd.c
@@ -276,6 +276,8 @@ read_forwards(struct iter_forwards* fwd, struct config_file* cfg)
dp->no_cache = s->no_cache;
/* use SSL for queries to this forwarder */
dp->ssl_upstream = (uint8_t)s->ssl_upstream;
+ /* use TCP for queries to this forwarder */
+ dp->tcp_upstream = (uint8_t)s->tcp_upstream;
verbose(VERB_QUERY, "Forward zone server list:");
delegpt_log(VERB_QUERY, dp);
if(!forwards_insert(fwd, LDNS_RR_CLASS_IN, dp))
diff --git a/iterator/iter_hints.c b/iterator/iter_hints.c
index 60e518122ed1..5819cfb1703d 100644
--- a/iterator/iter_hints.c
+++ b/iterator/iter_hints.c
@@ -287,6 +287,8 @@ read_stubs(struct iter_hints* hints, struct config_file* cfg)
dp->no_cache = s->no_cache;
/* ssl_upstream */
dp->ssl_upstream = (uint8_t)s->ssl_upstream;
+ /* tcp_upstream */
+ dp->tcp_upstream = (uint8_t)s->tcp_upstream;
delegpt_log(VERB_QUERY, dp);
if(!hints_insert(hints, LDNS_RR_CLASS_IN, dp, !s->isprime))
return 0;
@@ -395,10 +397,10 @@ read_root_hints(struct iter_hints* hints, char* fname)
delegpt_free_mlc(dp);
return 1;
}
+ delegpt_log(VERB_QUERY, dp);
if(!hints_insert(hints, c, dp, 0)) {
return 0;
}
- delegpt_log(VERB_QUERY, dp);
return 1;
stop_read:
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index 668f898eb0ff..2482a1f40f03 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -4,22 +4,22 @@
* Copyright (c) 2007, NLnet Labs. All rights reserved.
*
* This software is open source.
- *
+ *
* 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 NLNET LABS 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
@@ -37,7 +37,7 @@
* \file
*
* This file contains functions to assist the iterator module.
- * Configuration options. Forward zones.
+ * Configuration options. Forward zones.
*/
#include "config.h"
#include "iterator/iter_utils.h"
@@ -141,7 +141,7 @@ caps_white_apply_cfg(rbtree_type* ntree, struct config_file* cfg)
return 1;
}
-int
+int
iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
{
int i;
@@ -151,7 +151,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
for(i=0; i<iter_env->max_dependency_depth+1; i++)
verbose(VERB_QUERY, "target fetch policy for level %d is %d",
i, iter_env->target_fetch_policy[i]);
-
+
if(!iter_env->donotq)
iter_env->donotq = donotq_create();
if(!iter_env->donotq || !donotq_apply_cfg(iter_env->donotq, cfg)) {
@@ -176,6 +176,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
}
iter_env->supports_ipv6 = cfg->do_ip6;
iter_env->supports_ipv4 = cfg->do_ip4;
+ iter_env->outbound_msg_retry = cfg->outbound_msg_retry;
return 1;
}
@@ -212,7 +213,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
* dnsseclame servers get penalty
* USEFUL_SERVER_TOP_TIMEOUT*3 ..
* recursion lame servers get penalty
- * UNKNOWN_SERVER_NICENESS
+ * UNKNOWN_SERVER_NICENESS
* If no information is known about the server, this is
* returned. 376 msec or so.
* +BLACKLIST_PENALTY (of USEFUL_TOP_TIMEOUT*4) for dnssec failed IPs.
@@ -221,11 +222,11 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
* is turned off (so we do not discard the reply).
* When a final value is chosen that is recursionlame; RD bit is set on query.
* Because of the numbers this means recursionlame also have dnssec lameness
- * checking turned off.
+ * checking turned off.
*/
static int
iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
- uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
+ uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
struct delegpt_addr* a)
{
int rtt, lame, reclame, dnsseclame;
@@ -243,8 +244,8 @@ iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
return -1; /* there is no ip4 available */
}
/* check lameness - need zone , class info */
- if(infra_get_lame_rtt(env->infra_cache, &a->addr, a->addrlen,
- name, namelen, qtype, &lame, &dnsseclame, &reclame,
+ if(infra_get_lame_rtt(env->infra_cache, &a->addr, a->addrlen,
+ name, namelen, qtype, &lame, &dnsseclame, &reclame,
&rtt, now)) {
log_addr(VERB_ALGO, "servselect", &a->addr, a->addrlen);
verbose(VERB_ALGO, " rtt=%d%s%s%s%s", rtt,
@@ -282,7 +283,7 @@ iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
/** lookup RTT information, and also store fastest rtt (if any) */
static int
iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
- uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
+ uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
struct delegpt* dp, int* best_rtt, struct sock_list* blacklist,
size_t* num_suitable_results)
{
@@ -293,7 +294,7 @@ iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
if(dp->bogus)
return 0; /* NS bogus, all bogus, nothing found */
for(a=dp->result_list; a; a = a->next_result) {
- a->sel_rtt = iter_filter_unsuitable(iter_env, env,
+ a->sel_rtt = iter_filter_unsuitable(iter_env, env,
name, namelen, qtype, now, a);
if(a->sel_rtt != -1) {
if(sock_list_find(blacklist, &a->addr, a->addrlen))
@@ -329,7 +330,7 @@ nth_rtt(struct delegpt_addr* result_list, size_t num_results, size_t n)
int rtt_band;
size_t i;
int* rtt_list, *rtt_index;
-
+
if(num_results < 1 || n >= num_results) {
return -1;
}
@@ -361,8 +362,8 @@ nth_rtt(struct delegpt_addr* result_list, size_t num_results, size_t n)
* returns number of best targets (or 0, no suitable targets) */
static int
iter_filter_order(struct iter_env* iter_env, struct module_env* env,
- uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
- struct delegpt* dp, int* selected_rtt, int open_target,
+ uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
+ struct delegpt* dp, int* selected_rtt, int open_target,
struct sock_list* blacklist, time_t prefetch)
{
int got_num = 0, low_rtt = 0, swap_to_front, rtt_band = RTT_BAND, nth;
@@ -370,9 +371,9 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
struct delegpt_addr* a, *n, *prev=NULL;
/* fillup sel_rtt and find best rtt in the bunch */
- got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp,
+ got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp,
&low_rtt, blacklist, &num_results);
- if(got_num == 0)
+ if(got_num == 0)
return 0;
if(low_rtt >= USEFUL_SERVER_TOP_TIMEOUT &&
(delegpt_count_missing_targets(dp) > 0 || open_target > 0)) {
@@ -548,9 +549,9 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
return got_num;
}
-struct delegpt_addr*
-iter_server_selection(struct iter_env* iter_env,
- struct module_env* env, struct delegpt* dp,
+struct delegpt_addr*
+iter_server_selection(struct iter_env* iter_env,
+ struct module_env* env, struct delegpt* dp,
uint8_t* name, size_t namelen, uint16_t qtype, int* dnssec_lame,
int* chase_to_rd, int open_target, struct sock_list* blacklist,
time_t prefetch)
@@ -592,7 +593,7 @@ iter_server_selection(struct iter_env* iter_env,
if(num == 1) {
a = dp->result_list;
- if(++a->attempts < OUTBOUND_MSG_RETRY)
+ if(++a->attempts < iter_env->outbound_msg_retry)
return a;
dp->result_list = a->next_result;
return a;
@@ -602,7 +603,7 @@ iter_server_selection(struct iter_env* iter_env,
log_assert(num > 1);
/* grab secure random number, to pick unexpected server.
* also we need it to be threadsafe. */
- sel = ub_random_max(env->rnd, num);
+ sel = ub_random_max(env->rnd, num);
a = dp->result_list;
prev = NULL;
while(sel > 0 && a) {
@@ -612,7 +613,7 @@ iter_server_selection(struct iter_env* iter_env,
}
if(!a) /* robustness */
return NULL;
- if(++a->attempts < OUTBOUND_MSG_RETRY)
+ if(++a->attempts < iter_env->outbound_msg_retry)
return a;
/* remove it from the delegation point result list */
if(prev)
@@ -621,8 +622,8 @@ iter_server_selection(struct iter_env* iter_env,
return a;
}
-struct dns_msg*
-dns_alloc_msg(sldns_buffer* pkt, struct msg_parse* msg,
+struct dns_msg*
+dns_alloc_msg(sldns_buffer* pkt, struct msg_parse* msg,
struct regional* region)
{
struct dns_msg* m = (struct dns_msg*)regional_alloc(region,
@@ -637,7 +638,7 @@ dns_alloc_msg(sldns_buffer* pkt, struct msg_parse* msg,
return m;
}
-struct dns_msg*
+struct dns_msg*
dns_copy_msg(struct dns_msg* from, struct regional* region)
{
struct dns_msg* m = (struct dns_msg*)regional_alloc(region,
@@ -653,7 +654,7 @@ dns_copy_msg(struct dns_msg* from, struct regional* region)
return m;
}
-void
+void
iter_dns_store(struct module_env* env, struct query_info* msgqinf,
struct reply_info* msgrep, int is_referral, time_t leeway, int pside,
struct regional* region, uint16_t flags)
@@ -663,7 +664,7 @@ iter_dns_store(struct module_env* env, struct query_info* msgqinf,
log_err("out of memory: cannot store data in cache");
}
-int
+int
iter_ns_probability(struct ub_randstate* rnd, int n, int m)
{
int sel;
@@ -671,7 +672,7 @@ iter_ns_probability(struct ub_randstate* rnd, int n, int m)
return 1;
/* we do not need secure random numbers here, but
* we do need it to be threadsafe, so we use this */
- sel = ub_random_max(rnd, m);
+ sel = ub_random_max(rnd, m);
return (sel < n);
}
@@ -688,12 +689,12 @@ causes_cycle(struct module_qstate* qstate, uint8_t* name, size_t namelen,
qinf.local_alias = NULL;
fptr_ok(fptr_whitelist_modenv_detect_cycle(
qstate->env->detect_cycle));
- return (*qstate->env->detect_cycle)(qstate, &qinf,
+ return (*qstate->env->detect_cycle)(qstate, &qinf,
(uint16_t)(BIT_RD|BIT_CD), qstate->is_priming,
qstate->is_valrec);
}
-void
+void
iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
{
struct delegpt_ns* ns;
@@ -701,21 +702,21 @@ iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
if(ns->resolved)
continue;
/* see if this ns as target causes dependency cycle */
- if(causes_cycle(qstate, ns->name, ns->namelen,
+ if(causes_cycle(qstate, ns->name, ns->namelen,
LDNS_RR_TYPE_AAAA, qstate->qinfo.qclass) ||
- causes_cycle(qstate, ns->name, ns->namelen,
+ causes_cycle(qstate, ns->name, ns->namelen,
LDNS_RR_TYPE_A, qstate->qinfo.qclass)) {
log_nametypeclass(VERB_QUERY, "skipping target due "
"to dependency cycle (harden-glue: no may "
- "fix some of the cycles)",
- ns->name, LDNS_RR_TYPE_A,
+ "fix some of the cycles)",
+ ns->name, LDNS_RR_TYPE_A,
qstate->qinfo.qclass);
ns->resolved = 1;
}
}
}
-void
+void
iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
{
struct delegpt_ns* ns;
@@ -723,14 +724,14 @@ iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
if(ns->done_pside4 && ns->done_pside6)
continue;
/* see if this ns as target causes dependency cycle */
- if(causes_cycle(qstate, ns->name, ns->namelen,
+ if(causes_cycle(qstate, ns->name, ns->namelen,
LDNS_RR_TYPE_A, qstate->qinfo.qclass)) {
log_nametypeclass(VERB_QUERY, "skipping target due "
"to dependency cycle", ns->name,
LDNS_RR_TYPE_A, qstate->qinfo.qclass);
ns->done_pside4 = 1;
}
- if(causes_cycle(qstate, ns->name, ns->namelen,
+ if(causes_cycle(qstate, ns->name, ns->namelen,
LDNS_RR_TYPE_AAAA, qstate->qinfo.qclass)) {
log_nametypeclass(VERB_QUERY, "skipping target due "
"to dependency cycle", ns->name,
@@ -740,8 +741,8 @@ iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
}
}
-int
-iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
+int
+iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
struct delegpt* dp)
{
struct delegpt_ns* ns;
@@ -760,14 +761,14 @@ iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
/* either available or unused targets */
if(dp->usable_list || dp->result_list)
return 0;
-
+
/* see if query is for one of the nameservers, which is glue */
if( (qinfo->qtype == LDNS_RR_TYPE_A ||
qinfo->qtype == LDNS_RR_TYPE_AAAA) &&
dname_subdomain_c(qinfo->qname, dp->name) &&
delegpt_find_ns(dp, qinfo->qname, qinfo->qname_len))
return 1;
-
+
for(ns = dp->nslist; ns; ns = ns->next) {
if(ns->resolved) /* skip failed targets */
continue;
@@ -785,7 +786,7 @@ iter_qname_indicates_dnssec(struct module_env* env, struct query_info *qinfo)
return 0;
/* a trust anchor exists above the name? */
if((a=anchors_lookup(env->anchors, qinfo->qname, qinfo->qname_len,
- qinfo->qclass))) {
+ qinfo->qclass))) {
if(a->numDS == 0 && a->numDNSKEY == 0) {
/* insecure trust point */
lock_basic_unlock(&a->lock);
@@ -798,7 +799,7 @@ iter_qname_indicates_dnssec(struct module_env* env, struct query_info *qinfo)
return 0;
}
-int
+int
iter_indicates_dnssec(struct module_env* env, struct delegpt* dp,
struct dns_msg* msg, uint16_t dclass)
{
@@ -842,7 +843,7 @@ iter_indicates_dnssec(struct module_env* env, struct delegpt* dp,
return 0;
}
-int
+int
iter_msg_has_dnssec(struct dns_msg* msg)
{
size_t i;
@@ -875,7 +876,7 @@ int iter_msg_from_zone(struct dns_msg* msg, struct delegpt* dp,
* and referral to example.com. NS ... , then origin zone
* is .com. For a referral to sub.example.com. NS ... then
* we do not know, since example.com. may be in between. */
- for(i=0; i<msg->rep->an_numrrsets+msg->rep->ns_numrrsets;
+ for(i=0; i<msg->rep->an_numrrsets+msg->rep->ns_numrrsets;
i++) {
struct ub_packed_rrset_key* s = msg->rep->rrsets[i];
if(ntohs(s->rk.type) == LDNS_RR_TYPE_NS &&
@@ -890,7 +891,7 @@ int iter_msg_from_zone(struct dns_msg* msg, struct delegpt* dp,
return 0;
}
log_assert(type==RESPONSE_TYPE_ANSWER || type==RESPONSE_TYPE_CNAME);
- /* not a referral, and not lame delegation (upwards), so,
+ /* not a referral, and not lame delegation (upwards), so,
* any NS rrset must be from the zone itself */
if(reply_find_rrset_section_an(msg->rep, dp->name, dp->namelen,
LDNS_RR_TYPE_NS, dclass) ||
@@ -906,7 +907,7 @@ int iter_msg_from_zone(struct dns_msg* msg, struct delegpt* dp,
}
/**
- * check equality of two rrsets
+ * check equality of two rrsets
* @param k1: rrset
* @param k2: rrset
* @return true if equal
@@ -935,7 +936,7 @@ rrset_equal(struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2)
for(i=0; i<t; i++) {
if(d1->rr_len[i] != d2->rr_len[i] ||
/* no ttl check: d1->rr_ttl[i] != d2->rr_ttl[i] ||*/
- memcmp(d1->rr_data[i], d2->rr_data[i],
+ memcmp(d1->rr_data[i], d2->rr_data[i],
d1->rr_len[i]) != 0)
return 0;
}
@@ -966,7 +967,7 @@ rrset_canonical_sort_cmp(const void* x, const void* y)
return 0;
}
-int
+int
reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region)
{
size_t i;
@@ -1024,7 +1025,7 @@ reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region)
return 1;
}
-void
+void
caps_strip_reply(struct reply_info* rep)
{
size_t i;
@@ -1066,8 +1067,8 @@ int caps_failed_rcode(struct reply_info* rep)
FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN);
}
-void
-iter_store_parentside_rrset(struct module_env* env,
+void
+iter_store_parentside_rrset(struct module_env* env,
struct ub_packed_rrset_key* rrset)
{
struct rrset_ref ref;
@@ -1107,12 +1108,12 @@ iter_store_parentside_NS(struct module_env* env, struct reply_info* rep)
}
}
-void iter_store_parentside_neg(struct module_env* env,
+void iter_store_parentside_neg(struct module_env* env,
struct query_info* qinfo, struct reply_info* rep)
{
/* TTL: NS from referral in iq->deleg_msg,
* or first RR from iq->response,
- * or servfail5secs if !iq->response */
+ * or servfail5secs if !iq->response */
time_t ttl = NORR_TTL;
struct ub_packed_rrset_key* neg;
struct packed_rrset_data* newd;
@@ -1133,7 +1134,7 @@ void iter_store_parentside_neg(struct module_env* env,
neg->rk.type = htons(qinfo->qtype);
neg->rk.rrset_class = htons(qinfo->qclass);
neg->rk.flags = 0;
- neg->rk.dname = regional_alloc_init(env->scratch, qinfo->qname,
+ neg->rk.dname = regional_alloc_init(env->scratch, qinfo->qname,
qinfo->qname_len);
if(!neg->rk.dname) {
log_err("out of memory in store_parentside_neg");
@@ -1141,7 +1142,7 @@ void iter_store_parentside_neg(struct module_env* env,
}
neg->rk.dname_len = qinfo->qname_len;
neg->entry.hash = rrset_key_hash(&neg->rk);
- newd = (struct packed_rrset_data*)regional_alloc_zero(env->scratch,
+ newd = (struct packed_rrset_data*)regional_alloc_zero(env->scratch,
sizeof(struct packed_rrset_data) + sizeof(size_t) +
sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t));
if(!newd) {
@@ -1166,13 +1167,13 @@ void iter_store_parentside_neg(struct module_env* env,
iter_store_parentside_rrset(env, neg);
}
-int
+int
iter_lookup_parent_NS_from_cache(struct module_env* env, struct delegpt* dp,
struct regional* region, struct query_info* qinfo)
{
struct ub_packed_rrset_key* akey;
- akey = rrset_cache_lookup(env->rrset_cache, dp->name,
- dp->namelen, LDNS_RR_TYPE_NS, qinfo->qclass,
+ akey = rrset_cache_lookup(env->rrset_cache, dp->name,
+ dp->namelen, LDNS_RR_TYPE_NS, qinfo->qclass,
PACKED_RRSET_PARENT_SIDE, *env->now, 0);
if(akey) {
log_rrset_key(VERB_ALGO, "found parent-side NS in cache", akey);
@@ -1195,8 +1196,8 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env,
size_t num = delegpt_count_targets(dp);
for(ns = dp->nslist; ns; ns = ns->next) {
/* get cached parentside A */
- akey = rrset_cache_lookup(env->rrset_cache, ns->name,
- ns->namelen, LDNS_RR_TYPE_A, qinfo->qclass,
+ akey = rrset_cache_lookup(env->rrset_cache, ns->name,
+ ns->namelen, LDNS_RR_TYPE_A, qinfo->qclass,
PACKED_RRSET_PARENT_SIDE, *env->now, 0);
if(akey) {
log_rrset_key(VERB_ALGO, "found parent-side", akey);
@@ -1207,8 +1208,8 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env,
lock_rw_unlock(&akey->entry.lock);
}
/* get cached parentside AAAA */
- akey = rrset_cache_lookup(env->rrset_cache, ns->name,
- ns->namelen, LDNS_RR_TYPE_AAAA, qinfo->qclass,
+ akey = rrset_cache_lookup(env->rrset_cache, ns->name,
+ ns->namelen, LDNS_RR_TYPE_AAAA, qinfo->qclass,
PACKED_RRSET_PARENT_SIDE, *env->now, 0);
if(akey) {
log_rrset_key(VERB_ALGO, "found parent-side", akey);
@@ -1223,8 +1224,8 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env,
return delegpt_count_targets(dp) != num;
}
-int
-iter_get_next_root(struct iter_hints* hints, struct iter_forwards* fwd,
+int
+iter_get_next_root(struct iter_hints* hints, struct iter_forwards* fwd,
uint16_t* c)
{
uint16_t c1 = *c, c2 = *c;
@@ -1246,7 +1247,7 @@ void
iter_scrub_ds(struct dns_msg* msg, struct ub_packed_rrset_key* ns, uint8_t* z)
{
/* Only the DS record for the delegation itself is expected.
- * We allow DS for everything between the bailiwick and the
+ * We allow DS for everything between the bailiwick and the
* zonecut, thus DS records must be at or above the zonecut.
* And the DS records must be below the server authority zone.
* The answer section is already scrubbed. */
@@ -1260,7 +1261,7 @@ iter_scrub_ds(struct dns_msg* msg, struct ub_packed_rrset_key* ns, uint8_t* z)
s->rk.dname, ntohs(s->rk.type),
ntohs(s->rk.rrset_class));
memmove(msg->rep->rrsets+i, msg->rep->rrsets+i+1,
- sizeof(struct ub_packed_rrset_key*) *
+ sizeof(struct ub_packed_rrset_key*) *
(msg->rep->rrset_count-i-1));
msg->rep->ns_numrrsets--;
msg->rep->rrset_count--;
@@ -1284,11 +1285,11 @@ iter_scrub_nxdomain(struct dns_msg* msg)
msg->rep->an_numrrsets = 0;
}
-void iter_dec_attempts(struct delegpt* dp, int d)
+void iter_dec_attempts(struct delegpt* dp, int d, int outbound_msg_retry)
{
struct delegpt_addr* a;
for(a=dp->target_list; a; a = a->next_target) {
- if(a->attempts >= OUTBOUND_MSG_RETRY) {
+ if(a->attempts >= outbound_msg_retry) {
/* add back to result list */
a->next_result = dp->result_list;
dp->result_list = a;
@@ -1299,7 +1300,8 @@ void iter_dec_attempts(struct delegpt* dp, int d)
}
}
-void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old)
+void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old,
+ int outbound_msg_retry)
{
struct delegpt_addr* a, *o, *prev;
for(a=dp->target_list; a; a = a->next_target) {
@@ -1313,7 +1315,7 @@ void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old)
prev = NULL;
a = dp->usable_list;
while(a) {
- if(a->attempts >= OUTBOUND_MSG_RETRY) {
+ if(a->attempts >= outbound_msg_retry) {
log_addr(VERB_ALGO, "remove from usable list dp",
&a->addr, a->addrlen);
/* remove from result list */
diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h
index 509d2921e306..0a40916c0e02 100644
--- a/iterator/iter_utils.h
+++ b/iterator/iter_utils.h
@@ -347,16 +347,19 @@ void iter_scrub_nxdomain(struct dns_msg* msg);
* Remove query attempts from all available ips. For 0x20.
* @param dp: delegpt.
* @param d: decrease.
+ * @param outbound_msg_retry: number of retries of outgoing queries
*/
-void iter_dec_attempts(struct delegpt* dp, int d);
+void iter_dec_attempts(struct delegpt* dp, int d, int outbound_msg_retry);
/**
* Add retry counts from older delegpt to newer delegpt.
* Does not waste time on timeout'd (or other failing) addresses.
* @param dp: new delegationpoint.
* @param old: old delegationpoint.
+ * @param outbound_msg_retry: number of retries of outgoing queries
*/
-void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old);
+void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old,
+ int outbound_msg_retry);
/**
* See if a DS response (type ANSWER) is too low: a nodata answer with
diff --git a/iterator/iterator.c b/iterator/iterator.c
index f0105ad4b085..48238a231b13 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -2298,7 +2298,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
iq->minimise_count++;
iq->timeout_count = 0;
- iter_dec_attempts(iq->dp, 1);
+ iter_dec_attempts(iq->dp, 1, ie->outbound_msg_retry);
/* Limit number of iterations for QNAMEs with more
* than MAX_MINIMISE_COUNT labels. Send first MINIMISE_ONE_LAB
@@ -2500,7 +2500,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
(int)iq->caps_server+1, (int)naddr*3);
iq->response = iq->caps_response;
iq->caps_fallback = 0;
- iter_dec_attempts(iq->dp, 3); /* space for fallback */
+ iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry); /* space for fallback */
iq->num_current_queries++; /* RespState decrements it*/
iq->referral_count++; /* make sure we don't loop */
iq->sent_count = 0;
@@ -2529,6 +2529,23 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
/* Add the current set of unused targets to our queue. */
delegpt_add_unused_targets(iq->dp);
+ if(qstate->env->auth_zones) {
+ /* apply rpz triggers at query time */
+ struct dns_msg* forged_response = rpz_callback_from_iterator_module(qstate, iq);
+ if(forged_response != NULL) {
+ qstate->ext_state[id] = module_finished;
+ qstate->return_rcode = FLAGS_GET_RCODE(forged_response->rep->flags);
+ qstate->return_msg = forged_response;
+ iq->response = forged_response;
+ next_state(iq, FINISHED_STATE);
+ if(!iter_prepend(iq, qstate->return_msg, qstate->region)) {
+ log_err("rpz, prepend rrsets: out of memory");
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
+ return 0;
+ }
+ }
+
/* Select the next usable target, filtering out unsuitable targets. */
target = iter_server_selection(ie, qstate->env, iq->dp,
iq->dp->name, iq->dp->namelen, iq->qchase.qtype,
@@ -2588,7 +2605,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
(int)iq->caps_server+1);
iq->response = iq->caps_response;
iq->caps_fallback = 0;
- iter_dec_attempts(iq->dp, 3); /* space for fallback */
+ iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry); /* space for fallback */
iq->num_current_queries++; /* RespState decrements it*/
iq->referral_count++; /* make sure we don't loop */
iq->sent_count = 0;
@@ -2666,6 +2683,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted(
ie, iq), &target->addr, target->addrlen,
iq->dp->name, iq->dp->namelen,
+ (iq->dp->tcp_upstream || qstate->env->cfg->tcp_upstream),
(iq->dp->ssl_upstream || qstate->env->cfg->ssl_upstream),
target->tls_auth_name, qstate);
if(!outq) {
@@ -2707,6 +2725,7 @@ find_NS(struct reply_info* rep, size_t from, size_t to)
*
* @param qstate: query state.
* @param iq: iterator query state.
+ * @param ie: iterator shared global environment.
* @param id: module id.
* @return true if the event requires more immediate processing, false if
* not. This is generally only true when forwarding the request to
@@ -2714,10 +2733,11 @@ find_NS(struct reply_info* rep, size_t from, size_t to)
*/
static int
processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
- int id)
+ struct iter_env* ie, int id)
{
int dnsseclame = 0;
enum response_type type;
+
iq->num_current_queries--;
if(!inplace_cb_query_response_call(qstate->env, qstate, iq->response))
@@ -2983,7 +3003,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
}
if(iq->store_parent_NS && query_dname_compare(iq->dp->name,
iq->store_parent_NS->name) == 0)
- iter_merge_retry_counts(iq->dp, iq->store_parent_NS);
+ iter_merge_retry_counts(iq->dp, iq->store_parent_NS,
+ ie->outbound_msg_retry);
delegpt_log(VERB_ALGO, iq->dp);
/* Count this as a referral. */
iq->referral_count++;
@@ -3061,6 +3082,39 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
/* set the current request's qname to the new value. */
iq->qchase.qname = sname;
iq->qchase.qname_len = snamelen;
+ if(qstate->env->auth_zones) {
+ /* apply rpz qname triggers after cname */
+ struct dns_msg* forged_response =
+ rpz_callback_from_iterator_cname(qstate, iq);
+ while(forged_response && reply_find_rrset_section_an(
+ forged_response->rep, iq->qchase.qname,
+ iq->qchase.qname_len, LDNS_RR_TYPE_CNAME,
+ iq->qchase.qclass)) {
+ /* another cname to follow */
+ if(!handle_cname_response(qstate, iq, forged_response,
+ &sname, &snamelen)) {
+ errinf(qstate, "malloc failure, CNAME info");
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
+ iq->qchase.qname = sname;
+ iq->qchase.qname_len = snamelen;
+ forged_response =
+ rpz_callback_from_iterator_cname(qstate, iq);
+ }
+ if(forged_response != NULL) {
+ qstate->ext_state[id] = module_finished;
+ qstate->return_rcode = FLAGS_GET_RCODE(forged_response->rep->flags);
+ qstate->return_msg = forged_response;
+ iq->response = forged_response;
+ next_state(iq, FINISHED_STATE);
+ if(!iter_prepend(iq, qstate->return_msg, qstate->region)) {
+ log_err("rpz after cname, prepend rrsets: out of memory");
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
+ qstate->return_msg->qinfo = qstate->qinfo;
+ return 0;
+ }
+ }
/* Clear the query state, since this is a query restart. */
iq->deleg_msg = NULL;
iq->dp = NULL;
@@ -3188,7 +3242,7 @@ prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq)
/* Convert our response to a delegation point */
dp = delegpt_from_message(qstate->return_msg, forq->region);
if(!dp) {
- /* if there is no convertable delegation point, then
+ /* if there is no convertible delegation point, then
* the ANSWER type was (presumably) a negative answer. */
verbose(VERB_ALGO, "prime response was not a positive "
"ANSWER; failing");
@@ -3694,7 +3748,7 @@ iter_handle(struct module_qstate* qstate, struct iter_qstate* iq,
cont = processQueryTargets(qstate, iq, ie, id);
break;
case QUERY_RESP_STATE:
- cont = processQueryResponse(qstate, iq, id);
+ cont = processQueryResponse(qstate, iq, ie, id);
break;
case PRIME_RESP_STATE:
cont = processPrimeResponse(qstate, id);
@@ -3764,7 +3818,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
iq->num_current_queries--;
/* need fresh attempts for the 0x20 fallback, if
* that was the cause for the failure */
- iter_dec_attempts(iq->dp, 3);
+ iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry);
verbose(VERB_DETAIL, "Capsforid: timeouts, starting fallback");
goto handle_it;
}
@@ -3798,15 +3852,15 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
goto handle_it;
}
/* edns is not examined, but removed from message to help cache */
- if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
+ if(parse_extract_edns_from_response_msg(prs, &edns, qstate->env->scratch) !=
LDNS_RCODE_NOERROR) {
iq->parse_failures++;
goto handle_it;
}
/* Copy the edns options we may got from the back end */
- if(edns.opt_list) {
- qstate->edns_opts_back_in = edns_opt_copy_region(edns.opt_list,
+ if(edns.opt_list_in) {
+ qstate->edns_opts_back_in = edns_opt_copy_region(edns.opt_list_in,
qstate->region);
if(!qstate->edns_opts_back_in) {
log_err("out of memory on incoming message");
diff --git a/iterator/iterator.h b/iterator/iterator.h
index dc5e57527d87..a9e58569fcf3 100644
--- a/iterator/iterator.h
+++ b/iterator/iterator.h
@@ -94,8 +94,6 @@ extern int UNKNOWN_SERVER_NICENESS;
* Equals RTT_MAX_TIMEOUT
*/
#define USEFUL_SERVER_TOP_TIMEOUT 120000
-/** number of retries on outgoing queries */
-#define OUTBOUND_MSG_RETRY 5
/** RTT band, within this amount from the best, servers are chosen randomly.
* Chosen so that the UNKNOWN_SERVER_NICENESS falls within the band of a
* fast server, this causes server exploration as a side benefit. msec. */
@@ -139,6 +137,9 @@ struct iter_env {
lock_basic_type queries_ratelimit_lock;
/** number of queries that have been ratelimited */
size_t num_queries_ratelimited;
+
+ /** number of retries on outgoing queries */
+ int outbound_msg_retry;
};
/**
diff --git a/libunbound/context.c b/libunbound/context.c
index e589c6ae28d7..c8d911f13c7f 100644
--- a/libunbound/context.c
+++ b/libunbound/context.c
@@ -48,6 +48,7 @@
#include "services/cache/rrset.h"
#include "services/cache/infra.h"
#include "services/authzone.h"
+#include "services/listen_dnsport.h"
#include "util/data/msgreply.h"
#include "util/storage/slabhash.h"
#include "util/edns.h"
@@ -73,6 +74,7 @@ context_finalize(struct ub_ctx* ctx)
config_apply(cfg);
if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env))
return UB_INITFAIL;
+ listen_setup_locks();
log_edns_known_options(VERB_ALGO, ctx->env);
ctx->local_zones = local_zones_create();
if(!ctx->local_zones)
diff --git a/libunbound/context.h b/libunbound/context.h
index 78f8731e236e..c0c86fb52697 100644
--- a/libunbound/context.h
+++ b/libunbound/context.h
@@ -177,35 +177,6 @@ struct ctx_query {
};
/**
- * The error constants
- */
-enum ub_ctx_err {
- /** no error */
- UB_NOERROR = 0,
- /** socket operation. Set to -1, so that if an error from _fd() is
- * passed (-1) it gives a socket error. */
- UB_SOCKET = -1,
- /** alloc failure */
- UB_NOMEM = -2,
- /** syntax error */
- UB_SYNTAX = -3,
- /** DNS service failed */
- UB_SERVFAIL = -4,
- /** fork() failed */
- UB_FORKFAIL = -5,
- /** cfg change after finalize() */
- UB_AFTERFINAL = -6,
- /** initialization failed (bad settings) */
- UB_INITFAIL = -7,
- /** error in pipe communication with async bg worker */
- UB_PIPE = -8,
- /** error reading from file (resolv.conf) */
- UB_READFILE = -9,
- /** error async_id does not exist or result already been delivered */
- UB_NOID = -10
-};
-
-/**
* Command codes for libunbound pipe.
*
* Serialization looks like this:
diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c
index c9e24ba8d8f2..038b7b927a74 100644
--- a/libunbound/libunbound.c
+++ b/libunbound/libunbound.c
@@ -64,6 +64,7 @@
#include "services/cache/infra.h"
#include "services/cache/rrset.h"
#include "services/authzone.h"
+#include "services/listen_dnsport.h"
#include "sldns/sbuffer.h"
#ifdef HAVE_PTHREAD
#include <signal.h>
@@ -185,6 +186,7 @@ ub_ctx_create(void)
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
modstack_desetup(&ctx->mods, ctx->env);
+ listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
free(ctx->env);
@@ -198,6 +200,7 @@ ub_ctx_create(void)
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
modstack_desetup(&ctx->mods, ctx->env);
+ listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
free(ctx->env);
@@ -344,6 +347,7 @@ ub_ctx_delete(struct ub_ctx* ctx)
}
ub_randfree(ctx->seed_rnd);
alloc_clear(&ctx->superalloc);
+ listen_desetup_locks();
traverse_postorder(&ctx->queries, delq, NULL);
if(ctx_logfile_overridden) {
log_file(NULL);
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index 8a9ca9419480..7f753435d068 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -600,7 +600,9 @@ setup_qinfo_edns(struct libworker* w, struct ctx_query* q,
edns->ext_rcode = 0;
edns->edns_version = 0;
edns->bits = EDNS_DO;
- edns->opt_list = NULL;
+ edns->opt_list_in = NULL;
+ edns->opt_list_out = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
edns->padding_block_size = 0;
if(sldns_buffer_capacity(w->back->udp_buff) < 65535)
edns->udp_size = (uint16_t)sldns_buffer_capacity(
@@ -881,7 +883,7 @@ void libworker_alloc_cleanup(void* arg)
struct outbound_entry* libworker_send_query(struct query_info* qinfo,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
- size_t zonelen, int ssl_upstream, char* tls_auth_name,
+ size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
struct module_qstate* q)
{
struct libworker* w = (struct libworker*)q->env->worker;
@@ -891,7 +893,7 @@ struct outbound_entry* libworker_send_query(struct query_info* qinfo,
return NULL;
e->qstate = q;
e->qsent = outnet_serviced_query(w->back, qinfo, flags, dnssec,
- want_dnssec, nocaps, q->env->cfg->tcp_upstream, ssl_upstream,
+ want_dnssec, nocaps, tcp_upstream, ssl_upstream,
tls_auth_name, addr, addrlen, zone, zonelen, q,
libworker_handle_service_reply, e, w->back->udp_buff, q->env);
if(!e->qsent) {
@@ -975,7 +977,7 @@ struct outbound_entry* worker_send_query(struct query_info* ATTR_UNUSED(qinfo),
uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec),
int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps),
struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen),
- uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen),
+ uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
struct module_qstate* ATTR_UNUSED(q))
{
diff --git a/libunbound/python/doc/examples/example4.rst b/libunbound/python/doc/examples/example4.rst
index 3b43eb85f939..a95be52fb465 100644
--- a/libunbound/python/doc/examples/example4.rst
+++ b/libunbound/python/doc/examples/example4.rst
@@ -31,6 +31,6 @@ Source code
else:
print "Result is insecure"
-More detailed informations can be seen in libUnbound DNSSEC tutorial `here`_.
+More detailed information can be seen in libUnbound DNSSEC tutorial `here`_.
.. _here: http://www.unbound.net/documentation/libunbound-tutorial-6.html
diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i
index 763879e80869..c9549bf9008d 100644
--- a/libunbound/python/libunbound.i
+++ b/libunbound/python/libunbound.i
@@ -363,7 +363,7 @@ Result: ['74.125.43.147', '74.125.43.99', '74.125.43.103', '74.125.43.104']
ctx.debuglevel(3)
ctx.debugout(fw)
- Another option is to print the debug informations to stderr output
+ Another option is to print the debug information to stderr output
::
diff --git a/libunbound/unbound-event.h b/libunbound/unbound-event.h
index 4d694b8b4c5d..a5d5c038b68f 100644
--- a/libunbound/unbound-event.h
+++ b/libunbound/unbound-event.h
@@ -41,7 +41,7 @@
*
* Use ub_ctx_create_event_ub_base() to create an unbound context that uses
* the user provided event base API. Then, use the ub_resolve_event call
- * to add DNS resolve queries to the context. Those then run whith the
+ * to add DNS resolve queries to the context. Those then run with the
* provided event_base, and when they are done you get a function callback.
*
* This method does not fork another process or create a thread, the effort
diff --git a/libunbound/unbound.h b/libunbound/unbound.h
index 945c17a8fb5b..ee8558759065 100644
--- a/libunbound/unbound.h
+++ b/libunbound/unbound.h
@@ -224,7 +224,7 @@ struct ub_result {
* It is called with
* void* my_arg: your pointer to a (struct of) data of your choice,
* or NULL.
- * int err: if 0 all is OK, otherwise an error occured and no results
+ * int err: if 0 all is OK, otherwise an error occurred and no results
* are forthcoming.
* struct result: pointer to more detailed result structure.
* This structure is allocated on the heap and needs to be
@@ -233,6 +233,35 @@ struct ub_result {
typedef void (*ub_callback_type)(void*, int, struct ub_result*);
/**
+ * The error constants
+ */
+enum ub_ctx_err {
+ /** no error */
+ UB_NOERROR = 0,
+ /** socket operation. Set to -1, so that if an error from _fd() is
+ * passed (-1) it gives a socket error. */
+ UB_SOCKET = -1,
+ /** alloc failure */
+ UB_NOMEM = -2,
+ /** syntax error */
+ UB_SYNTAX = -3,
+ /** DNS service failed */
+ UB_SERVFAIL = -4,
+ /** fork() failed */
+ UB_FORKFAIL = -5,
+ /** cfg change after finalize() */
+ UB_AFTERFINAL = -6,
+ /** initialization failed (bad settings) */
+ UB_INITFAIL = -7,
+ /** error in pipe communication with async bg worker */
+ UB_PIPE = -8,
+ /** error reading from file (resolv.conf) */
+ UB_READFILE = -9,
+ /** error async_id does not exist or result already been delivered */
+ UB_NOID = -10
+};
+
+/**
* Create a resolving and validation context.
* The information from /etc/resolv.conf and /etc/hosts is not utilised by
* default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them.
@@ -563,6 +592,7 @@ void ub_resolve_free(struct ub_result* result);
/**
* Convert error value to a human readable string.
* @param err: error code from one of the libunbound functions.
+ * The error codes are from the type enum ub_ctx_err.
* @return pointer to constant text string, zero terminated.
*/
const char* ub_strerror(int err);
diff --git a/libunbound/worker.h b/libunbound/worker.h
index bf7473861af8..974b66a30e84 100644
--- a/libunbound/worker.h
+++ b/libunbound/worker.h
@@ -62,17 +62,18 @@ struct query_info;
* @param addrlen: length of addr.
* @param zone: delegation point name.
* @param zonelen: length of zone name wireformat dname.
+ * @param tcp_upstream: use TCP for upstream queries.
* @param ssl_upstream: use SSL for upstream queries.
* @param tls_auth_name: if ssl_upstream, use this name with TLS
* authentication.
- * @param q: wich query state to reactivate upon return.
+ * @param q: which query state to reactivate upon return.
* @return: false on failure (memory or socket related). no query was
* sent.
*/
struct outbound_entry* libworker_send_query(struct query_info* qinfo,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
- size_t zonelen, int ssl_upstream, char* tls_auth_name,
+ size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
struct module_qstate* q);
/** process incoming serviced query replies from the network */
@@ -113,17 +114,18 @@ void worker_sighandler(int sig, void* arg);
* @param addrlen: length of addr.
* @param zone: wireformat dname of the zone.
* @param zonelen: length of zone name.
+ * @param tcp_upstream: use TCP for upstream queries.
* @param ssl_upstream: use SSL for upstream queries.
* @param tls_auth_name: if ssl_upstream, use this name with TLS
* authentication.
- * @param q: wich query state to reactivate upon return.
+ * @param q: which query state to reactivate upon return.
* @return: false on failure (memory or socket related). no query was
* sent.
*/
struct outbound_entry* worker_send_query(struct query_info* qinfo,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
- size_t zonelen, int ssl_upstream, char* tls_auth_name,
+ size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
struct module_qstate* q);
/**
diff --git a/pythonmod/doc/examples/example5.rst b/pythonmod/doc/examples/example5.rst
index 938d8941bc9c..8b9d145d1429 100644
--- a/pythonmod/doc/examples/example5.rst
+++ b/pythonmod/doc/examples/example5.rst
@@ -90,7 +90,7 @@ We can also remove an EDNS option code from an EDNS option list.
log_info("python: Option code {} was not found in the "
"list.".format(code))
-.. note:: All occurences of the EDNS option code will be removed from the list:
+.. note:: All occurrences of the EDNS option code will be removed from the list:
Controlling other modules' cache behavior
diff --git a/pythonmod/doc/modules/struct.rst b/pythonmod/doc/modules/struct.rst
index de7c084e9008..310cf552456e 100644
--- a/pythonmod/doc/modules/struct.rst
+++ b/pythonmod/doc/modules/struct.rst
@@ -12,7 +12,7 @@ module_qstate
.. attribute:: qinfo
- (:class:`query_info`) Informations about query being answered. Name, RR type, RR class.
+ (:class:`query_info`) Information about query being answered. Name, RR type, RR class.
.. attribute:: query_flags
@@ -256,7 +256,7 @@ dns_msg
.. attribute:: qinfo
- (:class:`query_info`) Informations about query.
+ (:class:`query_info`) Information about query.
.. attribute:: rep
@@ -440,7 +440,7 @@ DNSMessage
.. method:: set_return_msg(self, qstate)
- This method fills qstate return message according to the given informations.
+ This method fills qstate return message according to the given information.
It takes lists of RRs in each section of answer, created necessary RRsets in wire format and store the result in :attr:`qstate.return_msg`.
Returns 1 if OK.
diff --git a/pythonmod/doc/usecase.rst b/pythonmod/doc/usecase.rst
index 5845061b02b3..27985e0394d5 100644
--- a/pythonmod/doc/usecase.rst
+++ b/pythonmod/doc/usecase.rst
@@ -21,7 +21,7 @@ almost every mail server supports DNS based blacklisting.
DNS based Wake-On-Lan
---------------------
-Controled by secured queries secured with private key.
+Controlled by secured queries secured with private key.
Dynamic translation service
---------------------------
diff --git a/pythonmod/examples/edns.py b/pythonmod/examples/edns.py
index ca1bb8da710d..ddcccc51c9bd 100644
--- a/pythonmod/examples/edns.py
+++ b/pythonmod/examples/edns.py
@@ -55,7 +55,7 @@
# Return True on success, False on failure.
#
# edns_opt_list_remove(edns_opt_list, code):
-# Remove all occurences of the given EDNS option code from the
+# Remove all occurrences of the given EDNS option code from the
# edns_opt_list.
# Return True when at least one EDNS option was removed, False otherwise.
#
diff --git a/pythonmod/interface.i b/pythonmod/interface.i
index ce7dcde7173c..03483abdf824 100644
--- a/pythonmod/interface.i
+++ b/pythonmod/interface.i
@@ -678,11 +678,14 @@ struct edns_data {
uint8_t edns_version;
uint16_t bits;
uint16_t udp_size;
- struct edns_option* opt_list;
+ struct edns_option* opt_list_in;
+ struct edns_option* opt_list_out;
+ struct edns_option* opt_list_inplace_cb_out;
+ uint16_t padding_block_size;
};
%inline %{
struct edns_option** _edns_data_opt_list_get(struct edns_data* edns) {
- return &edns->opt_list;
+ return &edns->opt_list_in;
}
%}
%extend edns_data {
@@ -710,8 +713,8 @@ struct module_env {
struct outbound_entry* (*send_query)(struct query_info* qinfo,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
struct sockaddr_storage* addr, socklen_t addrlen,
- uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name,
- struct module_qstate* q);
+ uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream,
+ char* tls_auth_name, struct module_qstate* q);
void (*detach_subs)(struct module_qstate* qstate);
int (*attach_sub)(struct module_qstate* qstate,
struct query_info* qinfo, uint16_t qflags, int prime,
@@ -1341,7 +1344,7 @@ int set_return_msg(struct module_qstate* qstate,
%pythoncode %{
class DNSMessage:
def __init__(self, rr_name, rr_type, rr_class = RR_CLASS_IN, query_flags = 0, default_ttl = 0):
- """Query flags is a combination of PKT_xx contants"""
+ """Query flags is a combination of PKT_xx constants"""
self.rr_name = rr_name
self.rr_type = rr_type
self.rr_class = rr_class
diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c
index 21a16bbe85bf..34a20ba76485 100644
--- a/pythonmod/pythonmod_utils.c
+++ b/pythonmod/pythonmod_utils.c
@@ -132,7 +132,7 @@ int createResponse(struct module_qstate* qstate, sldns_buffer* pkt)
return 0;
}
/* edns is not examined, but removed from message to help cache */
- if(parse_extract_edns(prs, &edns, qstate->env->scratch) !=
+ if(parse_extract_edns_from_response_msg(prs, &edns, qstate->env->scratch) !=
LDNS_RCODE_NOERROR)
return 0;
diff --git a/respip/respip.c b/respip/respip.c
index aae41f5d6368..3d1b3feaf460 100644
--- a/respip/respip.c
+++ b/respip/respip.c
@@ -25,6 +25,7 @@
#include "respip/respip.h"
#include "services/view.h"
#include "sldns/rrdef.h"
+#include "util/data/dname.h"
/** Subset of resp_addr.node, used for inform-variant logging */
@@ -483,8 +484,8 @@ respip_views_apply_cfg(struct views* vs, struct config_file* cfg,
* This function returns the copied rrset key on success, and NULL on memory
* allocation failure.
*/
-static struct ub_packed_rrset_key*
-copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region)
+struct ub_packed_rrset_key*
+respip_copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region)
{
struct ub_packed_rrset_key* ck = regional_alloc(region,
sizeof(struct ub_packed_rrset_key));
@@ -602,7 +603,7 @@ rdata2sockaddr(const struct packed_rrset_data* rd, uint16_t rtype, size_t i,
*/
static struct resp_addr*
respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs,
- size_t* rrset_id)
+ size_t* rrset_id, size_t* rr_id)
{
size_t i;
struct resp_addr* ra;
@@ -625,6 +626,7 @@ respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs,
&ss, addrlen);
if(ra) {
*rrset_id = i;
+ *rr_id = j;
lock_rw_rdlock(&ra->lock);
lock_rw_unlock(&rs->lock);
return ra;
@@ -635,43 +637,6 @@ respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs,
return NULL;
}
-/*
- * Create a new reply_info based on 'rep'. The new info is based on
- * the passed 'rep', but ignores any rrsets except for the first 'an_numrrsets'
- * RRsets in the answer section. These answer rrsets are copied to the
- * new info, up to 'copy_rrsets' rrsets (which must not be larger than
- * 'an_numrrsets'). If an_numrrsets > copy_rrsets, the remaining rrsets array
- * entries will be kept empty so the caller can fill them later. When rrsets
- * are copied, they are shallow copied. The caller must ensure that the
- * copied rrsets are valid throughout its lifetime and must provide appropriate
- * mutex if it can be shared by multiple threads.
- */
-static struct reply_info *
-make_new_reply_info(const struct reply_info* rep, struct regional* region,
- size_t an_numrrsets, size_t copy_rrsets)
-{
- struct reply_info* new_rep;
- size_t i;
-
- /* create a base struct. we specify 'insecure' security status as
- * the modified response won't be DNSSEC-valid. In our faked response
- * the authority and additional sections will be empty (except possible
- * EDNS0 OPT RR in the additional section appended on sending it out),
- * so the total number of RRsets is an_numrrsets. */
- new_rep = construct_reply_info_base(region, rep->flags,
- rep->qdcount, rep->ttl, rep->prefetch_ttl,
- rep->serve_expired_ttl, an_numrrsets, 0, 0, an_numrrsets,
- sec_status_insecure);
- if(!new_rep)
- return NULL;
- if(!reply_info_alloc_rrset_keys(new_rep, NULL, region))
- return NULL;
- for(i=0; i<copy_rrsets; i++)
- new_rep->rrsets[i] = rep->rrsets[i];
-
- return new_rep;
-}
-
/**
* See if response-ip or tag data should override the original answer rrset
* (which is rep->rrsets[rrset_id]) and if so override it.
@@ -730,7 +695,7 @@ respip_data_answer(enum respip_action action,
"response-ip redirect with tag data [%d] %s",
tag, (tag<num_tags?tagname[tag]:"null"));
/* use copy_rrset() to 'normalize' memory layout */
- rp = copy_rrset(&r, region);
+ rp = respip_copy_rrset(&r, region);
if(!rp)
return -1;
}
@@ -743,7 +708,7 @@ respip_data_answer(enum respip_action action,
* rename the dname for other actions than redirect. This is because
* response-ip-data isn't associated to any specific name. */
if(rp == data) {
- rp = copy_rrset(rp, region);
+ rp = respip_copy_rrset(rp, region);
if(!rp)
return -1;
rp->rk.dname = rep->rrsets[rrset_id]->rk.dname;
@@ -807,7 +772,6 @@ respip_nodata_answer(uint16_t qtype, enum respip_action action,
* is explicitly specified. */
int rcode = (action == respip_always_nxdomain)?
LDNS_RCODE_NXDOMAIN:LDNS_RCODE_NOERROR;
-
/* We should empty the answer section except for any preceding
* CNAMEs (in that case rrset_id > 0). Type-ANY case is
* special as noted in respip_data_answer(). */
@@ -907,7 +871,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
size_t tag_datas_size;
struct view* view = NULL;
struct respip_set* ipset = NULL;
- size_t rrset_id = 0;
+ size_t rrset_id = 0, rr_id = 0;
enum respip_action action = respip_none;
int tag = -1;
struct resp_addr* raddr = NULL;
@@ -948,7 +912,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
lock_rw_rdlock(&view->lock);
if(view->respip_set) {
if((raddr = respip_addr_lookup(rep,
- view->respip_set, &rrset_id))) {
+ view->respip_set, &rrset_id, &rr_id))) {
/** for per-view respip directives the action
* can only be direct (i.e. not tag-based) */
action = raddr->action;
@@ -962,7 +926,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
}
}
if(!raddr && (raddr = respip_addr_lookup(rep, ipset,
- &rrset_id))) {
+ &rrset_id, &rr_id))) {
action = (enum respip_action)local_data_find_tag_action(
raddr->taglist, raddr->taglen, ctaglist, ctaglen,
tag_actions, tag_actions_size,
@@ -976,7 +940,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
if(!r->taglist || taglist_intersect(r->taglist,
r->taglistlen, ctaglist, ctaglen)) {
if((raddr = respip_addr_lookup(rep,
- r->respip_set, &rrset_id))) {
+ r->respip_set, &rrset_id, &rr_id))) {
if(!respip_use_rpz(raddr, r, &action, &data,
&rpz_log, &log_name, &rpz_cname_override,
region, &rpz_used)) {
@@ -987,6 +951,21 @@ respip_rewrite_reply(const struct query_info* qinfo,
return 0;
}
if(rpz_used) {
+ if(verbosity >= VERB_ALGO) {
+ struct sockaddr_storage ss;
+ socklen_t ss_len = 0;
+ char nm[256], ip[256];
+ char qn[255+1];
+ if(!rdata2sockaddr(rep->rrsets[rrset_id]->entry.data, ntohs(rep->rrsets[rrset_id]->rk.type), rr_id, &ss, &ss_len))
+ snprintf(ip, sizeof(ip), "invalidRRdata");
+ else
+ addr_to_str(&ss, ss_len, ip, sizeof(ip));
+ dname_str(qinfo->qname, qn);
+ addr_to_str(&raddr->node.addr,
+ raddr->node.addrlen,
+ nm, sizeof(nm));
+ verbose(VERB_ALGO, "respip: rpz response-ip trigger %s/%d on %s %s with action %s", nm, raddr->node.net, qn, ip, rpz_action_to_string(respip_action_to_rpz_action(action)));
+ }
/* break to make sure 'a' stays pointed
* to used auth_zone, and keeps lock */
break;
@@ -1209,7 +1188,7 @@ respip_merge_cname(struct reply_info* base_rep,
if(!new_rep)
return 0;
for(i=0,j=base_rep->an_numrrsets; i<tgt_rep->an_numrrsets; i++,j++) {
- new_rep->rrsets[j] = copy_rrset(tgt_rep->rrsets[i], region);
+ new_rep->rrsets[j] = respip_copy_rrset(tgt_rep->rrsets[i], region);
if(!new_rep->rrsets[j])
return 0;
}
diff --git a/respip/respip.h b/respip/respip.h
index bbd471421c1e..3dfb4e9f01c7 100644
--- a/respip/respip.h
+++ b/respip/respip.h
@@ -294,4 +294,7 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr,
*/
void
respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node);
+
+struct ub_packed_rrset_key*
+respip_copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region);
#endif /* RESPIP_RESPIP_H */
diff --git a/services/authzone.c b/services/authzone.c
index e6e3a8cff9b4..e83af533dbc0 100644
--- a/services/authzone.c
+++ b/services/authzone.c
@@ -84,7 +84,7 @@
#define AUTH_PROBE_TIMEOUT_STOP 1000 /* msec */
/* auth transfer timeout for TCP connections, in msec */
#define AUTH_TRANSFER_TIMEOUT 10000 /* msec */
-/* auth transfer max backoff for failed tranfers and probes */
+/* auth transfer max backoff for failed transfers and probes */
#define AUTH_TRANSFER_MAX_BACKOFF 86400 /* sec */
/* auth http port number */
#define AUTH_HTTP_PORT 80
@@ -243,7 +243,7 @@ msg_add_rrset_an(struct auth_zone* z, struct regional* region,
return 1;
}
-/** add rrset to authority section (no additonal section rrsets yet) */
+/** add rrset to authority section (no additional section rrsets yet) */
static int
msg_add_rrset_ns(struct auth_zone* z, struct regional* region,
struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset)
@@ -1950,6 +1950,17 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z,
return 0;
}
+/** find the apex SOA RRset, if it exists */
+struct auth_rrset* auth_zone_get_soa_rrset(struct auth_zone* z)
+{
+ struct auth_data* apex;
+ struct auth_rrset* soa;
+ apex = az_find_name(z, z->name, z->namelen);
+ if(!apex) return NULL;
+ soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA);
+ return soa;
+}
+
/** find serial number of zone or false if none */
int
auth_zone_get_serial(struct auth_zone* z, uint32_t* serial)
@@ -3507,7 +3518,7 @@ auth_error_encode(struct query_info* qinfo, struct module_env* env,
if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL,
rcode, edns, repinfo, temp, env->now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(buf, rcode|BIT_AA, qinfo,
*(uint16_t*)sldns_buffer_begin(buf),
sldns_buffer_read_u16_at(buf, 2), edns);
@@ -5347,7 +5358,9 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env)
edns.ext_rcode = 0;
edns.edns_version = 0;
edns.bits = EDNS_DO;
- edns.opt_list = NULL;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = NULL;
+ edns.opt_list_inplace_cb_out = NULL;
edns.padding_block_size = 0;
if(sldns_buffer_capacity(buf) < 65535)
edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);
@@ -6480,7 +6493,7 @@ auth_xfer_probe_udp_callback(struct comm_point* c, void* arg, int err,
comm_point_delete(xfr->task_probe->cp);
xfr->task_probe->cp = NULL;
- /* if the result was not a successfull probe, we need
+ /* if the result was not a successful probe, we need
* to send the next one */
xfr_probe_nextmaster(xfr);
xfr_probe_send_or_end(xfr, env);
@@ -6536,7 +6549,9 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env)
edns.ext_rcode = 0;
edns.edns_version = 0;
edns.bits = EDNS_DO;
- edns.opt_list = NULL;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = NULL;
+ edns.opt_list_inplace_cb_out = NULL;
edns.padding_block_size = 0;
if(sldns_buffer_capacity(buf) < 65535)
edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);
@@ -7149,7 +7164,7 @@ parse_url(char* url, char** host, char** file, int* port, int* ssl)
while(p && *p == '/')
p++;
if(!p || p[0] == 0)
- *file = strdup("index.html");
+ *file = strdup("/");
else *file = strdup(p);
if(!*file) {
log_err("malloc failure");
@@ -7683,7 +7698,7 @@ static void auth_zone_log(uint8_t* name, enum verbosity_value level,
static int zonemd_dnssec_verify_rrset(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* node,
- struct auth_rrset* rrset, char** why_bogus)
+ struct auth_rrset* rrset, char** why_bogus, uint8_t* sigalg)
{
struct ub_packed_rrset_key pk;
enum sec_status sec;
@@ -7711,7 +7726,7 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z,
auth_zone_log(z->name, VERB_ALGO,
"zonemd: verify %s RRset with DNSKEY", typestr);
}
- sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, why_bogus,
+ sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, sigalg, why_bogus,
LDNS_SECTION_ANSWER, NULL);
if(sec == sec_status_secure) {
return 1;
@@ -7755,7 +7770,7 @@ static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo,
static int zonemd_check_dnssec_absence(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* apex,
- char** reason, char** why_bogus)
+ char** reason, char** why_bogus, uint8_t* sigalg)
{
struct auth_rrset* nsec = NULL;
if(!apex) {
@@ -7767,7 +7782,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z,
struct ub_packed_rrset_key pk;
/* dnssec verify the NSEC */
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex,
- nsec, why_bogus)) {
+ nsec, why_bogus, sigalg)) {
*reason = "DNSSEC verify failed for NSEC RRset";
return 0;
}
@@ -7810,7 +7825,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z,
}
/* dnssec verify the NSEC3 */
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, match,
- nsec3, why_bogus)) {
+ nsec3, why_bogus, sigalg)) {
*reason = "DNSSEC verify failed for NSEC3 RRset";
return 0;
}
@@ -7831,7 +7846,8 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z,
static int zonemd_check_dnssec_soazonemd(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* apex,
- struct auth_rrset* zonemd_rrset, char** reason, char** why_bogus)
+ struct auth_rrset* zonemd_rrset, char** reason, char** why_bogus,
+ uint8_t* sigalg)
{
struct auth_rrset* soa;
if(!apex) {
@@ -7844,12 +7860,12 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z,
return 0;
}
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, soa,
- why_bogus)) {
+ why_bogus, sigalg)) {
*reason = "DNSSEC verify failed for SOA RRset";
return 0;
}
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex,
- zonemd_rrset, why_bogus)) {
+ zonemd_rrset, why_bogus, sigalg)) {
*reason = "DNSSEC verify failed for ZONEMD RRset";
return 0;
}
@@ -7908,12 +7924,14 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env,
* @param is_insecure: if true, the dnskey is not used, the zone is insecure.
* And dnssec is not used. It is DNSSEC secure insecure or not under
* a trust anchor.
+ * @param sigalg: if nonNULL provide algorithm downgrade protection.
+ * Otherwise one algorithm is enough. Must have space of ALGO_NEEDS_MAX+1.
* @param result: if not NULL result reason copied here.
*/
static void
auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
struct module_stack* mods, struct ub_packed_rrset_key* dnskey,
- int is_insecure, char** result)
+ int is_insecure, char** result, uint8_t* sigalg)
{
char* reason = NULL, *why_bogus = NULL;
struct auth_data* apex = NULL;
@@ -7943,7 +7961,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
} else if(!zonemd_rrset && dnskey && !is_insecure) {
/* fetch, DNSSEC verify, and check NSEC/NSEC3 */
if(!zonemd_check_dnssec_absence(z, env, mods, dnskey, apex,
- &reason, &why_bogus)) {
+ &reason, &why_bogus, sigalg)) {
auth_zone_zonemd_fail(z, env, reason, why_bogus, result);
return;
}
@@ -7951,7 +7969,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
} else if(zonemd_rrset && dnskey && !is_insecure) {
/* check DNSSEC verify of SOA and ZONEMD */
if(!zonemd_check_dnssec_soazonemd(z, env, mods, dnskey, apex,
- zonemd_rrset, &reason, &why_bogus)) {
+ zonemd_rrset, &reason, &why_bogus, sigalg)) {
auth_zone_zonemd_fail(z, env, reason, why_bogus, result);
return;
}
@@ -8065,15 +8083,78 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env,
return NULL;
}
+/** verify the DNSKEY from the zone with looked up DS record */
+static struct ub_packed_rrset_key*
+auth_zone_verify_zonemd_key_with_ds(struct auth_zone* z,
+ struct module_env* env, struct module_stack* mods,
+ struct ub_packed_rrset_key* ds, int* is_insecure, char** why_bogus,
+ struct ub_packed_rrset_key* keystorage, uint8_t* sigalg)
+{
+ struct auth_data* apex;
+ struct auth_rrset* dnskey_rrset;
+ enum sec_status sec;
+ struct val_env* ve;
+ int m;
+
+ /* fetch DNSKEY from zone data */
+ apex = az_find_name(z, z->name, z->namelen);
+ if(!apex) {
+ *why_bogus = "in verifywithDS, zone has no apex";
+ return NULL;
+ }
+ dnskey_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_DNSKEY);
+ if(!dnskey_rrset || dnskey_rrset->data->count==0) {
+ *why_bogus = "in verifywithDS, zone has no DNSKEY";
+ return NULL;
+ }
+
+ m = modstack_find(mods, "validator");
+ if(m == -1) {
+ *why_bogus = "in verifywithDS, have no validator module";
+ return NULL;
+ }
+ ve = (struct val_env*)env->modinfo[m];
+
+ memset(keystorage, 0, sizeof(*keystorage));
+ keystorage->entry.key = keystorage;
+ keystorage->entry.data = dnskey_rrset->data;
+ keystorage->rk.dname = apex->name;
+ keystorage->rk.dname_len = apex->namelen;
+ keystorage->rk.type = htons(LDNS_RR_TYPE_DNSKEY);
+ keystorage->rk.rrset_class = htons(z->dclass);
+ auth_zone_log(z->name, VERB_QUERY, "zonemd: verify zone DNSKEY with DS");
+ sec = val_verify_DNSKEY_with_DS(env, ve, keystorage, ds, sigalg,
+ why_bogus, NULL);
+ regional_free_all(env->scratch);
+ if(sec == sec_status_secure) {
+ /* success */
+ return keystorage;
+ } else if(sec == sec_status_insecure) {
+ /* insecure */
+ *is_insecure = 1;
+ } else {
+ /* bogus */
+ *is_insecure = 0;
+ if(*why_bogus == NULL)
+ *why_bogus = "verify failed";
+ auth_zone_log(z->name, VERB_ALGO,
+ "zonemd: verify DNSKEY RRset with DS failed: %s",
+ *why_bogus);
+ }
+ return NULL;
+}
+
/** callback for ZONEMD lookup of DNSKEY */
void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
enum sec_status sec, char* why_bogus, int ATTR_UNUSED(was_ratelimited))
{
struct auth_zone* z = (struct auth_zone*)arg;
struct module_env* env;
- char* reason = NULL;
- struct ub_packed_rrset_key* dnskey = NULL;
- int is_insecure = 0;
+ char* reason = NULL, *ds_bogus = NULL, *typestr="DNSKEY";
+ struct ub_packed_rrset_key* dnskey = NULL, *ds = NULL;
+ int is_insecure = 0, downprot;
+ struct ub_packed_rrset_key keystorage;
+ uint8_t sigalg[ALGO_NEEDS_MAX+1];
lock_rw_wrlock(&z->lock);
env = z->zonemd_callback_env;
@@ -8084,16 +8165,22 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
lock_rw_unlock(&z->lock);
return; /* stop on quit */
}
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DS)
+ typestr = "DS";
+ downprot = env->cfg->harden_algo_downgrade;
/* process result */
if(sec == sec_status_bogus) {
reason = why_bogus;
- if(!reason)
- reason = "lookup of DNSKEY was bogus";
+ if(!reason) {
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DNSKEY)
+ reason = "lookup of DNSKEY was bogus";
+ else reason = "lookup of DS was bogus";
+ }
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was bogus: %s", reason);
+ "zonemd lookup of %s was bogus: %s", typestr, reason);
} else if(rcode == LDNS_RCODE_NOERROR) {
- uint16_t wanted_qtype = LDNS_RR_TYPE_DNSKEY;
+ uint16_t wanted_qtype = z->zonemd_callback_qtype;
struct regional* temp = env->scratch;
struct query_info rq;
struct reply_info* rep;
@@ -8106,25 +8193,29 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
struct ub_packed_rrset_key* answer =
reply_find_answer_rrset(&rq, rep);
if(answer && sec == sec_status_secure) {
- dnskey = answer;
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DNSKEY)
+ dnskey = answer;
+ else ds = answer;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was secure");
+ "zonemd lookup of %s was secure", typestr);
} else if(sec == sec_status_secure && !answer) {
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY has no content, but is secure, treat as insecure");
+ "zonemd lookup of %s has no content, but is secure, treat as insecure", typestr);
} else if(sec == sec_status_insecure) {
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was insecure");
+ "zonemd lookup of %s was insecure", typestr);
} else if(sec == sec_status_indeterminate) {
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was indeterminate, treat as insecure");
+ "zonemd lookup of %s was indeterminate, treat as insecure", typestr);
} else {
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY has nodata");
- reason = "lookup of DNSKEY has nodata";
+ "zonemd lookup of %s has nodata", typestr);
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DNSKEY)
+ reason = "lookup of DNSKEY has nodata";
+ else reason = "lookup of DS has nodata";
}
} else if(rep && rq.qtype == wanted_qtype &&
query_dname_compare(z->name, rq.qname) == 0 &&
@@ -8137,40 +8228,52 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
* trust, as insecure. */
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was secure NXDOMAIN, treat as insecure");
+ "zonemd lookup of %s was secure NXDOMAIN, treat as insecure", typestr);
} else if(rep && rq.qtype == wanted_qtype &&
query_dname_compare(z->name, rq.qname) == 0 &&
FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN &&
sec == sec_status_insecure) {
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was insecure NXDOMAIN, treat as insecure");
+ "zonemd lookup of %s was insecure NXDOMAIN, treat as insecure", typestr);
} else if(rep && rq.qtype == wanted_qtype &&
query_dname_compare(z->name, rq.qname) == 0 &&
FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN &&
sec == sec_status_indeterminate) {
is_insecure = 1;
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY was indeterminate NXDOMAIN, treat as insecure");
+ "zonemd lookup of %s was indeterminate NXDOMAIN, treat as insecure", typestr);
} else {
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY has no answer");
- reason = "lookup of DNSKEY has no answer";
+ "zonemd lookup of %s has no answer", typestr);
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DNSKEY)
+ reason = "lookup of DNSKEY has no answer";
+ else reason = "lookup of DS has no answer";
}
} else {
auth_zone_log(z->name, VERB_ALGO,
- "zonemd lookup of DNSKEY failed");
- reason = "lookup of DNSKEY failed";
+ "zonemd lookup of %s failed", typestr);
+ if(z->zonemd_callback_qtype == LDNS_RR_TYPE_DNSKEY)
+ reason = "lookup of DNSKEY failed";
+ else reason = "lookup of DS failed";
+ }
+
+ if(!reason && !is_insecure && !dnskey && ds) {
+ dnskey = auth_zone_verify_zonemd_key_with_ds(z, env,
+ &env->mesh->mods, ds, &is_insecure, &ds_bogus,
+ &keystorage, downprot?sigalg:NULL);
+ if(!dnskey && !is_insecure && !reason)
+ reason = "DNSKEY verify with DS failed";
}
if(reason) {
- auth_zone_zonemd_fail(z, env, reason, NULL, NULL);
+ auth_zone_zonemd_fail(z, env, reason, ds_bogus, NULL);
lock_rw_unlock(&z->lock);
return;
}
auth_zone_verify_zonemd_with_key(z, env, &env->mesh->mods, dnskey,
- is_insecure, NULL);
+ is_insecure, NULL, downprot?sigalg:NULL);
regional_free_all(env->scratch);
lock_rw_unlock(&z->lock);
}
@@ -8183,14 +8286,21 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
uint16_t qflags = BIT_RD;
struct edns_data edns;
sldns_buffer* buf = env->scratch_buffer;
+ int fetch_ds = 0;
+ if(!z->fallback_enabled) {
+ /* we cannot actually get the DNSKEY, because it is in the
+ * zone we have ourselves, and it is not served yet
+ * (possibly), so fetch type DS */
+ fetch_ds = 1;
+ }
if(z->zonemd_callback_env) {
/* another worker is already working on the callback
* for the DNSKEY lookup for ZONEMD verification.
* We do not also have to do ZONEMD verification, let that
* worker do it */
auth_zone_log(z->name, VERB_ALGO,
- "zonemd needs lookup of DNSKEY and that already worked on by another worker");
+ "zonemd needs lookup of %s and that already is worked on by another worker", (fetch_ds?"DS":"DNSKEY"));
return 1;
}
@@ -8199,21 +8309,26 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
qinfo.qname_len = z->namelen;
qinfo.qname = z->name;
qinfo.qclass = z->dclass;
- qinfo.qtype = LDNS_RR_TYPE_DNSKEY;
+ if(fetch_ds)
+ qinfo.qtype = LDNS_RR_TYPE_DS;
+ else qinfo.qtype = LDNS_RR_TYPE_DNSKEY;
qinfo.local_alias = NULL;
if(verbosity >= VERB_ALGO) {
char buf1[512];
char buf2[LDNS_MAX_DOMAINLEN+1];
dname_str(z->name, buf2);
- snprintf(buf1, sizeof(buf1), "auth zone %s: lookup DNSKEY "
- "for zonemd verification", buf2);
+ snprintf(buf1, sizeof(buf1), "auth zone %s: lookup %s "
+ "for zonemd verification", buf2,
+ (fetch_ds?"DS":"DNSKEY"));
log_query_info(VERB_ALGO, buf1, &qinfo);
}
edns.edns_present = 1;
edns.ext_rcode = 0;
edns.edns_version = 0;
edns.bits = EDNS_DO;
- edns.opt_list = NULL;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = NULL;
+ edns.opt_list_inplace_cb_out = NULL;
if(sldns_buffer_capacity(buf) < 65535)
edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);
else edns.udp_size = 65535;
@@ -8221,12 +8336,14 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
/* store the worker-specific module env for the callback.
* We can then reference this when the callback executes */
z->zonemd_callback_env = env;
+ z->zonemd_callback_qtype = qinfo.qtype;
/* the callback can be called straight away */
lock_rw_unlock(&z->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
&auth_zonemd_dnskey_lookup_callback, z)) {
lock_rw_wrlock(&z->lock);
- log_err("out of memory lookup up dnskey for zonemd");
+ log_err("out of memory lookup of %s for zonemd",
+ (fetch_ds?"DS":"DNSKEY"));
return 0;
}
lock_rw_wrlock(&z->lock);
@@ -8245,6 +8362,8 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env,
* If not present check if absence is allowed by DNSSEC */
if(!z->zonemd_check)
return;
+ if(z->data.count == 0)
+ return; /* no data */
/* if zone is under a trustanchor */
/* is it equal to trustanchor - get dnskey's verified */
@@ -8298,7 +8417,7 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env,
}
auth_zone_verify_zonemd_with_key(z, env, mods, dnskey, is_insecure,
- result);
+ result, NULL);
regional_free_all(env->scratch);
}
diff --git a/services/authzone.h b/services/authzone.h
index ffe234d59b53..d24e569d3b85 100644
--- a/services/authzone.h
+++ b/services/authzone.h
@@ -143,6 +143,8 @@ struct auth_zone {
* worker has already picked up the zonemd verification task and
* this worker does not have to do it as well. */
struct module_env* zonemd_callback_env;
+ /** for the zonemd callback, the type of data looked up */
+ uint16_t zonemd_callback_qtype;
/** zone has been deleted */
int zone_deleted;
/** deletelist pointer, unused normally except during delete */
@@ -634,6 +636,9 @@ int auth_zones_startprobesequence(struct auth_zones* az,
/** read auth zone from zonefile. caller must lock zone. false on failure */
int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg);
+/** find the apex SOA RRset, if it exists. NULL if no SOA RRset. */
+struct auth_rrset* auth_zone_get_soa_rrset(struct auth_zone* z);
+
/** find serial number of zone or false if none (no SOA record) */
int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial);
diff --git a/services/cache/rrset.h b/services/cache/rrset.h
index 35a0d732b048..7c36d4032ebc 100644
--- a/services/cache/rrset.h
+++ b/services/cache/rrset.h
@@ -120,7 +120,7 @@ void rrset_cache_touch(struct rrset_cache* r, struct ub_packed_rrset_key* key,
* the new rrset. The reference may be changed if the cached rrset is
* superior.
* Before calling the rrset is presumed newly allocated and changeable.
- * Afer calling you do not hold a lock, and the rrset is inserted in
+ * After calling you do not hold a lock, and the rrset is inserted in
* the hashtable so you need a lock to change it.
* @param alloc: how to allocate (and deallocate) the special rrset key.
* @param timenow: current time (to see if ttl in cache is expired).
@@ -143,7 +143,7 @@ int rrset_cache_update(struct rrset_cache* r, struct rrset_ref* ref,
* @param rrset: which rrset to cache as wildcard. This rrset is left
* untouched.
* @param ce: the closest encloser, will be uses to generate the wildcard dname.
- * @param ce_len: the closest encloser lenght.
+ * @param ce_len: the closest encloser length.
* @param alloc: how to allocate (and deallocate) the special rrset key.
* @param timenow: current time (to see if ttl in cache is expired).
*/
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index b43def567501..6a33fbcdaf7e 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -869,9 +869,14 @@ set_ip_dscp(int socket, int addrfamily, int dscp)
ds = dscp << 2;
switch(addrfamily) {
case AF_INET6:
- if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0)
+ #ifdef IPV6_TCLASS
+ if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds,
+ sizeof(ds)) < 0)
return sock_strerror(errno);
break;
+ #else
+ return "IPV6_TCLASS not defined on this system";
+ #endif
default:
if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0)
return sock_strerror(errno);
@@ -1306,6 +1311,38 @@ listen_cp_insert(struct comm_point* c, struct listen_dnsport* front)
return 1;
}
+void listen_setup_locks(void)
+{
+ if(!stream_wait_lock_inited) {
+ lock_basic_init(&stream_wait_count_lock);
+ stream_wait_lock_inited = 1;
+ }
+ if(!http2_query_buffer_lock_inited) {
+ lock_basic_init(&http2_query_buffer_count_lock);
+ http2_query_buffer_lock_inited = 1;
+ }
+ if(!http2_response_buffer_lock_inited) {
+ lock_basic_init(&http2_response_buffer_count_lock);
+ http2_response_buffer_lock_inited = 1;
+ }
+}
+
+void listen_desetup_locks(void)
+{
+ if(stream_wait_lock_inited) {
+ stream_wait_lock_inited = 0;
+ lock_basic_destroy(&stream_wait_count_lock);
+ }
+ if(http2_query_buffer_lock_inited) {
+ http2_query_buffer_lock_inited = 0;
+ lock_basic_destroy(&http2_query_buffer_count_lock);
+ }
+ if(http2_response_buffer_lock_inited) {
+ http2_response_buffer_lock_inited = 0;
+ lock_basic_destroy(&http2_response_buffer_count_lock);
+ }
+}
+
struct listen_dnsport*
listen_create(struct comm_base* base, struct listen_port* ports,
size_t bufsize, int tcp_accept_count, int tcp_idle_timeout,
@@ -1327,18 +1364,6 @@ listen_create(struct comm_base* base, struct listen_port* ports,
free(front);
return NULL;
}
- if(!stream_wait_lock_inited) {
- lock_basic_init(&stream_wait_count_lock);
- stream_wait_lock_inited = 1;
- }
- if(!http2_query_buffer_lock_inited) {
- lock_basic_init(&http2_query_buffer_count_lock);
- http2_query_buffer_lock_inited = 1;
- }
- if(!http2_response_buffer_lock_inited) {
- lock_basic_init(&http2_response_buffer_count_lock);
- http2_response_buffer_lock_inited = 1;
- }
/* create comm points as needed */
while(ports) {
@@ -1454,18 +1479,6 @@ listen_delete(struct listen_dnsport* front)
#endif
sldns_buffer_free(front->udp_buff);
free(front);
- if(stream_wait_lock_inited) {
- stream_wait_lock_inited = 0;
- lock_basic_destroy(&stream_wait_count_lock);
- }
- if(http2_query_buffer_lock_inited) {
- http2_query_buffer_lock_inited = 0;
- lock_basic_destroy(&http2_query_buffer_count_lock);
- }
- if(http2_response_buffer_lock_inited) {
- http2_response_buffer_lock_inited = 0;
- lock_basic_destroy(&http2_response_buffer_count_lock);
- }
}
#ifdef HAVE_GETIFADDRS
@@ -2610,7 +2623,7 @@ static int http2_req_begin_headers_cb(nghttp2_session* session,
int ret;
if(frame->hd.type != NGHTTP2_HEADERS ||
frame->headers.cat != NGHTTP2_HCAT_REQUEST) {
- /* only interrested in request headers */
+ /* only interested in request headers */
return 0;
}
if(!(h2_stream = http2_stream_create(frame->hd.stream_id))) {
@@ -2738,7 +2751,7 @@ static int http2_req_header_cb(nghttp2_session* session,
* the HEADER */
if(frame->hd.type != NGHTTP2_HEADERS ||
frame->headers.cat != NGHTTP2_HCAT_REQUEST) {
- /* only interrested in request headers */
+ /* only interested in request headers */
return 0;
}
if(!(h2_stream = nghttp2_session_get_stream_user_data(session,
@@ -2834,7 +2847,7 @@ static int http2_req_header_cb(nghttp2_session* session,
h2_stream->query_too_large = 1;
return 0;
}
- /* guaranteed to only contian digits and be null terminated */
+ /* guaranteed to only contain digits and be null terminated */
h2_stream->content_length = atoi((const char*)value);
if(h2_stream->content_length >
h2_session->c->http2_stream_max_qbuffer_size) {
@@ -2874,7 +2887,7 @@ static int http2_req_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session),
/* setting this to msg-buffer-size can result in a lot
* of memory consuption. Most queries should fit in a
* single DATA frame, and most POST queries will
- * containt content-length which does not impose this
+ * contain content-length which does not impose this
* limit. */
qlen = len;
}
diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h
index 1e51be9bfcab..0e63236bcbce 100644
--- a/services/listen_dnsport.h
+++ b/services/listen_dnsport.h
@@ -199,6 +199,11 @@ listen_create(struct comm_base* base, struct listen_port* ports,
*/
void listen_delete(struct listen_dnsport* listen);
+/** setup the locks for the listen ports */
+void listen_setup_locks(void);
+/** desetup the locks for the listen ports */
+void listen_desetup_locks(void);
+
/**
* delete listen_list of commpoints. Calls commpointdelete() on items.
* This may close the fds or not depending on flags.
diff --git a/services/localzone.c b/services/localzone.c
index 54f55ab810e4..77d0107f9f6f 100644
--- a/services/localzone.c
+++ b/services/localzone.c
@@ -465,7 +465,7 @@ lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen,
/* Mark the SOA record for the zone. This only marks the SOA rrset; the data
* for the RR is entered later on local_zone_enter_rr() as with the other
- * records. An artifical soa_negative record with a modified TTL (minimum of
+ * records. An artificial soa_negative record with a modified TTL (minimum of
* the TTL and the SOA.MINIMUM) is also created and marked for usage with
* negative answers and to avoid allocations during those answers. */
static int
@@ -898,6 +898,11 @@ int local_zone_enter_defaults(struct local_zones* zones, struct config_file* cfg
}
lock_rw_unlock(&z->lock);
}
+ /* home.arpa. zone (RFC 8375) */
+ if(!add_empty_default(zones, cfg, "home.arpa.")) {
+ log_err("out of memory adding default zone");
+ return 0;
+ }
/* onion. zone (RFC 7686) */
if(!add_empty_default(zones, cfg, "onion.")) {
log_err("out of memory adding default zone");
@@ -1294,7 +1299,7 @@ local_error_encode(struct query_info* qinfo, struct module_env* env,
if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL,
rcode, edns, repinfo, temp, env->now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(buf, r, qinfo, *(uint16_t*)sldns_buffer_begin(buf),
sldns_buffer_read_u16_at(buf, 2), edns);
}
@@ -1521,7 +1526,7 @@ local_data_answer(struct local_zone* z, struct module_env* env,
/* write qname */
memmove(d->rr_data[0] + sizeof(uint16_t), qinfo->qname,
qinfo->qname_len - 1);
- /* write cname target wilcard wildcard label */
+ /* write cname target wildcard label */
memmove(d->rr_data[0] + sizeof(uint16_t) +
qinfo->qname_len - 1, ctarget + 2,
ctargetlen - 2);
@@ -1570,6 +1575,15 @@ local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo,
return (lr == NULL);
}
+static inline int
+local_zone_is_udp_query(struct comm_reply* repinfo) {
+ return repinfo != NULL
+ ? (repinfo->c != NULL
+ ? repinfo->c->type == comm_udp
+ : 0)
+ : 0;
+}
+
int
local_zones_zone_answer(struct local_zone* z, struct module_env* env,
struct query_info* qinfo, struct edns_data* edns,
@@ -1592,7 +1606,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
lz_type == local_zone_redirect ||
lz_type == local_zone_inform_redirect ||
lz_type == local_zone_always_nxdomain ||
- lz_type == local_zone_always_nodata) {
+ lz_type == local_zone_always_nodata ||
+ (lz_type == local_zone_truncate
+ && local_zone_is_udp_query(repinfo))) {
/* for static, reply nodata or nxdomain
* for redirect, reply nodata */
/* no additional section processing,
@@ -1602,9 +1618,11 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
*/
int rcode = (ld || lz_type == local_zone_redirect ||
lz_type == local_zone_inform_redirect ||
- lz_type == local_zone_always_nodata)?
+ lz_type == local_zone_always_nodata ||
+ lz_type == local_zone_truncate)?
LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN;
- if(z->soa && z->soa_negative)
+ rcode = (lz_type == local_zone_truncate ? (rcode|BIT_TC) : rcode);
+ if(z != NULL && z->soa && z->soa_negative)
return local_encode(qinfo, env, edns, repinfo, buf, temp,
z->soa_negative, 0, rcode);
local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode,
@@ -1661,7 +1679,7 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
* does not, then we should make this noerror/nodata */
if(ld && ld->rrsets) {
int rcode = LDNS_RCODE_NOERROR;
- if(z->soa && z->soa_negative)
+ if(z != NULL && z->soa && z->soa_negative)
return local_encode(qinfo, env, edns, repinfo, buf, temp,
z->soa_negative, 0, rcode);
local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode,
@@ -1860,6 +1878,7 @@ const char* local_zone_type2str(enum localzone_type t)
case local_zone_always_deny: return "always_deny";
case local_zone_always_null: return "always_null";
case local_zone_noview: return "noview";
+ case local_zone_truncate: return "truncate";
case local_zone_invalid: return "invalid";
}
return "badtyped";
@@ -1899,6 +1918,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t)
*t = local_zone_always_null;
else if(strcmp(type, "noview") == 0)
*t = local_zone_noview;
+ else if(strcmp(type, "truncate") == 0)
+ *t = local_zone_truncate;
else if(strcmp(type, "nodefault") == 0)
*t = local_zone_nodefault;
else return 0;
diff --git a/services/localzone.h b/services/localzone.h
index b52d81dc72cb..19534f7509ed 100644
--- a/services/localzone.h
+++ b/services/localzone.h
@@ -101,6 +101,8 @@ enum localzone_type {
local_zone_always_null,
/** answer not from the view, but global or no-answer */
local_zone_noview,
+ /** truncate the response; client should retry via tcp */
+ local_zone_truncate,
/** Invalid type, cannot be used to generate answer */
local_zone_invalid
};
@@ -255,7 +257,7 @@ void local_zone_delete(struct local_zone* z);
* @param dclass: class to lookup.
* @param dtype: type to lookup, if type DS a zone higher is used for zonecuts.
* @param taglist: taglist to lookup.
- * @param taglen: lenth of taglist.
+ * @param taglen: length of taglist.
* @param ignoretags: lookup zone by name and class, regardless the
* local-zone's tags.
* @return closest local_zone or NULL if no covering zone is found.
@@ -563,6 +565,8 @@ enum respip_action {
respip_always_nodata = local_zone_always_nodata,
/** answer with nodata response */
respip_always_deny = local_zone_always_deny,
+ /** RPZ: truncate answer in order to force switch to tcp */
+ respip_truncate = local_zone_truncate,
/* The rest of the values are only possible as
* access-control-tag-action */
diff --git a/services/mesh.c b/services/mesh.c
index 5679a8b64e58..cdcfedda270c 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -461,7 +461,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
struct edns_data* edns, struct comm_reply* rep, uint16_t qid)
{
struct mesh_state* s = NULL;
- int unique = unique_mesh_state(edns->opt_list, mesh->env);
+ int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
int was_detached = 0;
int was_noreply = 0;
int added = 0;
@@ -505,7 +505,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
log_err("mesh_state_create: out of memory; SERVFAIL");
if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL,
LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
qinfo, qid, qflags, edns);
comm_point_send_reply(rep);
@@ -514,14 +514,14 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
if(unique)
mesh_state_make_unique(s);
/* copy the edns options we got from the front */
- if(edns->opt_list) {
- s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list,
+ if(edns->opt_list_in) {
+ s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list_in,
s->s.region);
if(!s->s.edns_opts_front_in) {
log_err("mesh_state_create: out of memory; SERVFAIL");
if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL,
NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
qinfo, qid, qflags, edns);
comm_point_send_reply(rep);
@@ -594,7 +594,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
servfail_mem:
if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s,
NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv))
- edns->opt_list = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
qinfo, qid, qflags, edns);
comm_point_send_reply(rep);
@@ -609,7 +609,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qid, mesh_cb_func_type cb, void* cb_arg)
{
struct mesh_state* s = NULL;
- int unique = unique_mesh_state(edns->opt_list, mesh->env);
+ int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
int timeout = mesh->env->cfg->serve_expired?
mesh->env->cfg->serve_expired_client_timeout:0;
int was_detached = 0;
@@ -632,8 +632,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
}
if(unique)
mesh_state_make_unique(s);
- if(edns->opt_list) {
- s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list,
+ if(edns->opt_list_in) {
+ s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list_in,
s->s.region);
if(!s->s.edns_opts_front_in) {
return 0;
@@ -1145,11 +1145,11 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep,
if(rcode == LDNS_RCODE_SERVFAIL) {
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
rep, rcode, &r->edns, NULL, m->s.region, start_time))
- r->edns.opt_list = NULL;
+ r->edns.opt_list_inplace_cb_out = NULL;
} else {
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode,
&r->edns, NULL, m->s.region, start_time))
- r->edns.opt_list = NULL;
+ r->edns.opt_list_inplace_cb_out = NULL;
}
fptr_ok(fptr_whitelist_mesh_cb(r->cb));
(*r->cb)(r->cb_arg, rcode, r->buf, sec_status_unchecked, NULL,
@@ -1183,6 +1183,22 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep,
m->s.env->mesh->num_reply_addrs--;
}
+static inline int
+mesh_is_rpz_respip_tcponly_action(struct mesh_state const* m)
+{
+ struct respip_action_info const* respip_info = m->s.respip_action_info;
+ return respip_info == NULL
+ ? 0
+ : (respip_info->rpz_used
+ && !respip_info->rpz_disabled
+ && respip_info->action == respip_truncate);
+}
+
+static inline int
+mesh_is_udp(struct mesh_reply const* r) {
+ return r->query_reply.c->type == comm_udp;
+}
+
/**
* Send reply to mesh reply entry
* @param m: mesh state to send it for.
@@ -1201,15 +1217,17 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
struct timeval end_time;
struct timeval duration;
int secure;
- /* Copy the client's EDNS for later restore, to make sure the edns
- * compare is with the correct edns options. */
- struct edns_data edns_bak = r->edns;
/* briefly set the replylist to null in case the
* meshsendreply calls tcpreqinfo sendreply that
* comm_point_drops because of size, and then the
* null stops the mesh state remove and thus
* reply_list modification and accounting */
struct mesh_reply* rlist = m->reply_list;
+
+ /* rpz: apply actions */
+ rcode = mesh_is_udp(r) && mesh_is_rpz_respip_tcponly_action(m)
+ ? (rcode|BIT_TC) : rcode;
+
/* examine security status */
if(m->s.env->need_to_validate && (!(r->qflags&BIT_CD) ||
m->s.env->cfg->ignore_cd) && rep &&
@@ -1248,8 +1266,9 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
prev->edns.edns_present == r->edns.edns_present &&
prev->edns.bits == r->edns.bits &&
prev->edns.udp_size == r->edns.udp_size &&
- edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list)
- == 0) {
+ edns_opt_list_compare(prev->edns.opt_list_out, r->edns.opt_list_out) == 0 &&
+ edns_opt_list_compare(prev->edns.opt_list_inplace_cb_out, r->edns.opt_list_inplace_cb_out) == 0
+ ) {
/* if the previous reply is identical to this one, fix ID */
if(prev_buffer != r_buffer)
sldns_buffer_copy(r_buffer, prev_buffer);
@@ -1265,11 +1284,11 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
if(rcode == LDNS_RCODE_SERVFAIL) {
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
rep, rcode, &r->edns, &r->query_reply, m->s.region, &r->start_time))
- r->edns.opt_list = NULL;
+ r->edns.opt_list_inplace_cb_out = NULL;
} else {
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode,
&r->edns, &r->query_reply, m->s.region, &r->start_time))
- r->edns.opt_list = NULL;
+ r->edns.opt_list_inplace_cb_out = NULL;
}
error_encode(r_buffer, rcode, &m->s.qinfo, r->qid,
r->qflags, &r->edns);
@@ -1286,9 +1305,6 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
m->s.qinfo.local_alias = r->local_alias;
if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep,
LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region, &r->start_time) ||
- !apply_edns_options(&r->edns, &edns_bak,
- m->s.env->cfg, r->query_reply.c,
- m->s.region) ||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
r->qflags, r_buffer, 0, 1, m->s.env->scratch,
udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO),
@@ -1296,11 +1312,10 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
{
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region, &r->start_time))
- r->edns.opt_list = NULL;
+ r->edns.opt_list_inplace_cb_out = NULL;
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
&m->s.qinfo, r->qid, r->qflags, &r->edns);
}
- r->edns = edns_bak;
m->reply_list = NULL;
comm_point_send_reply(&r->query_reply);
m->reply_list = rlist;
@@ -1346,7 +1361,7 @@ void mesh_query_done(struct mesh_state* mstate)
}
if(mstate->s.return_rcode == LDNS_RCODE_SERVFAIL ||
(rep && FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_SERVFAIL)) {
- /* we are SERVFAILing; check for expired asnwer here */
+ /* we are SERVFAILing; check for expired answer here */
mesh_serve_expired_callback(mstate);
if((mstate->reply_list || mstate->cb_list)
&& mstate->s.env->cfg->log_servfail
@@ -1488,12 +1503,15 @@ int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
r->cb = cb;
r->cb_arg = cb_arg;
r->edns = *edns;
- if(edns->opt_list) {
- r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
- s->s.region);
- if(!r->edns.opt_list)
- return 0;
- }
+ if(edns->opt_list_in && !(r->edns.opt_list_in =
+ edns_opt_copy_region(edns->opt_list_in, s->s.region)))
+ return 0;
+ if(edns->opt_list_out && !(r->edns.opt_list_out =
+ edns_opt_copy_region(edns->opt_list_out, s->s.region)))
+ return 0;
+ if(edns->opt_list_inplace_cb_out && !(r->edns.opt_list_inplace_cb_out =
+ edns_opt_copy_region(edns->opt_list_inplace_cb_out, s->s.region)))
+ return 0;
r->qid = qid;
r->qflags = qflags;
r->next = s->cb_list;
@@ -1512,12 +1530,15 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
return 0;
r->query_reply = *rep;
r->edns = *edns;
- if(edns->opt_list) {
- r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
- s->s.region);
- if(!r->edns.opt_list)
- return 0;
- }
+ if(edns->opt_list_in && !(r->edns.opt_list_in =
+ edns_opt_copy_region(edns->opt_list_in, s->s.region)))
+ return 0;
+ if(edns->opt_list_out && !(r->edns.opt_list_out =
+ edns_opt_copy_region(edns->opt_list_out, s->s.region)))
+ return 0;
+ if(edns->opt_list_inplace_cb_out && !(r->edns.opt_list_inplace_cb_out =
+ edns_opt_copy_region(edns->opt_list_inplace_cb_out, s->s.region)))
+ return 0;
r->qid = qid;
r->qflags = qflags;
r->start_time = *s->s.env->now_tv;
@@ -1563,7 +1584,7 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
return 0;
/* the rrset is not packed, like in the cache, but it is
- * individualy allocated with an allocator from localzone. */
+ * individually allocated with an allocator from localzone. */
d = regional_alloc_zero(s->s.region, sizeof(*d));
if(!d)
return 0;
diff --git a/services/outbound_list.h b/services/outbound_list.h
index ad59e42d1929..73c137d50993 100644
--- a/services/outbound_list.h
+++ b/services/outbound_list.h
@@ -79,7 +79,7 @@ void outbound_list_init(struct outbound_list* list);
* Clear the user owner outbound list structure.
* Deletes serviced queries.
* @param list: the list structure. It is cleared, but the list struct itself
- * is callers responsability to delete.
+ * is callers responsibility to delete.
*/
void outbound_list_clear(struct outbound_list* list);
diff --git a/services/outside_network.c b/services/outside_network.c
index a3f982e72185..f4a5d0707845 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -1935,7 +1935,7 @@ select_id(struct outside_network* outnet, struct pending* pend,
LDNS_ID_SET(sldns_buffer_begin(packet), pend->id);
id_tries++;
if(id_tries == MAX_ID_RETRY) {
- pend->id=99999; /* non existant ID */
+ pend->id=99999; /* non existent ID */
log_err("failed to generate unique ID, drop msg");
return 0;
}
@@ -1962,6 +1962,7 @@ static int udp_connect_needs_log(int err)
case ENETDOWN:
# endif
case EPERM:
+ case EACCES:
if(verbosity >= VERB_ALGO)
return 1;
return 0;
@@ -2708,7 +2709,9 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns)
edns.edns_present = 1;
edns.ext_rcode = 0;
edns.edns_version = EDNS_ADVERTISED_VERSION;
- edns.opt_list = sq->opt_list;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = sq->opt_list;
+ edns.opt_list_inplace_cb_out = NULL;
if(sq->status == serviced_query_UDP_EDNS_FRAG) {
if(addr_is_ip6(&sq->addr, sq->addrlen)) {
if(EDNS_FRAG_SIZE_IP6 < EDNS_ADVERTISED_SIZE)
@@ -2731,8 +2734,8 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns)
padding_option.opt_code = LDNS_EDNS_PADDING;
padding_option.opt_len = 0;
padding_option.opt_data = NULL;
- padding_option.next = edns.opt_list;
- edns.opt_list = &padding_option;
+ padding_option.next = edns.opt_list_out;
+ edns.opt_list_out = &padding_option;
edns.padding_block_size = sq->padding_block_size;
}
attach_edns_record(buff, &edns);
diff --git a/services/rpz.c b/services/rpz.c
index 3a1ec00d7d38..d408f9383d24 100644
--- a/services/rpz.c
+++ b/services/rpz.c
@@ -50,45 +50,50 @@
#include "util/data/dname.h"
#include "util/locks.h"
#include "util/regional.h"
+#include "util/data/msgencode.h"
+#include "services/cache/dns.h"
+#include "iterator/iterator.h"
+#include "iterator/iter_delegpt.h"
+#include "daemon/worker.h"
+
+typedef struct resp_addr rpz_aclnode_type;
+
+struct matched_delegation_point {
+ uint8_t* dname;
+ size_t dname_len;
+};
/** string for RPZ action enum */
const char*
rpz_action_to_string(enum rpz_action a)
{
switch(a) {
- case RPZ_NXDOMAIN_ACTION: return "nxdomain";
- case RPZ_NODATA_ACTION: return "nodata";
- case RPZ_PASSTHRU_ACTION: return "passthru";
- case RPZ_DROP_ACTION: return "drop";
- case RPZ_TCP_ONLY_ACTION: return "tcp_only";
- case RPZ_INVALID_ACTION: return "invalid";
- case RPZ_LOCAL_DATA_ACTION: return "local_data";
- case RPZ_DISABLED_ACTION: return "disabled";
- case RPZ_CNAME_OVERRIDE_ACTION: return "cname_override";
- case RPZ_NO_OVERRIDE_ACTION: return "no_override";
+ case RPZ_NXDOMAIN_ACTION: return "rpz-nxdomain";
+ case RPZ_NODATA_ACTION: return "rpz-nodata";
+ case RPZ_PASSTHRU_ACTION: return "rpz-passthru";
+ case RPZ_DROP_ACTION: return "rpz-drop";
+ case RPZ_TCP_ONLY_ACTION: return "rpz-tcp-only";
+ case RPZ_INVALID_ACTION: return "rpz-invalid";
+ case RPZ_LOCAL_DATA_ACTION: return "rpz-local-data";
+ case RPZ_DISABLED_ACTION: return "rpz-disabled";
+ case RPZ_CNAME_OVERRIDE_ACTION: return "rpz-cname-override";
+ case RPZ_NO_OVERRIDE_ACTION: return "rpz-no-override";
+ default: return "rpz-unknown-action";
}
- return "unknown";
}
/** RPZ action enum for config string */
static enum rpz_action
rpz_config_to_action(char* a)
{
- if(strcmp(a, "nxdomain") == 0)
- return RPZ_NXDOMAIN_ACTION;
- else if(strcmp(a, "nodata") == 0)
- return RPZ_NODATA_ACTION;
- else if(strcmp(a, "passthru") == 0)
- return RPZ_PASSTHRU_ACTION;
- else if(strcmp(a, "drop") == 0)
- return RPZ_DROP_ACTION;
- else if(strcmp(a, "tcp_only") == 0)
- return RPZ_TCP_ONLY_ACTION;
- else if(strcmp(a, "cname") == 0)
- return RPZ_CNAME_OVERRIDE_ACTION;
- else if(strcmp(a, "disabled") == 0)
- return RPZ_DISABLED_ACTION;
- return RPZ_INVALID_ACTION;
+ if(strcmp(a, "nxdomain") == 0) return RPZ_NXDOMAIN_ACTION;
+ else if(strcmp(a, "nodata") == 0) return RPZ_NODATA_ACTION;
+ else if(strcmp(a, "passthru") == 0) return RPZ_PASSTHRU_ACTION;
+ else if(strcmp(a, "drop") == 0) return RPZ_DROP_ACTION;
+ else if(strcmp(a, "tcp_only") == 0) return RPZ_TCP_ONLY_ACTION;
+ else if(strcmp(a, "cname") == 0) return RPZ_CNAME_OVERRIDE_ACTION;
+ else if(strcmp(a, "disabled") == 0) return RPZ_DISABLED_ACTION;
+ else return RPZ_INVALID_ACTION;
}
/** string for RPZ trigger enum */
@@ -96,14 +101,14 @@ static const char*
rpz_trigger_to_string(enum rpz_trigger r)
{
switch(r) {
- case RPZ_QNAME_TRIGGER: return "qname";
- case RPZ_CLIENT_IP_TRIGGER: return "client_ip";
- case RPZ_RESPONSE_IP_TRIGGER: return "response_ip";
- case RPZ_NSDNAME_TRIGGER: return "nsdname";
- case RPZ_NSIP_TRIGGER: return "nsip";
- case RPZ_INVALID_TRIGGER: return "invalid";
+ case RPZ_QNAME_TRIGGER: return "rpz-qname";
+ case RPZ_CLIENT_IP_TRIGGER: return "rpz-client-ip";
+ case RPZ_RESPONSE_IP_TRIGGER: return "rpz-response-ip";
+ case RPZ_NSDNAME_TRIGGER: return "rpz-nsdname";
+ case RPZ_NSIP_TRIGGER: return "rpz-nsip";
+ case RPZ_INVALID_TRIGGER: return "rpz-invalid";
+ default: return "rpz-unknown-trigger";
}
- return "unknown";
}
/**
@@ -138,6 +143,31 @@ get_tld_label(uint8_t* dname, size_t maxdnamelen)
}
/**
+ * The RR types that are to be ignored.
+ * DNSSEC RRs at the apex, and SOA and NS are ignored.
+ */
+static int
+rpz_type_ignored(uint16_t rr_type)
+{
+ switch(rr_type) {
+ case LDNS_RR_TYPE_SOA:
+ case LDNS_RR_TYPE_NS:
+ case LDNS_RR_TYPE_DNAME:
+ /* all DNSSEC-related RRs must be ignored */
+ case LDNS_RR_TYPE_DNSKEY:
+ case LDNS_RR_TYPE_DS:
+ case LDNS_RR_TYPE_RRSIG:
+ case LDNS_RR_TYPE_NSEC:
+ case LDNS_RR_TYPE_NSEC3:
+ case LDNS_RR_TYPE_NSEC3PARAM:
+ return 1;
+ default:
+ break;
+ }
+ return 0;
+}
+
+/**
* Classify RPZ action for RR type/rdata
* @param rr_type: the RR type
* @param rdatawl: RDATA with 2 bytes length
@@ -208,15 +238,15 @@ static enum localzone_type
rpz_action_to_localzone_type(enum rpz_action a)
{
switch(a) {
- case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain;
- case RPZ_NODATA_ACTION: return local_zone_always_nodata;
- case RPZ_DROP_ACTION: return local_zone_always_deny;
- case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent;
+ case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain;
+ case RPZ_NODATA_ACTION: return local_zone_always_nodata;
+ case RPZ_DROP_ACTION: return local_zone_always_deny;
+ case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent;
case RPZ_LOCAL_DATA_ACTION: /* fallthrough */
case RPZ_CNAME_OVERRIDE_ACTION: return local_zone_redirect;
- case RPZ_INVALID_ACTION: /* fallthrough */
- case RPZ_TCP_ONLY_ACTION: /* fallthrough */
- default: return local_zone_invalid;
+ case RPZ_TCP_ONLY_ACTION: return local_zone_truncate;
+ case RPZ_INVALID_ACTION: /* fallthrough */
+ default: return local_zone_invalid;
}
}
@@ -224,15 +254,15 @@ enum respip_action
rpz_action_to_respip_action(enum rpz_action a)
{
switch(a) {
- case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain;
- case RPZ_NODATA_ACTION: return respip_always_nodata;
- case RPZ_DROP_ACTION: return respip_always_deny;
- case RPZ_PASSTHRU_ACTION: return respip_always_transparent;
- case RPZ_LOCAL_DATA_ACTION: /* fallthrough */
+ case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain;
+ case RPZ_NODATA_ACTION: return respip_always_nodata;
+ case RPZ_DROP_ACTION: return respip_always_deny;
+ case RPZ_PASSTHRU_ACTION: return respip_always_transparent;
+ case RPZ_LOCAL_DATA_ACTION: /* fallthrough */
case RPZ_CNAME_OVERRIDE_ACTION: return respip_redirect;
- case RPZ_INVALID_ACTION: /* fallthrough */
- case RPZ_TCP_ONLY_ACTION: /* fallthrough */
- default: return respip_invalid;
+ case RPZ_TCP_ONLY_ACTION: return respip_truncate;
+ case RPZ_INVALID_ACTION: /* fallthrough */
+ default: return respip_invalid;
}
}
@@ -240,14 +270,14 @@ static enum rpz_action
localzone_type_to_rpz_action(enum localzone_type lzt)
{
switch(lzt) {
- case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION;
- case local_zone_always_nodata: return RPZ_NODATA_ACTION;
- case local_zone_always_deny: return RPZ_DROP_ACTION;
- case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION;
- case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION;
- case local_zone_invalid:
- default:
- return RPZ_INVALID_ACTION;
+ case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION;
+ case local_zone_always_nodata: return RPZ_NODATA_ACTION;
+ case local_zone_always_deny: return RPZ_DROP_ACTION;
+ case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION;
+ case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION;
+ case local_zone_truncate: return RPZ_TCP_ONLY_ACTION;
+ case local_zone_invalid: /* fallthrough */
+ default: return RPZ_INVALID_ACTION;
}
}
@@ -255,14 +285,14 @@ enum rpz_action
respip_action_to_rpz_action(enum respip_action a)
{
switch(a) {
- case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION;
- case respip_always_nodata: return RPZ_NODATA_ACTION;
- case respip_always_deny: return RPZ_DROP_ACTION;
- case respip_always_transparent: return RPZ_PASSTHRU_ACTION;
- case respip_redirect: return RPZ_LOCAL_DATA_ACTION;
- case respip_invalid:
- default:
- return RPZ_INVALID_ACTION;
+ case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION;
+ case respip_always_nodata: return RPZ_NODATA_ACTION;
+ case respip_always_deny: return RPZ_DROP_ACTION;
+ case respip_always_transparent: return RPZ_PASSTHRU_ACTION;
+ case respip_redirect: return RPZ_LOCAL_DATA_ACTION;
+ case respip_truncate: return RPZ_TCP_ONLY_ACTION;
+ case respip_invalid: /* fallthrough */
+ default: return RPZ_INVALID_ACTION;
}
}
@@ -298,12 +328,55 @@ rpz_dname_to_trigger(uint8_t* dname, size_t dname_len)
return RPZ_QNAME_TRIGGER;
}
-void rpz_delete(struct rpz* r)
+static inline struct clientip_synthesized_rrset*
+rpz_clientip_synthesized_set_create(void)
+{
+ struct clientip_synthesized_rrset* set = calloc(1, sizeof(*set));
+ if(set == NULL) {
+ return NULL;
+ }
+ set->region = regional_create();
+ if(set->region == NULL) {
+ free(set);
+ return NULL;
+ }
+ addr_tree_init(&set->entries);
+ lock_rw_init(&set->lock);
+ return set;
+}
+
+static void
+rpz_clientip_synthesized_rr_delete(rbnode_type* n, void* ATTR_UNUSED(arg))
+{
+ struct clientip_synthesized_rr* r = (struct clientip_synthesized_rr*)n->key;
+ lock_rw_destroy(&r->lock);
+#ifdef THREADS_DISABLED
+ (void)r;
+#endif
+}
+
+static inline void
+rpz_clientip_synthesized_set_delete(struct clientip_synthesized_rrset* set)
+{
+ if(set == NULL) {
+ return;
+ }
+ lock_rw_destroy(&set->lock);
+ traverse_postorder(&set->entries, rpz_clientip_synthesized_rr_delete, NULL);
+ regional_destroy(set->region);
+ free(set);
+}
+
+void
+rpz_delete(struct rpz* r)
{
if(!r)
return;
local_zones_delete(r->local_zones);
+ local_zones_delete(r->nsdname_zones);
respip_set_delete(r->respip_set);
+ rpz_clientip_synthesized_set_delete(r->client_set);
+ rpz_clientip_synthesized_set_delete(r->ns_set);
regional_destroy(r->region);
free(r->taglist);
free(r->log_name);
@@ -315,13 +388,31 @@ rpz_clear(struct rpz* r)
{
/* must hold write lock on auth_zone */
local_zones_delete(r->local_zones);
+ r->local_zones = NULL;
+ local_zones_delete(r->nsdname_zones);
+ r->nsdname_zones = NULL;
respip_set_delete(r->respip_set);
+ r->respip_set = NULL;
+ rpz_clientip_synthesized_set_delete(r->client_set);
+ r->client_set = NULL;
+ rpz_clientip_synthesized_set_delete(r->ns_set);
+ r->ns_set = NULL;
if(!(r->local_zones = local_zones_create())){
return 0;
}
+ r->nsdname_zones = local_zones_create();
+ if(r->nsdname_zones == NULL) {
+ return 0;
+ }
if(!(r->respip_set = respip_set_create())) {
return 0;
}
+ if(!(r->client_set = rpz_clientip_synthesized_set_create())) {
+ return 0;
+ }
+ if(!(r->ns_set = rpz_clientip_synthesized_set_create())) {
+ return 0;
+ }
return 1;
}
@@ -331,6 +422,14 @@ rpz_finish_config(struct rpz* r)
lock_rw_wrlock(&r->respip_set->lock);
addr_tree_init_parents(&r->respip_set->ip_tree);
lock_rw_unlock(&r->respip_set->lock);
+
+ lock_rw_wrlock(&r->client_set->lock);
+ addr_tree_init_parents(&r->client_set->entries);
+ lock_rw_unlock(&r->client_set->lock);
+
+ lock_rw_wrlock(&r->ns_set->lock);
+ addr_tree_init_parents(&r->ns_set->entries);
+ lock_rw_unlock(&r->ns_set->lock);
}
/** new rrset containing CNAME override, does not yet contain a dname */
@@ -394,9 +493,26 @@ rpz_create(struct config_auth* p)
if(!(r->local_zones = local_zones_create())){
goto err;
}
+
+ r->nsdname_zones = local_zones_create();
+ if(r->local_zones == NULL){
+ goto err;
+ }
+
if(!(r->respip_set = respip_set_create())) {
goto err;
}
+
+ r->client_set = rpz_clientip_synthesized_set_create();
+ if(r->client_set == NULL) {
+ goto err;
+ }
+
+ r->ns_set = rpz_clientip_synthesized_set_create();
+ if(r->ns_set == NULL) {
+ goto err;
+ }
+
r->taglistlen = p->rpz_taglistlen;
r->taglist = memdup(p->rpz_taglist, r->taglistlen);
if(p->rpz_action_override) {
@@ -437,8 +553,14 @@ err:
if(r) {
if(r->local_zones)
local_zones_delete(r->local_zones);
+ if(r->nsdname_zones)
+ local_zones_delete(r->nsdname_zones);
if(r->respip_set)
respip_set_delete(r->respip_set);
+ if(r->client_set != NULL)
+ rpz_clientip_synthesized_set_delete(r->client_set);
+ if(r->ns_set != NULL)
+ rpz_clientip_synthesized_set_delete(r->ns_set);
if(r->taglist)
free(r->taglist);
if(r->region)
@@ -467,19 +589,17 @@ strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen,
return newdnamelen + 1; /* + 1 for root label */
}
-/** Insert RR into RPZ's local-zone */
static void
-rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
- enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
- uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
+rpz_insert_local_zones_trigger(struct local_zones* lz, uint8_t* dname,
+ size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass,
+ uint32_t ttl, uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
{
struct local_zone* z;
enum localzone_type tp = local_zone_always_transparent;
int dnamelabs = dname_count_labels(dname);
- char* rrstr;
int newzone = 0;
- if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) {
+ if(a == RPZ_INVALID_ACTION) {
char str[255+1];
if(rrtype == LDNS_RR_TYPE_SOA || rrtype == LDNS_RR_TYPE_NS ||
rrtype == LDNS_RR_TYPE_DNAME ||
@@ -499,110 +619,394 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
return;
}
- lock_rw_wrlock(&r->local_zones->lock);
+ lock_rw_wrlock(&lz->lock);
/* exact match */
- z = local_zones_find(r->local_zones, dname, dnamelen, dnamelabs,
- LDNS_RR_CLASS_IN);
- if(z && a != RPZ_LOCAL_DATA_ACTION) {
- rrstr = sldns_wire2str_rr(rr, rr_len);
- if(!rrstr) {
- log_err("malloc error while inserting RPZ qname "
- "trigger");
+ z = local_zones_find(lz, dname, dnamelen, dnamelabs, LDNS_RR_CLASS_IN);
+ if(z != NULL && a != RPZ_LOCAL_DATA_ACTION) {
+ char* rrstr = sldns_wire2str_rr(rr, rr_len);
+ if(rrstr == NULL) {
+ log_err("malloc error while inserting rpz nsdname trigger");
free(dname);
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&lz->lock);
return;
}
- verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'",
- rrstr);
+ if(rrstr[0])
+ rrstr[strlen(rrstr)-1]=0; /* remove newline */
+ verbose(VERB_ALGO, "rpz: skipping duplicate record: '%s'", rrstr);
free(rrstr);
free(dname);
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&lz->lock);
return;
}
- if(!z) {
+ if(z == NULL) {
tp = rpz_action_to_localzone_type(a);
- if(!(z = local_zones_add_zone(r->local_zones, dname, dnamelen,
- dnamelabs, rrclass, tp))) {
- log_warn("RPZ create failed");
- lock_rw_unlock(&r->local_zones->lock);
+ z = local_zones_add_zone(lz, dname, dnamelen,
+ dnamelabs, rrclass, tp);
+ if(z == NULL) {
+ log_warn("rpz: create failed");
+ lock_rw_unlock(&lz->lock);
/* dname will be free'd in failed local_zone_create() */
return;
}
newzone = 1;
}
if(a == RPZ_LOCAL_DATA_ACTION) {
- rrstr = sldns_wire2str_rr(rr, rr_len);
- if(!rrstr) {
- log_err("malloc error while inserting RPZ qname "
- "trigger");
+ char* rrstr = sldns_wire2str_rr(rr, rr_len);
+ if(rrstr == NULL) {
+ log_err("malloc error while inserting rpz nsdname trigger");
free(dname);
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&lz->lock);
return;
}
lock_rw_wrlock(&z->lock);
- local_zone_enter_rr(z, dname, dnamelen, dnamelabs,
- rrtype, rrclass, ttl, rdata, rdata_len, rrstr);
+ local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype,
+ rrclass, ttl, rdata, rdata_len, rrstr);
lock_rw_unlock(&z->lock);
free(rrstr);
}
- if(!newzone)
+ if(!newzone) {
free(dname);
- lock_rw_unlock(&r->local_zones->lock);
- return;
+ }
+ lock_rw_unlock(&lz->lock);
+}
+
+static void
+rpz_log_dname(char const* msg, uint8_t* dname, size_t dname_len)
+{
+ char buf[LDNS_MAX_DOMAINLEN+1];
+ (void)dname_len;
+ dname_str(dname, buf);
+ verbose(VERB_ALGO, "rpz: %s: <%s>", msg, buf);
+}
+
+static void
+rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
+ enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
+ uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
+{
+ if(a == RPZ_INVALID_ACTION) {
+ verbose(VERB_ALGO, "rpz: skipping invalid action");
+ free(dname);
+ return;
+ }
+
+ rpz_insert_local_zones_trigger(r->local_zones, dname, dnamelen, a, rrtype,
+ rrclass, ttl, rdata, rdata_len, rr, rr_len);
}
-/** Insert RR into RPZ's respip_set */
static int
-rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
+rpz_strip_nsdname_suffix(uint8_t* dname, size_t maxdnamelen,
+ uint8_t** stripdname, size_t* stripdnamelen)
+{
+ uint8_t* tldstart = get_tld_label(dname, maxdnamelen);
+ uint8_t swap;
+ if(tldstart == NULL) {
+ if(dname == NULL) {
+ *stripdname = NULL;
+ *stripdnamelen = 0;
+ return 0;
+ }
+ *stripdname = memdup(dname, maxdnamelen);
+ if(!*stripdname) {
+ *stripdnamelen = 0;
+ log_err("malloc failure for rpz strip suffix");
+ return 0;
+ }
+ *stripdnamelen = maxdnamelen;
+ return 1;
+ }
+ /* shorten the domain name briefly,
+ * then we allocate a new name with the correct length */
+ swap = *tldstart;
+ *tldstart = 0;
+ (void)dname_count_size_labels(dname, stripdnamelen);
+ *stripdname = memdup(dname, *stripdnamelen);
+ *tldstart = swap;
+ if(!*stripdname) {
+ *stripdnamelen = 0;
+ log_err("malloc failure for rpz strip suffix");
+ return 0;
+ }
+ return 1;
+}
+
+static void
+rpz_insert_nsdname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
{
+ uint8_t* dname_stripped = NULL;
+ size_t dnamelen_stripped = 0;
+
+ rpz_strip_nsdname_suffix(dname, dnamelen, &dname_stripped,
+ &dnamelen_stripped);
+ if(a == RPZ_INVALID_ACTION) {
+ verbose(VERB_ALGO, "rpz: skipping invalid action");
+ free(dname_stripped);
+ return;
+ }
+
+ /* dname_stripped is consumed or freed by the insert routine */
+ rpz_insert_local_zones_trigger(r->nsdname_zones, dname_stripped,
+ dnamelen_stripped, a, rrtype, rrclass, ttl, rdata, rdata_len,
+ rr, rr_len);
+}
+
+static int
+rpz_insert_ipaddr_based_trigger(struct respip_set* set, struct sockaddr_storage* addr,
+ socklen_t addrlen, int net, enum rpz_action a, uint16_t rrtype,
+ uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len,
+ uint8_t* rr, size_t rr_len)
+{
struct resp_addr* node;
- struct sockaddr_storage addr;
- socklen_t addrlen;
- int net, af;
char* rrstr;
enum respip_action respa = rpz_action_to_respip_action(a);
- if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION ||
- respa == respip_invalid) {
- char str[255+1];
- dname_str(dname, str);
- verbose(VERB_ALGO, "RPZ: respip trigger, %s skipping unsupported action: %s",
- str, rpz_action_to_string(a));
+ lock_rw_wrlock(&set->lock);
+ rrstr = sldns_wire2str_rr(rr, rr_len);
+ if(rrstr == NULL) {
+ log_err("malloc error while inserting rpz ipaddr based trigger");
+ lock_rw_unlock(&set->lock);
return 0;
}
- if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af))
+ node = respip_sockaddr_find_or_create(set, addr, addrlen, net, 1, rrstr);
+ if(node == NULL) {
+ lock_rw_unlock(&set->lock);
+ free(rrstr);
return 0;
+ }
- lock_rw_wrlock(&r->respip_set->lock);
- rrstr = sldns_wire2str_rr(rr, rr_len);
- if(!rrstr) {
- log_err("malloc error while inserting RPZ respip trigger");
- lock_rw_unlock(&r->respip_set->lock);
+ lock_rw_wrlock(&node->lock);
+ lock_rw_unlock(&set->lock);
+
+ node->action = respa;
+
+ if(a == RPZ_LOCAL_DATA_ACTION) {
+ respip_enter_rr(set->region, node, rrtype,
+ rrclass, ttl, rdata, rdata_len, rrstr, "");
+ }
+
+ lock_rw_unlock(&node->lock);
+ free(rrstr);
+ return 1;
+}
+
+static inline struct clientip_synthesized_rr*
+rpz_clientip_ensure_entry(struct clientip_synthesized_rrset* set,
+ struct sockaddr_storage* addr, socklen_t addrlen, int net)
+{
+ int insert_ok;
+ struct clientip_synthesized_rr* node =
+ (struct clientip_synthesized_rr*)addr_tree_find(&set->entries,
+ addr, addrlen, net);
+
+ if(node != NULL) { return node; }
+
+ /* node does not yet exist => allocate one */
+ node = regional_alloc_zero(set->region, sizeof(*node));
+ if(node == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+
+ lock_rw_init(&node->lock);
+ node->action = RPZ_INVALID_ACTION;
+ insert_ok = addr_tree_insert(&set->entries, &node->node,
+ addr, addrlen, net);
+ if (!insert_ok) {
+ log_warn("rpz: unexpected: unable to insert clientip address node");
+ /* we can not free the just allocated node.
+ * theoretically a memleak */
+ return NULL;
+ }
+
+ return node;
+}
+
+static void
+rpz_report_rrset_error(const char* msg, uint8_t* rr, size_t rr_len) {
+ char* rrstr = sldns_wire2str_rr(rr, rr_len);
+ if(rrstr == NULL) {
+ log_err("malloc error while inserting rpz clientip based record");
+ return;
+ }
+ log_err("rpz: unexpected: unable to insert %s: %s", msg, rrstr);
+ free(rrstr);
+}
+
+/* from localzone.c; difference is we don't have a dname */
+struct local_rrset*
+rpz_clientip_new_rrset(struct regional* region,
+ struct clientip_synthesized_rr* raddr, uint16_t rrtype, uint16_t rrclass)
+{
+ struct packed_rrset_data* pd;
+ struct local_rrset* rrset = (struct local_rrset*)
+ regional_alloc_zero(region, sizeof(*rrset));
+ if(rrset == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ rrset->next = raddr->data;
+ raddr->data = rrset;
+ rrset->rrset = (struct ub_packed_rrset_key*)
+ regional_alloc_zero(region, sizeof(*rrset->rrset));
+ if(rrset->rrset == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ rrset->rrset->entry.key = rrset->rrset;
+ pd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*pd));
+ if(pd == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ pd->trust = rrset_trust_prim_noglue;
+ pd->security = sec_status_insecure;
+ rrset->rrset->entry.data = pd;
+ rrset->rrset->rk.type = htons(rrtype);
+ rrset->rrset->rk.rrset_class = htons(rrclass);
+ rrset->rrset->rk.dname = regional_alloc_zero(region, 1);
+ if(rrset->rrset->rk.dname == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ rrset->rrset->rk.dname_len = 1;
+ return rrset;
+}
+
+static int
+rpz_clientip_enter_rr(struct regional* region, struct clientip_synthesized_rr* raddr,
+ uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata,
+ size_t rdata_len)
+{
+ struct local_rrset* rrset;
+ if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data != NULL) {
+ log_err("CNAME response-ip data can not co-exist with other "
+ "client-ip data");
return 0;
}
- if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen,
- net, 1, rrstr))) {
- lock_rw_unlock(&r->respip_set->lock);
- free(rrstr);
+
+ rrset = rpz_clientip_new_rrset(region, raddr, rrtype, rrclass);
+ if(raddr->data == NULL) {
+ return 0;
+ }
+
+ return rrset_insert_rr(region, rrset->rrset->entry.data, rdata, rdata_len, ttl, "");
+}
+
+static int
+rpz_clientip_insert_trigger_rr(struct clientip_synthesized_rrset* set, struct sockaddr_storage* addr,
+ socklen_t addrlen, int net, enum rpz_action a, uint16_t rrtype,
+ uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len,
+ uint8_t* rr, size_t rr_len)
+{
+ struct clientip_synthesized_rr* node;
+
+ lock_rw_wrlock(&set->lock);
+
+ node = rpz_clientip_ensure_entry(set, addr, addrlen, net);
+ if(node == NULL) {
+ lock_rw_unlock(&set->lock);
+ rpz_report_rrset_error("client ip address", rr, rr_len);
return 0;
}
lock_rw_wrlock(&node->lock);
- lock_rw_unlock(&r->respip_set->lock);
- node->action = respa;
+ lock_rw_unlock(&set->lock);
+ node->action = a;
if(a == RPZ_LOCAL_DATA_ACTION) {
- respip_enter_rr(r->respip_set->region, node, rrtype,
- rrclass, ttl, rdata, rdata_len, rrstr, "");
+ if(!rpz_clientip_enter_rr(set->region, node, rrtype,
+ rrclass, ttl, rdata, rdata_len)) {
+ verbose(VERB_ALGO, "rpz: unable to insert clientip rr");
+ lock_rw_unlock(&node->lock);
+ return 0;
+ }
+
}
+
lock_rw_unlock(&node->lock);
- free(rrstr);
+
return 1;
}
+static int
+rpz_insert_clientip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
+ enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
+ uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen;
+ int net, af;
+
+ if(a == RPZ_INVALID_ACTION) {
+ return 0;
+ }
+
+ if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) {
+ verbose(VERB_ALGO, "rpz: unable to parse client ip");
+ return 0;
+ }
+
+ return rpz_clientip_insert_trigger_rr(r->client_set, &addr, addrlen, net,
+ a, rrtype, rrclass, ttl, rdata, rdata_len, rr, rr_len);
+}
+
+static int
+rpz_insert_nsip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
+ enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
+ uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen;
+ int net, af;
+
+ if(a == RPZ_INVALID_ACTION) {
+ return 0;
+ }
+
+ if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) {
+ verbose(VERB_ALGO, "rpz: unable to parse ns ip");
+ return 0;
+ }
+
+ return rpz_clientip_insert_trigger_rr(r->ns_set, &addr, addrlen, net,
+ a, rrtype, rrclass, ttl, rdata, rdata_len, rr, rr_len);
+}
+
+/** Insert RR into RPZ's respip_set */
+static int
+rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
+ enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl,
+ uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len)
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen;
+ int net, af;
+
+ if(a == RPZ_INVALID_ACTION) {
+ return 0;
+ }
+
+ if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) {
+ verbose(VERB_ALGO, "rpz: unable to parse response ip");
+ return 0;
+ }
+
+ if(a == RPZ_INVALID_ACTION ||
+ rpz_action_to_respip_action(a) == respip_invalid) {
+ char str[255+1];
+ dname_str(dname, str);
+ verbose(VERB_ALGO, "RPZ: respip trigger, %s skipping unsupported action: %s",
+ str, rpz_action_to_string(a));
+ return 0;
+ }
+
+ return rpz_insert_ipaddr_based_trigger(r->respip_set, &addr, addrlen, net,
+ a, rrtype, rrclass, ttl, rdata, rdata_len, rr, rr_len);
+}
+
int
rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
@@ -614,15 +1018,19 @@ rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
enum rpz_action a;
uint8_t* policydname;
+ if(rpz_type_ignored(rr_type)) {
+ /* this rpz action is not valid, eg. this is the SOA or NS RR */
+ return 1;
+ }
if(!dname_subdomain_c(dname, azname)) {
char* dname_str = sldns_wire2str_dname(dname, dnamelen);
char* azname_str = sldns_wire2str_dname(azname, aznamelen);
if(dname_str && azname_str) {
- log_err("RPZ: name of record (%s) to insert into RPZ is not a "
+ log_err("rpz: name of record (%s) to insert into RPZ is not a "
"subdomain of the configured name of the RPZ zone (%s)",
dname_str, azname_str);
} else {
- log_err("RPZ: name of record to insert into RPZ is not a "
+ log_err("rpz: name of record to insert into RPZ is not a "
"subdomain of the configured name of the RPZ zone");
}
free(dname_str);
@@ -645,23 +1053,37 @@ rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
t = rpz_dname_to_trigger(policydname, policydnamelen);
if(t == RPZ_INVALID_TRIGGER) {
free(policydname);
- verbose(VERB_ALGO, "RPZ: skipping invalid trigger");
+ verbose(VERB_ALGO, "rpz: skipping invalid trigger");
return 1;
}
if(t == RPZ_QNAME_TRIGGER) {
+ /* policydname will be consumed, no free */
rpz_insert_qname_trigger(r, policydname, policydnamelen,
a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr,
rr_len);
- }
- else if(t == RPZ_RESPONSE_IP_TRIGGER) {
+ } else if(t == RPZ_RESPONSE_IP_TRIGGER) {
rpz_insert_response_ip_trigger(r, policydname, policydnamelen,
a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr,
rr_len);
free(policydname);
- }
- else {
+ } else if(t == RPZ_CLIENT_IP_TRIGGER) {
+ rpz_insert_clientip_trigger(r, policydname, policydnamelen,
+ a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr,
+ rr_len);
+ free(policydname);
+ } else if(t == RPZ_NSIP_TRIGGER) {
+ rpz_insert_nsip_trigger(r, policydname, policydnamelen,
+ a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr,
+ rr_len);
+ free(policydname);
+ } else if(t == RPZ_NSDNAME_TRIGGER) {
+ rpz_insert_nsdname_trigger(r, policydname, policydnamelen,
+ a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr,
+ rr_len);
free(policydname);
- verbose(VERB_ALGO, "RPZ: skipping unsupported trigger: %s",
+ } else {
+ free(policydname);
+ verbose(VERB_ALGO, "rpz: skipping unsupported trigger: %s",
rpz_trigger_to_string(t));
}
return 1;
@@ -669,18 +1091,18 @@ rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
/**
* Find RPZ local-zone by qname.
- * @param r: rpz containing local-zone tree
+ * @param zones: local-zone tree
* @param qname: qname
* @param qname_len: length of qname
* @param qclass: qclass
- * @param only_exact: if 1 only excact (non wildcard) matches are returned
+ * @param only_exact: if 1 only exact (non wildcard) matches are returned
* @param wr: get write lock for local-zone if 1, read lock if 0
* @param zones_keep_lock: if set do not release the r->local_zones lock, this
* makes the caller of this function responsible for releasing the lock.
* @return: NULL or local-zone holding rd or wr lock
*/
static struct local_zone*
-rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
+rpz_find_zone(struct local_zones* zones, uint8_t* qname, size_t qname_len, uint16_t qclass,
int only_exact, int wr, int zones_keep_lock)
{
uint8_t* ce;
@@ -689,16 +1111,19 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
uint8_t wc[LDNS_MAX_DOMAINLEN+1];
int exact;
struct local_zone* z = NULL;
+
if(wr) {
- lock_rw_wrlock(&r->local_zones->lock);
+ lock_rw_wrlock(&zones->lock);
} else {
- lock_rw_rdlock(&r->local_zones->lock);
+ lock_rw_rdlock(&zones->lock);
}
- z = local_zones_find_le(r->local_zones, qname, qname_len,
+ z = local_zones_find_le(zones, qname, qname_len,
dname_count_labels(qname),
LDNS_RR_CLASS_IN, &exact);
if(!z || (only_exact && !exact)) {
- lock_rw_unlock(&r->local_zones->lock);
+ if(!zones_keep_lock) {
+ lock_rw_unlock(&zones->lock);
+ }
return NULL;
}
if(wr) {
@@ -707,7 +1132,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
lock_rw_rdlock(&z->lock);
}
if(!zones_keep_lock) {
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&zones->lock);
}
if(exact)
@@ -721,7 +1146,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
if(!ce /* should not happen */) {
lock_rw_unlock(&z->lock);
if(zones_keep_lock) {
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&zones->lock);
}
return NULL;
}
@@ -729,7 +1154,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
if(ce_len+2 > sizeof(wc)) {
lock_rw_unlock(&z->lock);
if(zones_keep_lock) {
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&zones->lock);
}
return NULL;
}
@@ -740,15 +1165,15 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
if(!zones_keep_lock) {
if(wr) {
- lock_rw_wrlock(&r->local_zones->lock);
+ lock_rw_wrlock(&zones->lock);
} else {
- lock_rw_rdlock(&r->local_zones->lock);
+ lock_rw_rdlock(&zones->lock);
}
}
- z = local_zones_find_le(r->local_zones, wc,
+ z = local_zones_find_le(zones, wc,
ce_len+2, ce_labs+1, qclass, &exact);
if(!z || !exact) {
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&zones->lock);
return NULL;
}
if(wr) {
@@ -757,7 +1182,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
lock_rw_rdlock(&z->lock);
}
if(!zones_keep_lock) {
- lock_rw_unlock(&r->local_zones->lock);
+ lock_rw_unlock(&zones->lock);
}
return z;
}
@@ -766,7 +1191,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
* Remove RR from RPZ's local-data
* @param z: local-zone for RPZ, holding write lock
* @param policydname: dname of RR to remove
- * @param policydnamelen: lenth of policydname
+ * @param policydnamelen: length of policydname
* @param rr_type: RR type of RR to remove
* @param rdata: rdata of RR to remove
* @param rdatalen: length of rdata
@@ -852,10 +1277,10 @@ rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
{
struct local_zone* z;
int delete_zone = 1;
- z = rpz_find_zone(r, dname, dnamelen, rr_class,
+ z = rpz_find_zone(r->local_zones, dname, dnamelen, rr_class,
1 /* only exact */, 1 /* wr lock */, 1 /* keep lock*/);
if(!z) {
- verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, "
+ verbose(VERB_ALGO, "rpz: cannot remove RR from IXFR, "
"RPZ domain not found");
return;
}
@@ -891,7 +1316,7 @@ rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
lock_rw_wrlock(&r->respip_set->lock);
if(!(node = (struct resp_addr*)addr_tree_find(
&r->respip_set->ip_tree, &addr, addrlen, net))) {
- verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, "
+ verbose(VERB_ALGO, "rpz: cannot remove RR from IXFR, "
"RPZ domain not found");
lock_rw_unlock(&r->respip_set->lock);
return;
@@ -944,118 +1369,998 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen,
/** print log information for an applied RPZ policy. Based on local-zone's
* lz_inform_print().
+ * The repinfo contains the reply address. If it is NULL, the module
+ * state is used to report the first IP address (if any).
+ * The dname is used, for the applied rpz, if NULL, addrnode is used.
*/
static void
-log_rpz_apply(uint8_t* dname, enum rpz_action a, struct query_info* qinfo,
- struct comm_reply* repinfo, char* log_name)
+log_rpz_apply(char* trigger, uint8_t* dname, struct addr_tree_node* addrnode,
+ enum rpz_action a, struct query_info* qinfo,
+ struct comm_reply* repinfo, struct module_qstate* ms, char* log_name)
{
- char ip[128], txt[512];
+ char ip[128], txt[512], portstr[32];
char dnamestr[LDNS_MAX_DOMAINLEN+1];
- uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port);
- dname_str(dname, dnamestr);
- addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip));
- if(log_name)
- snprintf(txt, sizeof(txt), "RPZ applied [%s] %s %s %s@%u",
- log_name, dnamestr, rpz_action_to_string(a), ip,
- (unsigned)port);
- else
- snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u",
- dnamestr, rpz_action_to_string(a), ip, (unsigned)port);
+ uint16_t port = 0;
+ if(dname) {
+ dname_str(dname, dnamestr);
+ } else if(addrnode) {
+ char a[128];
+ addr_to_str(&addrnode->addr, addrnode->addrlen, a, sizeof(a));
+ snprintf(dnamestr, sizeof(dnamestr), "%s/%d", a, addrnode->net);
+ } else {
+ dnamestr[0]=0;
+ }
+ if(repinfo) {
+ addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip));
+ port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port);
+ } else if(ms && ms->mesh_info && ms->mesh_info->reply_list) {
+ addr_to_str(&ms->mesh_info->reply_list->query_reply.addr, ms->mesh_info->reply_list->query_reply.addrlen, ip, sizeof(ip));
+ port = ntohs(((struct sockaddr_in*)&ms->mesh_info->reply_list->query_reply.addr)->sin_port);
+ } else {
+ ip[0]=0;
+ port = 0;
+ }
+ snprintf(portstr, sizeof(portstr), "@%u", (unsigned)port);
+ snprintf(txt, sizeof(txt), "rpz: applied %s%s%s%s%s%s %s %s%s",
+ (log_name?"[":""), (log_name?log_name:""), (log_name?"] ":""),
+ (strcmp(trigger,"qname")==0?"":trigger),
+ (strcmp(trigger,"qname")==0?"":" "),
+ dnamestr, rpz_action_to_string(a),
+ (ip[0]?ip:""), (ip[0]?portstr:""));
log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass);
}
-int
-rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env,
- struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf,
- struct regional* temp, struct comm_reply* repinfo,
- uint8_t* taglist, size_t taglen, struct ub_server_stats* stats)
+static struct clientip_synthesized_rr*
+rpz_ipbased_trigger_lookup(struct clientip_synthesized_rrset* set,
+ struct sockaddr_storage* addr, socklen_t addrlen, char* triggername)
{
+ struct clientip_synthesized_rr* raddr = NULL;
+ enum rpz_action action = RPZ_INVALID_ACTION;
+
+ lock_rw_rdlock(&set->lock);
+
+ raddr = (struct clientip_synthesized_rr*)addr_tree_lookup(&set->entries,
+ addr, addrlen);
+ if(raddr != NULL) {
+ lock_rw_rdlock(&raddr->lock);
+ action = raddr->action;
+ if(verbosity >= VERB_ALGO) {
+ char ip[256], net[256];
+ addr_to_str(addr, addrlen, ip, sizeof(ip));
+ addr_to_str(&raddr->node.addr, raddr->node.addrlen,
+ net, sizeof(net));
+ verbose(VERB_ALGO, "rpz: trigger %s %s/%d on %s action=%s",
+ triggername, net, raddr->node.net, ip, rpz_action_to_string(action));
+ }
+ }
+ lock_rw_unlock(&set->lock);
+
+ return raddr;
+}
+
+static inline
+struct clientip_synthesized_rr*
+rpz_resolve_client_action_and_zone(struct auth_zones* az, struct query_info* qinfo,
+ struct comm_reply* repinfo, uint8_t* taglist, size_t taglen,
+ struct ub_server_stats* stats,
+ /* output parameters */
+ struct local_zone** z_out, struct auth_zone** a_out, struct rpz** r_out)
+{
+ struct clientip_synthesized_rr* node = NULL;
+ struct auth_zone* a = NULL;
struct rpz* r = NULL;
- struct auth_zone* a;
- int ret;
- enum localzone_type lzt;
struct local_zone* z = NULL;
- struct local_data* ld = NULL;
+
lock_rw_rdlock(&az->rpz_lock);
+
for(a = az->rpz_first; a; a = a->rpz_az_next) {
lock_rw_rdlock(&a->lock);
r = a->rpz;
- if(!r->disabled && (!r->taglist || taglist_intersect(r->taglist,
- r->taglistlen, taglist, taglen))) {
- z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len,
- qinfo->qclass, 0, 0, 0);
- if(z && r->action_override == RPZ_DISABLED_ACTION) {
- if(r->log)
- log_rpz_apply(z->name,
- r->action_override,
- qinfo, repinfo, r->log_name);
- /* TODO only register stats when stats_extended?
- * */
- stats->rpz_action[r->action_override]++;
+ if(r->disabled) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
+ if(r->taglist && !taglist_intersect(r->taglist,
+ r->taglistlen, taglist, taglen)) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
+ z = rpz_find_zone(r->local_zones, qinfo->qname, qinfo->qname_len,
+ qinfo->qclass, 0, 0, 0);
+ node = rpz_ipbased_trigger_lookup(r->client_set, &repinfo->addr, repinfo->addrlen, "clientip");
+ if((z || node) && r->action_override == RPZ_DISABLED_ACTION) {
+ if(r->log)
+ log_rpz_apply((node?"clientip":"qname"),
+ (z?z->name:NULL),
+ (node?&node->node:NULL),
+ r->action_override,
+ qinfo, repinfo, NULL, r->log_name);
+ stats->rpz_action[r->action_override]++;
+ if(z != NULL) {
lock_rw_unlock(&z->lock);
z = NULL;
}
- if(z)
- break;
+ if(node != NULL) {
+ lock_rw_unlock(&node->lock);
+ node = NULL;
+ }
}
- lock_rw_unlock(&a->lock); /* not found in this auth_zone */
+ if(z || node) {
+ break;
+ }
+ /* not found in this auth_zone */
+ lock_rw_unlock(&a->lock);
}
+
lock_rw_unlock(&az->rpz_lock);
- if(!z)
- return 0; /* not holding auth_zone.lock anymore */
- log_assert(r);
- if(r->action_override == RPZ_NO_OVERRIDE_ACTION)
- lzt = z->type;
- else
- lzt = rpz_action_to_localzone_type(r->action_override);
+ *r_out = r;
+ *a_out = a;
+ *z_out = z;
+
+ return node;
+}
+
+static inline int
+rpz_is_udp_query(struct comm_reply* repinfo) {
+ return repinfo != NULL
+ ? (repinfo->c != NULL
+ ? repinfo->c->type == comm_udp
+ : 0)
+ : 0;
+}
+
+/** encode answer consisting of 1 rrset */
+static int
+rpz_local_encode(struct module_env* env, struct query_info* qinfo,
+ struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf,
+ struct regional* temp, struct ub_packed_rrset_key* rrset, int ansec,
+ int rcode, struct ub_packed_rrset_key* soa_rrset)
+{
+ struct reply_info rep;
+ uint16_t udpsize;
+ struct ub_packed_rrset_key* rrsetlist[3];
+
+ memset(&rep, 0, sizeof(rep));
+ rep.flags = (uint16_t)((BIT_QR | BIT_AA | BIT_RA) | rcode);
+ rep.qdcount = 1;
+ rep.rrset_count = ansec;
+ rep.rrsets = rrsetlist;
+ if(ansec > 0) {
+ rep.an_numrrsets = 1;
+ rep.rrsets[0] = rrset;
+ rep.ttl = ((struct packed_rrset_data*)rrset->entry.data)->rr_ttl[0];
+ }
+ if(soa_rrset != NULL) {
+ rep.ar_numrrsets = 1;
+ rep.rrsets[rep.rrset_count] = soa_rrset;
+ rep.rrset_count ++;
+ if(rep.ttl < ((struct packed_rrset_data*)soa_rrset->entry.data)->rr_ttl[0]) {
+ rep.ttl = ((struct packed_rrset_data*)soa_rrset->entry.data)->rr_ttl[0];
+ }
+ }
+
+ udpsize = edns->udp_size;
+ edns->edns_version = EDNS_ADVERTISED_VERSION;
+ edns->udp_size = EDNS_ADVERTISED_SIZE;
+ edns->ext_rcode = 0;
+ edns->bits &= EDNS_DO;
+ if(!inplace_cb_reply_local_call(env, qinfo, NULL, &rep, rcode, edns,
+ repinfo, temp, env->now_tv) ||
+ !reply_info_answer_encode(qinfo, &rep,
+ *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2),
+ buf, 0, 0, temp, udpsize, edns, (int)(edns->bits&EDNS_DO), 0)) {
+ error_encode(buf, (LDNS_RCODE_SERVFAIL|BIT_AA), qinfo,
+ *(uint16_t*)sldns_buffer_begin(buf),
+ sldns_buffer_read_u16_at(buf, 2), edns);
+ }
+
+ return 1;
+}
+
+static struct local_rrset*
+rpz_find_synthesized_rrset(int qtype, struct clientip_synthesized_rr* data) {
+ struct local_rrset* cursor = data->data;
+ while( cursor != NULL) {
+ struct packed_rrset_key* packed_rrset = &cursor->rrset->rk;
+ if(htons(qtype) == packed_rrset->type) {
+ return cursor;
+ }
+ cursor = cursor->next;
+ }
+ return NULL;
+}
+
+/** allocate SOA record ubrrsetkey in region */
+static struct ub_packed_rrset_key*
+make_soa_ubrrset(struct auth_zone* auth_zone, struct auth_rrset* soa,
+ struct regional* temp)
+{
+ struct ub_packed_rrset_key csoa;
+ if(!soa)
+ return NULL;
+ memset(&csoa, 0, sizeof(csoa));
+ csoa.entry.key = &csoa;
+ csoa.rk.rrset_class = htons(LDNS_RR_CLASS_IN);
+ csoa.rk.type = htons(LDNS_RR_TYPE_SOA);
+ csoa.rk.flags |= PACKED_RRSET_FIXEDTTL
+ | PACKED_RRSET_RPZ;
+ csoa.rk.dname = auth_zone->name;
+ csoa.rk.dname_len = auth_zone->namelen;
+ csoa.entry.hash = rrset_key_hash(&csoa.rk);
+ csoa.entry.data = soa->data;
+ return respip_copy_rrset(&csoa, temp);
+}
+
+static void
+rpz_apply_clientip_localdata_action(struct clientip_synthesized_rr* raddr,
+ struct module_env* env, struct query_info* qinfo,
+ struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf,
+ struct regional* temp, struct auth_zone* auth_zone)
+{
+ struct local_rrset* rrset;
+ enum rpz_action action = RPZ_INVALID_ACTION;
+ struct ub_packed_rrset_key* rp = NULL;
+ struct ub_packed_rrset_key* rsoa = NULL;
+ int rcode = LDNS_RCODE_NOERROR|BIT_AA;
+ int rrset_count = 1;
+
+ /* prepare synthesized answer for client */
+ action = raddr->action;
+ if(action == RPZ_LOCAL_DATA_ACTION && raddr->data == NULL ) {
+ verbose(VERB_ALGO, "rpz: bug: local-data action but no local data");
+ return;
+ }
+
+ /* check query type / rr type */
+ rrset = rpz_find_synthesized_rrset(qinfo->qtype, raddr);
+ if(rrset == NULL) {
+ verbose(VERB_ALGO, "rpz: unable to find local-data for query");
+ rrset_count = 0;
+ goto nodata;
+ }
+
+ rp = respip_copy_rrset(rrset->rrset, temp);
+ if(!rp) {
+ verbose(VERB_ALGO, "rpz: local data action: out of memory");
+ return;
+ }
+
+ rp->rk.flags |= PACKED_RRSET_FIXEDTTL | PACKED_RRSET_RPZ;
+ rp->rk.dname = qinfo->qname;
+ rp->rk.dname_len = qinfo->qname_len;
+ rp->entry.hash = rrset_key_hash(&rp->rk);
+nodata:
+ if(auth_zone) {
+ struct auth_rrset* soa = NULL;
+ soa = auth_zone_get_soa_rrset(auth_zone);
+ if(soa) {
+ rsoa = make_soa_ubrrset(auth_zone, soa, temp);
+ if(!rsoa) {
+ verbose(VERB_ALGO, "rpz: local data action soa: out of memory");
+ return;
+ }
+ }
+ }
+
+ rpz_local_encode(env, qinfo, edns, repinfo, buf, temp, rp,
+ rrset_count, rcode, rsoa);
+}
+
+/** add additional section SOA record to the reply.
+ * Since this gets fed into the normal iterator answer creation, it
+ * gets minimal-responses applied to it, that can remove the additional SOA
+ * again. */
+static int
+rpz_add_soa(struct reply_info* rep, struct module_qstate* ms,
+ struct auth_zone* az)
+{
+ struct auth_rrset* soa = NULL;
+ struct ub_packed_rrset_key* rsoa = NULL;
+ struct ub_packed_rrset_key** prevrrsets;
+ if(!az) return 1;
+ soa = auth_zone_get_soa_rrset(az);
+ if(!soa) return 1;
+ if(!rep) return 0;
+ rsoa = make_soa_ubrrset(az, soa, ms->region);
+ if(!rsoa) return 0;
+ prevrrsets = rep->rrsets;
+ rep->rrsets = regional_alloc_zero(ms->region,
+ sizeof(*rep->rrsets)*(rep->rrset_count+1));
+ if(!rep->rrsets)
+ return 0;
+ if(prevrrsets && rep->rrset_count > 0)
+ memcpy(rep->rrsets, prevrrsets, rep->rrset_count*sizeof(*rep->rrsets));
+ rep->rrset_count++;
+ rep->ar_numrrsets++;
+ rep->rrsets[rep->rrset_count-1] = rsoa;
+ return 1;
+}
+
+static inline struct dns_msg*
+rpz_dns_msg_new(struct regional* region)
+{
+ struct dns_msg* msg =
+ (struct dns_msg*)regional_alloc(region,
+ sizeof(struct dns_msg));
+ if(msg == NULL) { return NULL; }
+ memset(msg, 0, sizeof(struct dns_msg));
+
+ return msg;
+}
+static inline struct dns_msg*
+rpz_synthesize_nodata(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms,
+ struct query_info* qinfo, struct auth_zone* az)
+{
+ struct dns_msg* msg = rpz_dns_msg_new(ms->region);
+ if(msg == NULL) { return msg; }
+ msg->qinfo = *qinfo;
+ msg->rep = construct_reply_info_base(ms->region,
+ LDNS_RCODE_NOERROR | BIT_RD | BIT_QR | BIT_AA | BIT_RA,
+ 1, /* qd */
+ 0, /* ttl */
+ 0, /* prettl */
+ 0, /* expttl */
+ 0, /* an */
+ 0, /* ns */
+ 0, /* ar */
+ 0, /* total */
+ sec_status_insecure);
+ if(msg->rep)
+ msg->rep->authoritative = 1;
+ if(!rpz_add_soa(msg->rep, ms, az))
+ return NULL;
+ return msg;
+}
+
+static inline struct dns_msg*
+rpz_synthesize_nxdomain(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms,
+ struct query_info* qinfo, struct auth_zone* az)
+{
+ struct dns_msg* msg = rpz_dns_msg_new(ms->region);
+ if(msg == NULL) { return msg; }
+ msg->qinfo = *qinfo;
+ msg->rep = construct_reply_info_base(ms->region,
+ LDNS_RCODE_NXDOMAIN | BIT_RD | BIT_QR | BIT_AA | BIT_RA,
+ 1, /* qd */
+ 0, /* ttl */
+ 0, /* prettl */
+ 0, /* expttl */
+ 0, /* an */
+ 0, /* ns */
+ 0, /* ar */
+ 0, /* total */
+ sec_status_insecure);
+ if(msg->rep)
+ msg->rep->authoritative = 1;
+ if(!rpz_add_soa(msg->rep, ms, az))
+ return NULL;
+ return msg;
+}
+
+static inline struct dns_msg*
+rpz_synthesize_localdata_from_rrset(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms,
+ struct query_info* qi, struct local_rrset* rrset, struct auth_zone* az)
+{
+ struct dns_msg* msg = NULL;
+ struct reply_info* new_reply_info;
+ struct ub_packed_rrset_key* rp;
+
+
+ msg = rpz_dns_msg_new(ms->region);
+ if(msg == NULL) { return NULL; }
+
+ new_reply_info = construct_reply_info_base(ms->region,
+ LDNS_RCODE_NOERROR | BIT_RD | BIT_QR | BIT_AA | BIT_RA,
+ 1, /* qd */
+ 0, /* ttl */
+ 0, /* prettl */
+ 0, /* expttl */
+ 1, /* an */
+ 0, /* ns */
+ 0, /* ar */
+ 1, /* total */
+ sec_status_insecure);
+ if(new_reply_info == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ new_reply_info->authoritative = 1;
+ rp = respip_copy_rrset(rrset->rrset, ms->region);
+ if(rp == NULL) {
+ log_err("out of memory");
+ return NULL;
+ }
+ rp->rk.dname = qi->qname;
+ rp->rk.dname_len = qi->qname_len;
+ /* this rrset is from the rpz data, or synthesized.
+ * It is not actually from the network, so we flag it with this
+ * flags as a fake RRset. If later the cache is used to look up
+ * rrsets, then the fake ones are not returned (if you look without
+ * the flag). For like CNAME lookups from the iterator or A, AAAA
+ * lookups for nameserver targets, it would use the without flag
+ * actual data. So that the actual network data and fake data
+ * are kept track of separately. */
+ rp->rk.flags |= PACKED_RRSET_RPZ;
+ new_reply_info->rrsets[0] = rp;
+ msg->rep = new_reply_info;
+ if(!rpz_add_soa(msg->rep, ms, az))
+ return NULL;
+ return msg;
+}
+
+static inline struct dns_msg*
+rpz_synthesize_nsip_localdata(struct rpz* r, struct module_qstate* ms,
+ struct clientip_synthesized_rr* data, struct auth_zone* az)
+{
+ struct query_info* qi = &ms->qinfo;
+ struct local_rrset* rrset;
+
+ rrset = rpz_find_synthesized_rrset(qi->qtype, data);
+ if(rrset == NULL) {
+ verbose(VERB_ALGO, "rpz: nsip: no matching local data found");
+ return NULL;
+ }
+
+ return rpz_synthesize_localdata_from_rrset(r, ms, &ms->qinfo, rrset, az);
+}
+
+/* copy'n'paste from localzone.c */
+static struct local_rrset*
+local_data_find_type(struct local_data* data, uint16_t type, int alias_ok)
+{
+ struct local_rrset* p;
+ type = htons(type);
+ for(p = data->rrsets; p; p = p->next) {
+ if(p->rrset->rk.type == type)
+ return p;
+ if(alias_ok && p->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME))
+ return p;
+ }
+ return NULL;
+}
+
+/* based on localzone.c:local_data_answer() */
+static inline struct dns_msg*
+rpz_synthesize_nsdname_localdata(struct rpz* r, struct module_qstate* ms,
+ struct local_zone* z, struct matched_delegation_point const* match,
+ struct auth_zone* az)
+{
+ struct local_data key;
+ struct local_data* ld;
+ struct local_rrset* rrset;
+
+ if(match->dname == NULL) { return NULL; }
+
+ key.node.key = &key;
+ key.name = match->dname;
+ key.namelen = match->dname_len;
+ key.namelabs = dname_count_labels(match->dname);
+
+ rpz_log_dname("nsdname local data", key.name, key.namelen);
+
+ ld = (struct local_data*)rbtree_search(&z->data, &key.node);
+ if(ld == NULL) {
+ verbose(VERB_ALGO, "rpz: nsdname: impossible: qname not found");
+ return NULL;
+ }
+
+ rrset = local_data_find_type(ld, ms->qinfo.qtype, 1);
+ if(rrset == NULL) {
+ verbose(VERB_ALGO, "rpz: nsdname: no matching local data found");
+ return NULL;
+ }
+
+ return rpz_synthesize_localdata_from_rrset(r, ms, &ms->qinfo, rrset, az);
+}
+
+/* like local_data_answer for qname triggers after a cname */
+static struct dns_msg*
+rpz_synthesize_qname_localdata_msg(struct rpz* r, struct module_qstate* ms,
+ struct query_info* qinfo, struct local_zone* z, struct auth_zone* az)
+{
+ struct local_data key;
+ struct local_data* ld;
+ struct local_rrset* rrset;
+ key.node.key = &key;
+ key.name = qinfo->qname;
+ key.namelen = qinfo->qname_len;
+ key.namelabs = dname_count_labels(qinfo->qname);
+ ld = (struct local_data*)rbtree_search(&z->data, &key.node);
+ if(ld == NULL) {
+ verbose(VERB_ALGO, "rpz: qname after cname: name not found");
+ return NULL;
+ }
+ rrset = local_data_find_type(ld, qinfo->qtype, 1);
+ if(rrset == NULL) {
+ verbose(VERB_ALGO, "rpz: qname after cname: type not found");
+ return NULL;
+ }
+ return rpz_synthesize_localdata_from_rrset(r, ms, qinfo, rrset, az);
+}
+
+static int
+rpz_synthesize_qname_localdata(struct module_env* env, struct rpz* r,
+ struct local_zone* z, enum localzone_type lzt, struct query_info* qinfo,
+ struct edns_data* edns, sldns_buffer* buf, struct regional* temp,
+ struct comm_reply* repinfo, struct ub_server_stats* stats)
+{
+ struct local_data* ld = NULL;
+ int ret = 0;
if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) {
- qinfo->local_alias =
- regional_alloc_zero(temp, sizeof(struct local_rrset));
- if(!qinfo->local_alias) {
- lock_rw_unlock(&z->lock);
- lock_rw_unlock(&a->lock);
+ qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset));
+ if(qinfo->local_alias == NULL) {
return 0; /* out of memory */
}
- qinfo->local_alias->rrset =
- regional_alloc_init(temp, r->cname_override,
- sizeof(*r->cname_override));
- if(!qinfo->local_alias->rrset) {
- lock_rw_unlock(&z->lock);
- lock_rw_unlock(&a->lock);
+ qinfo->local_alias->rrset = regional_alloc_init(temp, r->cname_override,
+ sizeof(*r->cname_override));
+ if(qinfo->local_alias->rrset == NULL) {
return 0; /* out of memory */
}
qinfo->local_alias->rrset->rk.dname = qinfo->qname;
qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len;
- if(r->log)
- log_rpz_apply(z->name, RPZ_CNAME_OVERRIDE_ACTION,
- qinfo, repinfo, r->log_name);
+ if(r->log) {
+ log_rpz_apply("qname", z->name, NULL, RPZ_CNAME_OVERRIDE_ACTION,
+ qinfo, repinfo, NULL, r->log_name);
+ }
stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++;
- lock_rw_unlock(&z->lock);
- lock_rw_unlock(&a->lock);
return 0;
}
if(lzt == local_zone_redirect && local_data_answer(z, env, qinfo,
edns, repinfo, buf, temp, dname_count_labels(qinfo->qname),
&ld, lzt, -1, NULL, 0, NULL, 0)) {
- if(r->log)
- log_rpz_apply(z->name,
+ if(r->log) {
+ log_rpz_apply("qname", z->name, NULL,
localzone_type_to_rpz_action(lzt), qinfo,
- repinfo, r->log_name);
+ repinfo, NULL, r->log_name);
+ }
stats->rpz_action[localzone_type_to_rpz_action(lzt)]++;
- lock_rw_unlock(&z->lock);
- lock_rw_unlock(&a->lock);
return !qinfo->local_alias;
}
ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp,
0 /* no local data used */, lzt);
- if(r->log)
- log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt),
- qinfo, repinfo, r->log_name);
+ if(r->log) {
+ log_rpz_apply("qname", z->name, NULL, localzone_type_to_rpz_action(lzt),
+ qinfo, repinfo, NULL, r->log_name);
+ }
stats->rpz_action[localzone_type_to_rpz_action(lzt)]++;
+ return ret;
+}
+
+struct clientip_synthesized_rr*
+rpz_delegation_point_ipbased_trigger_lookup(struct rpz* rpz, struct iter_qstate* is)
+{
+ struct delegpt_addr* cursor;
+ struct clientip_synthesized_rr* action = NULL;
+ if(is->dp == NULL) { return NULL; }
+ for(cursor = is->dp->target_list;
+ cursor != NULL;
+ cursor = cursor->next_target) {
+ if(cursor->bogus) { continue; }
+ action = rpz_ipbased_trigger_lookup(rpz->ns_set, &cursor->addr,
+ cursor->addrlen, "nsip");
+ if(action != NULL) { return action; }
+ }
+ return NULL;
+}
+
+struct dns_msg*
+rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r,
+ struct clientip_synthesized_rr* raddr, struct auth_zone* az)
+{
+ enum rpz_action action = raddr->action;
+ struct dns_msg* ret = NULL;
+
+ if(r->action_override != RPZ_NO_OVERRIDE_ACTION) {
+ verbose(VERB_ALGO, "rpz: using override action=%s (replaces=%s)",
+ rpz_action_to_string(r->action_override), rpz_action_to_string(action));
+ action = r->action_override;
+ }
+
+ if(action == RPZ_LOCAL_DATA_ACTION && raddr->data == NULL) {
+ verbose(VERB_ALGO, "rpz: bug: nsip local data action but no local data");
+ ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az);
+ goto done;
+ }
+
+ switch(action) {
+ case RPZ_NXDOMAIN_ACTION:
+ ret = rpz_synthesize_nxdomain(r, ms, &ms->qinfo, az);
+ break;
+ case RPZ_NODATA_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az);
+ break;
+ case RPZ_TCP_ONLY_ACTION:
+ /* basically a passthru here but the tcp-only will be
+ * honored before the query gets sent. */
+ ms->respip_action_info->action = respip_truncate;
+ ret = NULL;
+ break;
+ case RPZ_DROP_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az);
+ ms->is_drop = 1;
+ break;
+ case RPZ_LOCAL_DATA_ACTION:
+ ret = rpz_synthesize_nsip_localdata(r, ms, raddr, az);
+ if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); }
+ break;
+ case RPZ_PASSTHRU_ACTION:
+ ret = NULL;
+ break;
+ default:
+ verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'",
+ rpz_action_to_string(action));
+ ret = NULL;
+ }
+
+done:
+ if(r->log)
+ log_rpz_apply("nsip", NULL, &raddr->node,
+ action, &ms->qinfo, NULL, ms, r->log_name);
+ if(ms->env->worker)
+ ms->env->worker->stats.rpz_action[action]++;
+ lock_rw_unlock(&raddr->lock);
+ return ret;
+}
+
+struct dns_msg*
+rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r,
+ struct local_zone* z, struct matched_delegation_point const* match,
+ struct auth_zone* az)
+{
+ struct dns_msg* ret = NULL;
+ enum rpz_action action = localzone_type_to_rpz_action(z->type);
+
+ if(r->action_override != RPZ_NO_OVERRIDE_ACTION) {
+ verbose(VERB_ALGO, "rpz: using override action=%s (replaces=%s)",
+ rpz_action_to_string(r->action_override), rpz_action_to_string(action));
+ action = r->action_override;
+ }
+
+ switch(action) {
+ case RPZ_NXDOMAIN_ACTION:
+ ret = rpz_synthesize_nxdomain(r, ms, &ms->qinfo, az);
+ break;
+ case RPZ_NODATA_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az);
+ break;
+ case RPZ_TCP_ONLY_ACTION:
+ /* basically a passthru here but the tcp-only will be
+ * honored before the query gets sent. */
+ ms->respip_action_info->action = respip_truncate;
+ ret = NULL;
+ break;
+ case RPZ_DROP_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az);
+ ms->is_drop = 1;
+ break;
+ case RPZ_LOCAL_DATA_ACTION:
+ ret = rpz_synthesize_nsdname_localdata(r, ms, z, match, az);
+ if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); }
+ break;
+ case RPZ_PASSTHRU_ACTION:
+ ret = NULL;
+ break;
+ default:
+ verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'",
+ rpz_action_to_string(action));
+ ret = NULL;
+ }
+
+ if(r->log)
+ log_rpz_apply("nsdname", match->dname, NULL,
+ action, &ms->qinfo, NULL, ms, r->log_name);
+ if(ms->env->worker)
+ ms->env->worker->stats.rpz_action[action]++;
+ lock_rw_unlock(&z->lock);
+ return ret;
+}
+
+static struct local_zone*
+rpz_delegation_point_zone_lookup(struct delegpt* dp, struct local_zones* zones,
+ uint16_t qclass,
+ /* output parameter */
+ struct matched_delegation_point* match)
+{
+ struct delegpt_ns* nameserver;
+ struct local_zone* z = NULL;
+
+ /* the rpz specs match the nameserver names (NS records), not the
+ * name of the delegation point itself, to the nsdname triggers */
+ for(nameserver = dp->nslist;
+ nameserver != NULL;
+ nameserver = nameserver->next) {
+ z = rpz_find_zone(zones, nameserver->name, nameserver->namelen,
+ qclass, 0, 0, 0);
+ if(z != NULL) {
+ match->dname = nameserver->name;
+ match->dname_len = nameserver->namelen;
+ if(verbosity >= VERB_ALGO) {
+ char nm[255+1], zn[255+1];
+ dname_str(match->dname, nm);
+ dname_str(z->name, zn);
+ if(strcmp(nm, zn) != 0)
+ verbose(VERB_ALGO, "rpz: trigger nsdname %s on %s action=%s",
+ zn, nm, rpz_action_to_string(localzone_type_to_rpz_action(z->type)));
+ else
+ verbose(VERB_ALGO, "rpz: trigger nsdname %s action=%s",
+ nm, rpz_action_to_string(localzone_type_to_rpz_action(z->type)));
+ }
+ break;
+ }
+ }
+
+ return z;
+}
+
+struct dns_msg*
+rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate* is)
+{
+ struct auth_zones* az;
+ struct auth_zone* a;
+ struct clientip_synthesized_rr* raddr = NULL;
+ struct rpz* r = NULL;
+ struct local_zone* z = NULL;
+ struct matched_delegation_point match = {0};
+
+ if(ms->env == NULL || ms->env->auth_zones == NULL) { return 0; }
+
+ az = ms->env->auth_zones;
+
+ verbose(VERB_ALGO, "rpz: iterator module callback: have_rpz=%d", az->rpz_first != NULL);
+
+ lock_rw_rdlock(&az->rpz_lock);
+
+ /* precedence of RPZ works, loosely, like this:
+ * CNAMEs in order of the CNAME chain. rpzs in the order they are
+ * configured. In an RPZ: first client-IP addr, then QNAME, then
+ * response IP, then NSDNAME, then NSIP. Longest match first. Smallest
+ * one from a set. */
+ /* we use the precedence rules for the topics and triggers that
+ * are pertinent at this stage of the resolve processing */
+ for(a = az->rpz_first; a != NULL; a = a->rpz_az_next) {
+ lock_rw_rdlock(&a->lock);
+ r = a->rpz;
+ if(r->disabled) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
+
+ /* the nsdname has precedence over the nsip triggers */
+ z = rpz_delegation_point_zone_lookup(is->dp, r->nsdname_zones,
+ ms->qinfo.qclass, &match);
+ if(z != NULL) {
+ lock_rw_unlock(&a->lock);
+ break;
+ }
+
+ raddr = rpz_delegation_point_ipbased_trigger_lookup(r, is);
+ if(raddr != NULL) {
+ lock_rw_unlock(&a->lock);
+ break;
+ }
+ lock_rw_unlock(&a->lock);
+ }
+
+ lock_rw_unlock(&az->rpz_lock);
+
+ if(raddr == NULL && z == NULL) { return NULL; }
+ else if(raddr != NULL) {
+ if(z) {
+ lock_rw_unlock(&z->lock);
+ }
+ return rpz_apply_nsip_trigger(ms, r, raddr, a);
+ } else if(z != NULL) {
+ if(raddr) {
+ lock_rw_unlock(&raddr->lock);
+ }
+ return rpz_apply_nsdname_trigger(ms, r, z, &match, a);
+ } else { return NULL; }
+}
+
+struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms,
+ struct iter_qstate* is)
+{
+ struct auth_zones* az;
+ struct auth_zone* a = NULL;
+ struct rpz* r = NULL;
+ struct local_zone* z = NULL;
+ enum localzone_type lzt;
+ struct dns_msg* ret = NULL;
+
+ if(ms->env == NULL || ms->env->auth_zones == NULL) { return 0; }
+ az = ms->env->auth_zones;
+
+ lock_rw_rdlock(&az->rpz_lock);
+
+ for(a = az->rpz_first; a; a = a->rpz_az_next) {
+ lock_rw_rdlock(&a->lock);
+ r = a->rpz;
+ if(r->disabled) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
+ z = rpz_find_zone(r->local_zones, is->qchase.qname,
+ is->qchase.qname_len, is->qchase.qclass, 0, 0, 0);
+ if(z && r->action_override == RPZ_DISABLED_ACTION) {
+ if(r->log)
+ log_rpz_apply("qname", z->name, NULL,
+ r->action_override,
+ &ms->qinfo, NULL, ms, r->log_name);
+ if(ms->env->worker)
+ ms->env->worker->stats.rpz_action[r->action_override]++;
+ lock_rw_unlock(&z->lock);
+ z = NULL;
+ }
+ if(z) {
+ break;
+ }
+ /* not found in this auth_zone */
+ lock_rw_unlock(&a->lock);
+ }
+ lock_rw_unlock(&az->rpz_lock);
+
+ if(z == NULL)
+ return NULL;
+ if(r->action_override == RPZ_NO_OVERRIDE_ACTION) {
+ lzt = z->type;
+ } else {
+ lzt = rpz_action_to_localzone_type(r->action_override);
+ }
+
+ if(verbosity >= VERB_ALGO) {
+ char nm[255+1], zn[255+1];
+ dname_str(is->qchase.qname, nm);
+ dname_str(z->name, zn);
+ if(strcmp(zn, nm) != 0)
+ verbose(VERB_ALGO, "rpz: qname trigger after cname %s on %s, with action=%s",
+ zn, nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt)));
+ else
+ verbose(VERB_ALGO, "rpz: qname trigger after cname %s, with action=%s",
+ nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt)));
+ }
+ switch(localzone_type_to_rpz_action(lzt)) {
+ case RPZ_NXDOMAIN_ACTION:
+ ret = rpz_synthesize_nxdomain(r, ms, &is->qchase, a);
+ break;
+ case RPZ_NODATA_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &is->qchase, a);
+ break;
+ case RPZ_TCP_ONLY_ACTION:
+ /* basically a passthru here but the tcp-only will be
+ * honored before the query gets sent. */
+ ms->respip_action_info->action = respip_truncate;
+ ret = NULL;
+ break;
+ case RPZ_DROP_ACTION:
+ ret = rpz_synthesize_nodata(r, ms, &is->qchase, a);
+ ms->is_drop = 1;
+ break;
+ case RPZ_LOCAL_DATA_ACTION:
+ ret = rpz_synthesize_qname_localdata_msg(r, ms, &is->qchase, z, a);
+ if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, &is->qchase, a); }
+ break;
+ case RPZ_PASSTHRU_ACTION:
+ ret = NULL;
+ break;
+ default:
+ verbose(VERB_ALGO, "rpz: qname trigger after cname: bug: unhandled or invalid action: '%s'",
+ rpz_action_to_string(localzone_type_to_rpz_action(lzt)));
+ ret = NULL;
+ }
+ lock_rw_unlock(&z->lock);
+ lock_rw_unlock(&a->lock);
+ return ret;
+}
+
+static int
+rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env,
+ struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo,
+ uint8_t* taglist, size_t taglen, struct ub_server_stats* stats,
+ sldns_buffer* buf, struct regional* temp,
+ /* output parameters */
+ struct local_zone** z_out, struct auth_zone** a_out, struct rpz** r_out)
+{
+ int ret = 0;
+ enum rpz_action client_action;
+ struct clientip_synthesized_rr* node = rpz_resolve_client_action_and_zone(
+ az, qinfo, repinfo, taglist, taglen, stats, z_out, a_out, r_out);
+
+ client_action = ((node == NULL) ? RPZ_INVALID_ACTION : node->action);
+
+ if(*z_out == NULL || (client_action != RPZ_INVALID_ACTION &&
+ client_action != RPZ_PASSTHRU_ACTION)) {
+ if(client_action == RPZ_PASSTHRU_ACTION
+ || client_action == RPZ_INVALID_ACTION
+ || (client_action == RPZ_TCP_ONLY_ACTION
+ && !rpz_is_udp_query(repinfo))) {
+ ret = 0;
+ goto done;
+ }
+ stats->rpz_action[client_action]++;
+ if(client_action == RPZ_LOCAL_DATA_ACTION) {
+ rpz_apply_clientip_localdata_action(node, env, qinfo,
+ edns, repinfo, buf, temp, *a_out);
+ } else {
+ if(*r_out && (*r_out)->log)
+ log_rpz_apply(
+ (node?"clientip":"qname"),
+ ((*z_out)?(*z_out)->name:NULL),
+ (node?&node->node:NULL),
+ client_action, qinfo, repinfo, NULL,
+ (*r_out)->log_name);
+ local_zones_zone_answer(*z_out /*likely NULL, no zone*/, env, qinfo, edns,
+ repinfo, buf, temp, 0 /* no local data used */,
+ rpz_action_to_localzone_type(client_action));
+ }
+ ret = 1;
+ goto done;
+ }
+ ret = -1;
+done:
+ if(node != NULL) {
+ lock_rw_unlock(&node->lock);
+ }
+ return ret;
+}
+
+int
+rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
+ struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf,
+ struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist,
+ size_t taglen, struct ub_server_stats* stats)
+{
+ struct rpz* r = NULL;
+ struct auth_zone* a = NULL;
+ struct local_zone* z = NULL;
+ int ret;
+ enum localzone_type lzt;
+
+ int clientip_trigger = rpz_apply_maybe_clientip_trigger(az, env, qinfo,
+ edns, repinfo, taglist, taglen, stats, buf, temp, &z, &a, &r);
+ if(clientip_trigger >= 0) {
+ if(a) {
+ lock_rw_unlock(&a->lock);
+ }
+ if(z) {
+ lock_rw_unlock(&z->lock);
+ }
+ return clientip_trigger;
+ }
+
+ if(z == NULL) {
+ if(a) {
+ lock_rw_unlock(&a->lock);
+ }
+ return 0;
+ }
+
+ log_assert(r);
+
+ if(r->action_override == RPZ_NO_OVERRIDE_ACTION) {
+ lzt = z->type;
+ } else {
+ lzt = rpz_action_to_localzone_type(r->action_override);
+ }
+
+ if(verbosity >= VERB_ALGO) {
+ char nm[255+1], zn[255+1];
+ dname_str(qinfo->qname, nm);
+ dname_str(z->name, zn);
+ if(strcmp(zn, nm) != 0)
+ verbose(VERB_ALGO, "rpz: qname trigger %s on %s with action=%s",
+ zn, nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt)));
+ else
+ verbose(VERB_ALGO, "rpz: qname trigger %s with action=%s",
+ nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt)));
+ }
+
+ ret = rpz_synthesize_qname_localdata(env, r, z, lzt, qinfo, edns, buf, temp,
+ repinfo, stats);
+
lock_rw_unlock(&z->lock);
lock_rw_unlock(&a->lock);
diff --git a/services/rpz.h b/services/rpz.h
index d5996a6cfa26..691475743606 100644
--- a/services/rpz.h
+++ b/services/rpz.h
@@ -50,6 +50,7 @@
#include "sldns/sbuffer.h"
#include "daemon/stats.h"
#include "respip/respip.h"
+struct iter_qstate;
/**
* RPZ triggers, only the QNAME trigger is currently supported in Unbound.
@@ -83,6 +84,27 @@ enum rpz_action {
RPZ_CNAME_OVERRIDE_ACTION, /* RPZ CNAME action override*/
};
+struct clientip_synthesized_rrset{
+ struct regional* region;
+ struct rbtree_type entries;
+ lock_rw_type lock; /* lock on the respip tree */
+};
+
+struct clientip_synthesized_rr {
+ /** node in address tree */
+ struct addr_tree_node node;
+ /** lock on the node item */
+ lock_rw_type lock;
+ /** tag bitlist */
+ uint8_t* taglist;
+ /** length of the taglist (in bytes) */
+ size_t taglen;
+ /** action for this address span */
+ enum rpz_action action;
+ /** "local data" for this node */
+ struct local_rrset* data;
+};
+
/**
* RPZ containing policies. Pointed to from corresponding auth-zone. Part of a
* linked list to keep configuration order. Iterating or changing the linked
@@ -92,6 +114,9 @@ enum rpz_action {
struct rpz {
struct local_zones* local_zones;
struct respip_set* respip_set;
+ struct clientip_synthesized_rrset* client_set;
+ struct clientip_synthesized_rrset* ns_set;
+ struct local_zones* nsdname_zones;
uint8_t* taglist;
size_t taglistlen;
enum rpz_action action_override;
@@ -147,16 +172,39 @@ void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname,
* @param temp: scratchpad
* @param repinfo: reply info
* @param taglist: taglist to lookup.
- * @param taglen: lenth of taglist.
+ * @param taglen: length of taglist.
* @param stats: worker stats struct
* @return: 1 if client answer is ready, 0 to continue resolving
*/
-int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env,
+int rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf,
struct regional* temp, struct comm_reply* repinfo,
uint8_t* taglist, size_t taglen, struct ub_server_stats* stats);
/**
+ * Callback to process when the iterator module is about to send queries.
+ * Checks for nsip and nsdname triggers.
+ * @param qstate: the query state.
+ * @param iq: iterator module query state.
+ * @return NULL if nothing is done. Or a new message with the contents from
+ * the rpz, based on the delegation point. It is allocated in the
+ * qstate region.
+ */
+struct dns_msg* rpz_callback_from_iterator_module(struct module_qstate* qstate,
+ struct iter_qstate* iq);
+
+/**
+ * Callback to process when the iterator module has followed a cname.
+ * There can be a qname trigger for the new query name.
+ * @param qstate: the query state.
+ * @param iq: iterator module query state.
+ * @return NULL if nothing is done. Or a new message with the contents from
+ * the rpz, based on the iq.qchase. It is allocated in the qstate region.
+ */
+struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* qstate,
+ struct iter_qstate* iq);
+
+/**
* Delete RPZ
* @param r: RPZ struct to delete
*/
@@ -186,7 +234,7 @@ enum rpz_action
respip_action_to_rpz_action(enum respip_action a);
/**
- * Prepare RPZ after procesing feed content.
+ * Prepare RPZ after processing feed content.
* @param r: RPZ to use
*/
void rpz_finish_config(struct rpz* r);
diff --git a/sldns/parseutil.h b/sldns/parseutil.h
index 74d7c727571a..208fd2fbca8b 100644
--- a/sldns/parseutil.h
+++ b/sldns/parseutil.h
@@ -58,7 +58,7 @@ time_t sldns_mktime_from_utc(const struct tm *tm);
* The function interprets time as the number of seconds since epoch
* with respect to now using serial arithmetics (rfc1982).
* That number of seconds is then converted to broken-out time information.
- * This is especially usefull when converting the inception and expiration
+ * This is especially useful when converting the inception and expiration
* fields of RRSIG records.
*
* \param[in] time number of seconds since epoch (midnight, January 1st, 1970)
diff --git a/sldns/str2wire.c b/sldns/str2wire.c
index fbd615cbfd7d..ddaccd1b292d 100644
--- a/sldns/str2wire.c
+++ b/sldns/str2wire.c
@@ -1427,7 +1427,7 @@ sldns_str2wire_svcbparam_parse_next_unescaped_comma(const char *val)
}
/* The source is already properly unescaped, this double unescaping is purely to allow for
- * comma's in comma seperated alpn lists.
+ * comma's in comma separated alpn lists.
*
* In draft-ietf-dnsop-svcb-https-06 Section 7:
* To enable simpler parsing, this SvcParamValue MUST NOT contain escape sequences.
@@ -1565,7 +1565,7 @@ sldns_str2wire_svcparam_value(const char *key, size_t key_len,
return LDNS_WIREPARSE_ERR_GENERAL;
}
-int sldns_str2wire_svcparam_buf(const char* str, uint8_t* rd, size_t* rd_len)
+static int sldns_str2wire_svcparam_buf(const char* str, uint8_t* rd, size_t* rd_len)
{
const char* eq_pos;
char unescaped_val[LDNS_MAX_RDFLEN];
diff --git a/sldns/wire2str.h b/sldns/wire2str.h
index b1ad459e3780..548c66300d92 100644
--- a/sldns/wire2str.h
+++ b/sldns/wire2str.h
@@ -59,7 +59,7 @@ char* sldns_wire2str_pkt(uint8_t* data, size_t len);
char* sldns_wire2str_rr(uint8_t* rr, size_t len);
/**
- * Conver wire dname to a string.
+ * Convert wire dname to a string.
* @param dname: the dname in uncompressed wireformat.
* @param dname_len: length of the dname.
* @return string or NULL on failure.
diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c
index 3e6fc6e6fca8..3bc25a10caaf 100644
--- a/smallapp/unbound-anchor.c
+++ b/smallapp/unbound-anchor.c
@@ -2044,13 +2044,13 @@ write_builtin_anchor(const char* file)
const char* builtin_root_anchor = get_builtin_ds();
FILE* out = fopen(file, "w");
if(!out) {
- if(verb) printf("%s: %s\n", file, strerror(errno));
- if(verb) printf(" could not write builtin anchor\n");
+ printf("could not write builtin anchor, to file %s: %s\n",
+ file, strerror(errno));
return;
}
if(!fwrite(builtin_root_anchor, strlen(builtin_root_anchor), 1, out)) {
- if(verb) printf("%s: %s\n", file, strerror(errno));
- if(verb) printf(" could not complete write builtin anchor\n");
+ printf("could not complete write builtin anchor, to file %s: %s\n",
+ file, strerror(errno));
}
fclose(out);
}
diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c
index 5d1d67684556..34c7d11bca0a 100644
--- a/smallapp/unbound-checkconf.c
+++ b/smallapp/unbound-checkconf.c
@@ -54,6 +54,7 @@
#include "iterator/iter_hints.h"
#include "validator/validator.h"
#include "services/localzone.h"
+#include "services/listen_dnsport.h"
#include "services/view.h"
#include "services/authzone.h"
#include "respip/respip.h"
@@ -334,19 +335,64 @@ interfacechecks(struct config_file* cfg)
int d;
struct sockaddr_storage a;
socklen_t alen;
- int i, j;
+ int i, j, i2, j2;
+ char*** resif = NULL;
+ int* num_resif = NULL;
+
+ if(cfg->num_ifs != 0) {
+ resif = (char***)calloc(cfg->num_ifs, sizeof(char**));
+ if(!resif) fatal_exit("malloc failure");
+ num_resif = (int*)calloc(cfg->num_ifs, sizeof(int));
+ if(!num_resif) fatal_exit("malloc failure");
+ }
for(i=0; i<cfg->num_ifs; i++) {
- if(!extstrtoaddr(cfg->ifs[i], &a, &alen)) {
- fatal_exit("cannot parse interface specified as '%s'",
- cfg->ifs[i]);
- }
- for(j=0; j<cfg->num_ifs; j++) {
- if(i!=j && strcmp(cfg->ifs[i], cfg->ifs[j])==0)
+ /* search for duplicates in IP or ifname arguments */
+ for(i2=0; i2<i; i2++) {
+ if(strcmp(cfg->ifs[i], cfg->ifs[i2]) == 0) {
fatal_exit("interface: %s present twice, "
"cannot bind same ports twice.",
cfg->ifs[i]);
+ }
}
+ if(!resolve_interface_names(&cfg->ifs[i], 1, NULL, &resif[i],
+ &num_resif[i])) {
+ fatal_exit("could not resolve interface names, for %s",
+ cfg->ifs[i]);
+ }
+ /* search for duplicates in the returned addresses */
+ for(j=0; j<num_resif[i]; j++) {
+ if(!extstrtoaddr(resif[i][j], &a, &alen)) {
+ if(strcmp(cfg->ifs[i], resif[i][j]) != 0)
+ fatal_exit("cannot parse interface address '%s' from the interface specified as '%s'",
+ resif[i][j], cfg->ifs[i]);
+ else
+ fatal_exit("cannot parse interface specified as '%s'",
+ cfg->ifs[i]);
+ }
+ for(i2=0; i2<i; i2++) {
+ for(j2=0; j2<num_resif[i2]; j2++) {
+ if(strcmp(resif[i][j], resif[i2][j2])
+ == 0) {
+ char info1[1024], info2[1024];
+ if(strcmp(cfg->ifs[i], resif[i][j]) != 0)
+ snprintf(info1, sizeof(info1), "address %s from interface: %s", resif[i][j], cfg->ifs[i]);
+ else snprintf(info1, sizeof(info1), "interface: %s", cfg->ifs[i]);
+ if(strcmp(cfg->ifs[i2], resif[i2][j2]) != 0)
+ snprintf(info2, sizeof(info2), "address %s from interface: %s", resif[i2][j2], cfg->ifs[i2]);
+ else snprintf(info2, sizeof(info2), "interface: %s", cfg->ifs[i2]);
+ fatal_exit("%s present twice, cannot bind the same ports twice. The first entry is %s and the second is %s", resif[i][j], info2, info1);
+ }
+ }
+ }
+ }
+ }
+
+ for(i=0; i<cfg->num_ifs; i++) {
+ config_del_strarray(resif[i], num_resif[i]);
}
+ free(resif);
+ free(num_resif);
+
for(i=0; i<cfg->num_out_ifs; i++) {
if(!ipstrtoaddr(cfg->out_ifs[i], UNBOUND_DNS_PORT, &a, &alen) &&
!netblockstrtoaddr(cfg->out_ifs[i], UNBOUND_DNS_PORT, &a, &alen, &d)) {
@@ -909,9 +955,9 @@ int main(int argc, char* argv[])
const char* f;
const char* opt = NULL;
const char* cfgfile = CONFIGFILE;
+ checklock_start();
log_ident_set("unbound-checkconf");
log_init(NULL, 0, NULL);
- checklock_start();
#ifdef USE_WINSOCK
/* use registry config file in preference to compiletime location */
if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile")))
diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c
index a3df25795843..c7c38276f006 100644
--- a/smallapp/unbound-control.c
+++ b/smallapp/unbound-control.c
@@ -944,9 +944,9 @@ int main(int argc, char* argv[])
extern int check_locking_order;
check_locking_order = 0;
#endif /* USE_THREAD_DEBUG */
+ checklock_start();
log_ident_set("unbound-control");
log_init(NULL, 0, NULL);
- checklock_start();
#ifdef USE_WINSOCK
/* use registry config file in preference to compiletime location */
if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile")))
diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c
index 473e32a607f8..78e773938c88 100644
--- a/smallapp/worker_cb.c
+++ b/smallapp/worker_cb.c
@@ -99,7 +99,7 @@ struct outbound_entry* worker_send_query(
int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
- size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
+ size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream),
char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
{
log_assert(0);
@@ -131,7 +131,7 @@ struct outbound_entry* libworker_send_query(
int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
- size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
+ size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream),
char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
{
log_assert(0);
diff --git a/testcode/asynclook.c b/testcode/asynclook.c
index 660f72a7df8c..fffd14ed598a 100644
--- a/testcode/asynclook.c
+++ b/testcode/asynclook.c
@@ -406,10 +406,10 @@ int main(int argc, char** argv)
struct lookinfo* lookups;
int i, r, cancel=0, blocking=0, ext=0;
+ checklock_start();
/* init log now because solaris thr_key_create() is not threadsafe */
log_init(0,0,0);
/* lock debug start (if any) */
- checklock_start();
/* create context */
ctx = ub_ctx_create();
diff --git a/testcode/dohclient.c b/testcode/dohclient.c
index 93d84a83550d..d35f5a82c662 100644
--- a/testcode/dohclient.c
+++ b/testcode/dohclient.c
@@ -358,7 +358,7 @@ static int http2_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session),
}
if(sldns_buffer_remaining(h2_stream->buf) < len) {
- log_err("received data chunck does not fit into buffer");
+ log_err("received data chunk does not fit into buffer");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
@@ -531,7 +531,7 @@ run(struct http2_session* h2_session, int port, int no_tls, int count, char** q)
h2_session->block_select = 1;
- /* hande query */
+ /* handle query */
for(i=0; i<count; i+=3) {
buf = make_query(q[i], q[i+1], q[i+2]);
submit_query(h2_session, buf);
@@ -571,8 +571,8 @@ int main(int argc, char** argv)
return 1;
}
#endif
- log_init(0, 0, 0);
checklock_start();
+ log_init(0, 0, 0);
h2_session = http2_session_create();
if(!h2_session) fatal_exit("out of memory");
diff --git a/testcode/fake_event.c b/testcode/fake_event.c
index 5f81b9eb808c..6a8245d4a6ab 100644
--- a/testcode/fake_event.c
+++ b/testcode/fake_event.c
@@ -1244,7 +1244,9 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
client_string_addr->string_len,
client_string_addr->string, qstate->region);
}
- edns.opt_list = qstate->edns_opts_back_out;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = qstate->edns_opts_back_out;
+ edns.opt_list_inplace_cb_out = NULL;
attach_edns_record(pend->buffer, &edns);
}
memcpy(&pend->addr, addr, addrlen);
diff --git a/testcode/lock_verify.c b/testcode/lock_verify.c
index 666a7029d64d..b0cffe292ae1 100644
--- a/testcode/lock_verify.c
+++ b/testcode/lock_verify.c
@@ -387,6 +387,37 @@ static void check_order(rbtree_type* all_locks)
fprintf(stderr, "\n");
}
+/** delete lock ref */
+static void dellockref(rbnode_type* node, void* ATTR_UNUSED(arg))
+{
+ struct lock_ref* o = (struct lock_ref*)node;
+ if(!o) return;
+ free(o->file);
+ free(o);
+}
+
+/** delete lock node */
+static void delnode(rbnode_type* node, void* ATTR_UNUSED(arg))
+{
+ struct order_lock* o = (struct order_lock*)node;
+ if(!o) return;
+ free(o->create_file);
+ if(o->smaller) {
+ traverse_postorder(o->smaller, &dellockref, NULL);
+ free(o->smaller);
+ }
+ free(o);
+}
+
+/** delete allocated memory */
+static void locks_free(rbtree_type* all_locks)
+{
+ if(!all_locks)
+ return;
+ traverse_postorder(all_locks, &delnode, NULL);
+ free(all_locks);
+}
+
/** main program to verify all traces passed */
int
main(int argc, char* argv[])
@@ -403,6 +434,7 @@ main(int argc, char* argv[])
usage();
return 1;
}
+ checklock_start();
log_init(NULL, 0, NULL);
log_ident_set("lock-verify");
/* init */
@@ -421,6 +453,7 @@ main(int argc, char* argv[])
printf("checked %d locks in %d seconds with %d errors.\n",
(int)all_locks->count, (int)(time(NULL)-starttime),
errors_detected);
+ locks_free(all_locks);
if(errors_detected) return 1;
return 0;
}
diff --git a/testcode/perf.c b/testcode/perf.c
index b13eca6d3946..55d6483c7cf9 100644
--- a/testcode/perf.c
+++ b/testcode/perf.c
@@ -575,9 +575,9 @@ int main(int argc, char* argv[])
memset(&info, 0, sizeof(info));
info.io_num = 16;
+ checklock_start();
log_init(NULL, 0, NULL);
log_ident_set("perf");
- checklock_start();
#ifdef USE_WINSOCK
if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0)
fatal_exit("WSAStartup failed: %s", wsa_strerror(r));
diff --git a/testcode/petal.c b/testcode/petal.c
index a1a37615518a..6ea3c34cdaa5 100644
--- a/testcode/petal.c
+++ b/testcode/petal.c
@@ -220,8 +220,11 @@ read_http_headers(SSL* ssl, char* file, size_t flen, char* host, size_t hlen,
host[0] = 0;
while(read_ssl_line(ssl, buf, sizeof(buf))) {
if(verb>=2) printf("read: %s\n", buf);
- if(buf[0] == 0)
+ if(buf[0] == 0) {
+ int e = ERR_peek_error();
+ printf("error string: %s\n", ERR_reason_error_string(e));
return 1;
+ }
if(!process_one_header(buf, file, flen, host, hlen, vs))
return 0;
}
@@ -241,8 +244,11 @@ setup_ctx(char* key, char* cert)
#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL
SSL_CTX_set_security_level(ctx, 0); /* for keys in tests */
#endif
- if(!SSL_CTX_use_certificate_chain_file(ctx, cert))
+ if(!SSL_CTX_use_certificate_chain_file(ctx, cert)) {
+ int e = ERR_peek_error();
+ printf("error string: %s\n", ERR_reason_error_string(e));
print_exit("cannot read cert");
+ }
if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM))
print_exit("cannot read key");
if(!SSL_CTX_check_private_key(ctx))
diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c
index 2bd076ee5db2..ecc83c1cff30 100644
--- a/testcode/streamtcp.c
+++ b/testcode/streamtcp.c
@@ -437,8 +437,8 @@ int main(int argc, char** argv)
#endif
/* lock debug start (if any) */
- log_init(0, 0, 0);
checklock_start();
+ log_init(0, 0, 0);
#ifdef SIGPIPE
if(signal(SIGPIPE, &sigh) == SIG_ERR) {
diff --git a/testcode/testbound.c b/testcode/testbound.c
index c92900142870..ec627cc8deb1 100644
--- a/testcode/testbound.c
+++ b/testcode/testbound.c
@@ -374,6 +374,7 @@ main(int argc, char* argv[])
(void)unsetenv("NOTIFY_SOCKET");
#endif /* HAVE_SYSTEMD */
+ checklock_start();
log_init(NULL, 0, NULL);
/* determine commandline options for the daemon */
pass_argc = 1;
@@ -604,3 +605,13 @@ int squelch_err_ssl_handshake(unsigned long ATTR_UNUSED(err))
{
return 0;
}
+
+void listen_setup_locks(void)
+{
+ /* nothing */
+}
+
+void listen_desetup_locks(void)
+{
+ /* nothing */
+}
diff --git a/testcode/unitmain.c b/testcode/unitmain.c
index c18be7be3a08..16aa88450210 100644
--- a/testcode/unitmain.c
+++ b/testcode/unitmain.c
@@ -861,6 +861,7 @@ void ecdsa_evp_workaround_init(void);
int
main(int argc, char* argv[])
{
+ checklock_start();
log_init(NULL, 0, NULL);
if(argc != 1) {
printf("usage: %s\n", argv[0]);
@@ -888,7 +889,6 @@ main(int argc, char* argv[])
if(NSS_NoDB_Init(".") != SECSuccess)
fatal_exit("could not init NSS");
#endif /* HAVE_SSL or HAVE_NSS*/
- checklock_start();
authzone_test();
neg_test();
rnd_test();
diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup
index 2492f47b4b5f..ff205be1963f 100755
--- a/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup
+++ b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup
@@ -81,7 +81,7 @@ while test $# -ne 0; do
echo " -d dir use directory to store keys and certificates."
echo " default: $DESTDIR"
echo "please run this command using the same user id that the "
- echo "unboun daemon uses, it needs read privileges."
+ echo "unbound daemon uses, it needs read privileges."
exit 1
;;
esac
diff --git a/testdata/auth_xfr_ixfrmismatch.rpl b/testdata/auth_xfr_ixfrmismatch.rpl
index b1d71b474b53..612bca47da5b 100644
--- a/testdata/auth_xfr_ixfrmismatch.rpl
+++ b/testdata/auth_xfr_ixfrmismatch.rpl
@@ -182,7 +182,7 @@ example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 360
example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
www.example.com. IN A 1.2.3.4
mail.example.com. 3600 IN A 1.2.3.6
-; this is the delete of the nonexistant entry
+; this is the delete of the nonexistent entry
nonexist.example.com. 3600 IN A 1.2.3.4
example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600
EXTRA_PACKET
diff --git a/testdata/auth_zonemd_xfr_chain_keyinxfr.rpl b/testdata/auth_zonemd_xfr_chain_keyinxfr.rpl
new file mode 100644
index 000000000000..2feec88c075a
--- /dev/null
+++ b/testdata/auth_zonemd_xfr_chain_keyinxfr.rpl
@@ -0,0 +1,315 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c"
+ trust-anchor-signaling: no
+ val-override-date: 20201020135527
+
+auth-zone:
+ name: "example.com."
+ ## zonefile (or none).
+ ## zonefile: "example.com.zone"
+ ## master by IP address or hostname
+ ## can list multiple masters, each on one line.
+ ## master:
+ master: 1.2.3.44
+ ## url for http fetch
+ ## url:
+ ## queries from downstream clients get authoritative answers.
+ ## for-downstream: yes
+
+ ## The for-downstream and fallback are disabled, the key cannot be
+ ## retrieved by DNS lookup, it is in the xfr itself.
+ ## only after the zone is loaded can it be looked up.
+ for-downstream: no
+ ## queries are used to fetch authoritative answers from this zone,
+ ## instead of unbound itself sending queries there.
+ ## for-upstream: yes
+ for-upstream: yes
+ ## on failures with for-upstream, fallback to sending queries to
+ ## the authority servers
+ ## fallback-enabled: no
+ fallback-enabled: no
+ zonemd-check: yes
+
+ ## this line generates zonefile: \n"/tmp/xxx.example.com"\n
+ zonefile:
+TEMPFILE_NAME example.com
+ ## this is the inline file /tmp/xxx.example.com
+ ## the tempfiles are deleted when the testrun is over.
+TEMPFILE_CONTENTS example.com
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD with key in xfr
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DS
+SECTION ANSWER
+example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af
+example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af
+example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk=
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+com. IN DNSKEY
+SECTION ANSWER
+com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo=
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.44
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+www.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN SOA
+SECTION ANSWER
+; serial, refresh, retry, expire, minimum
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600
+example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM=
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg=
+example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b}
+example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA=
+example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f
+example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y=
+example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63
+example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo=
+bar.example.com. 3600 IN A 1.2.3.4
+bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds=
+bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC
+bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0=
+ding.example.com. 3600 IN A 1.2.3.4
+ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko=
+ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC
+ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU=
+foo.example.com. 3600 IN A 1.2.3.4
+foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA=
+foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC
+foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s=
+ns.example.com. 3600 IN A 127.0.0.1
+ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg=
+ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC
+ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A=
+www.example.com. 3600 IN A 127.0.0.1
+www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ=
+www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC
+www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI=
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 TIME_PASSES ELAPSE 10
+STEP 40 TRAFFIC
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 127.0.0.1
+ENTRY_END
+
+; the zonefile was updated with new contents
+STEP 70 CHECK_TEMPFILE example.com
+FILE_BEGIN
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600
+example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM=
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg=
+example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD
+example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo=
+example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566}
+example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA=
+example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F
+example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y=
+bar.example.com. 3600 IN A 1.2.3.4
+bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds=
+bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC
+bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0=
+ding.example.com. 3600 IN A 1.2.3.4
+ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko=
+ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC
+ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU=
+foo.example.com. 3600 IN A 1.2.3.4
+foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA=
+foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC
+foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s=
+ns.example.com. 3600 IN A 127.0.0.1
+ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg=
+ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC
+ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A=
+www.example.com. 3600 IN A 127.0.0.1
+www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ=
+www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC
+www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI=
+FILE_END
+
+SCENARIO_END
diff --git a/testdata/fwd.rpl b/testdata/fwd.rpl
index 53b6f9ad1ec0..f9434085659c 100644
--- a/testdata/fwd.rpl
+++ b/testdata/fwd.rpl
@@ -28,7 +28,7 @@ REPLY RD
SECTION QUESTION
www.example.com. IN A
ENTRY_END
-; unneccesary nothing steps.
+; unnecessary nothing steps.
STEP 2 NOTHING
STEP 3 NOTHING
STEP 4 CHECK_ANSWER
diff --git a/testdata/fwd_any.rpl b/testdata/fwd_any.rpl
index 4284ee79e73a..0fa827db64ae 100644
--- a/testdata/fwd_any.rpl
+++ b/testdata/fwd_any.rpl
@@ -59,7 +59,7 @@ REPLY RD
SECTION QUESTION
www.example.com. IN A
ENTRY_END
-; unneccesary nothing steps.
+; unnecessary nothing steps.
STEP 20 NOTHING
STEP 30 CHECK_ANSWER
ENTRY_BEGIN
diff --git a/testdata/fwd_error.rpl b/testdata/fwd_error.rpl
index 238b1f58d03a..2421027a3621 100644
--- a/testdata/fwd_error.rpl
+++ b/testdata/fwd_error.rpl
@@ -9,7 +9,7 @@ SECTION QUESTION
www.example.com. IN A
ENTRY_END
; But the pending query fails due to error (say TCP failure or malloc or ...)
-; This is iterator/iterator.h OUTBOUND_MSG_RETRY number of errors.
+; This is util/config_file.c outbound-msg-retry number of errors.
STEP 2 ERROR
STEP 3 ERROR
STEP 4 ERROR
diff --git a/testdata/fwd_error_retries.rpl b/testdata/fwd_error_retries.rpl
new file mode 100644
index 000000000000..b63086c0f46a
--- /dev/null
+++ b/testdata/fwd_error_retries.rpl
@@ -0,0 +1,27 @@
+; config options
+server:
+ outbound-msg-retry: 1
+
+forward-zone:
+ name: "."
+ forward-addr: 216.0.0.1
+CONFIG_END
+SCENARIO_BEGIN Test basic forwarding with servfail and retry of 1
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; query fails with servfail, now we make only outgoing-msg-retry=1 retries
+STEP 2 ERROR
+; returns servfail
+STEP 14 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname qtype
+SECTION QUESTION
+REPLY SERVFAIL QR RD RA
+MATCH all
+www.example.com. IN A
+ENTRY_END
+SCENARIO_END
diff --git a/testdata/fwd_timeout.rpl b/testdata/fwd_timeout.rpl
index 1bb934dff8be..e4a711099b34 100644
--- a/testdata/fwd_timeout.rpl
+++ b/testdata/fwd_timeout.rpl
@@ -9,7 +9,7 @@ SECTION QUESTION
www.example.com. IN A
ENTRY_END
; But the pending query times out!
-; OUTBOUND_MSG_RETRY times timeout.
+; outbound-msg-retry times timeout.
STEP 2 TIMEOUT
STEP 3 TIMEOUT
STEP 4 TIMEOUT
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.conf b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.conf
new file mode 100644
index 000000000000..6daf2eeecc36
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.conf
@@ -0,0 +1,20 @@
+server:
+ verbosity: 5
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+forward-zone:
+ name: "tcp.example.com"
+ forward-addr: "127.0.0.1@@TOPORT@"
+ forward-tcp-upstream: "yes"
+forward-zone:
+ name: "udp.example.com"
+ forward-addr: "127.0.0.1@@TOPORT@"
+ forward-tcp-upstream: "no"
+
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.dsc b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.dsc
new file mode 100644
index 000000000000..5b1f0d3d1ab4
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.dsc
@@ -0,0 +1,16 @@
+BaseName: fwd_udp_with_tcp_upstream
+Version: 1.0
+Description: Forward an UDP packet to upstream via TCP and return reply.
+CreationDate: Thu Aug 5 07:44:41 CEST 2021
+Maintainer: ziollek
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: fwd_udp_with_tcp_upstream.pre
+Post: fwd_udp_with_tcp_upstream.post
+Test: fwd_udp_with_tcp_upstream.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.post b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.post
new file mode 100644
index 000000000000..0013eca71a4d
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.post
@@ -0,0 +1,10 @@
+# #-- fwd_udp_with_tcp_upstream.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.pre b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.pre
new file mode 100644
index 000000000000..546787a5fc9f
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.pre
@@ -0,0 +1,31 @@
+# #-- fwd_udp_with_tcp_upstream.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT fwd_udp_with_tcp_upstream.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_udp_with_tcp_upstream.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.test b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.test
new file mode 100644
index 000000000000..fad6497beb15
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.test
@@ -0,0 +1,35 @@
+# #-- fwd_udp_with_tcp_upstream.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+# do the test
+echo "> dig tcp.example.com."
+dig @localhost -p $UNBOUND_PORT tcp.example.com. | tee outfile
+echo "> cat logfiles"
+cat fwd.log
+cat unbound.log
+echo "> check answer"
+if grep "10.20.30.40" outfile; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig udp.example.com."
+dig @localhost -p $UNBOUND_PORT udp.example.com. | tee outfile
+echo "> cat logfiles"
+cat fwd.log
+cat unbound.log
+echo "> check answer"
+if grep "10.20.30.80" outfile; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+exit 0
diff --git a/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.testns b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.testns
new file mode 100644
index 000000000000..04089af0e1b6
--- /dev/null
+++ b/testdata/fwd_udp_with_tcp_upstream.tdir/fwd_udp_with_tcp_upstream.testns
@@ -0,0 +1,25 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+MATCH TCP
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+tcp IN A
+SECTION ANSWER
+tcp IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+MATCH UDP
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+udp IN A
+SECTION ANSWER
+udp IN A 10.20.30.80
+ENTRY_END
diff --git a/testdata/fwd_zero.tdir/fwd_zero.test b/testdata/fwd_zero.tdir/fwd_zero.test
index 87a2dec9c323..2e0806d6f401 100644
--- a/testdata/fwd_zero.tdir/fwd_zero.test
+++ b/testdata/fwd_zero.tdir/fwd_zero.test
@@ -7,7 +7,7 @@
PRE="../.."
OPT="-i"
-if nc -h 2>&1 | grep -- "-w secs" >/dev/null; then
+if nc -h 2>&1 | grep -E -- "-w (timeout|secs)" >/dev/null; then
OPT="-w"
fi
diff --git a/testdata/http_user_agent.tdir/http_user_agent.test b/testdata/http_user_agent.tdir/http_user_agent.test
index afc0fbbe6f4b..dce2d476c8f6 100644
--- a/testdata/http_user_agent.tdir/http_user_agent.test
+++ b/testdata/http_user_agent.tdir/http_user_agent.test
@@ -81,12 +81,12 @@ echo "> cat logfiles"
cat petal.log
cat unbound.log
-# check petal.log for the correct number of occurences.
+# check petal.log for the correct number of occurrences.
# It should be 2 User-Agents, one being the custom.
-echo "> check User-Agent occurences"
-occurences=`grep "User-Agent:" petal.log | wc -l`
-echo $occurences
-if test $occurences -eq 2; then
+echo "> check User-Agent occurrences"
+occurrences=`grep "User-Agent:" petal.log | wc -l`
+echo $occurrences
+if test $occurrences -eq 2; then
echo "OK"
else
echo "Not OK"
diff --git a/testdata/iter_primenoglue.rpl b/testdata/iter_primenoglue.rpl
index a75ed82ddce2..a0be71c78cb6 100644
--- a/testdata/iter_primenoglue.rpl
+++ b/testdata/iter_primenoglue.rpl
@@ -28,7 +28,7 @@ SECTION QUESTION
SECTION ANSWER
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
-; glue ommitted!
+; glue omitted!
;K.ROOT-SERVERS.NET. IN A 193.0.14.129
ENTRY_END
diff --git a/testdata/iter_scrub_dname_rev.rpl b/testdata/iter_scrub_dname_rev.rpl
index 3e649f936186..9caca66c0efd 100644
--- a/testdata/iter_scrub_dname_rev.rpl
+++ b/testdata/iter_scrub_dname_rev.rpl
@@ -17,7 +17,7 @@ CONFIG_END
SCENARIO_BEGIN Test scrub of reversed DNAME and CNAME in answer section
RANGE_BEGIN 0 100
-; all adresses
+; all addresses
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
diff --git a/testdata/iter_scrub_dname_sec.rpl b/testdata/iter_scrub_dname_sec.rpl
index 4597cdf982cd..34a7b324deac 100644
--- a/testdata/iter_scrub_dname_sec.rpl
+++ b/testdata/iter_scrub_dname_sec.rpl
@@ -17,7 +17,7 @@ CONFIG_END
SCENARIO_BEGIN Test scrub of secure DNAME in answer section
RANGE_BEGIN 0 100
-; all adresses
+; all addresses
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
diff --git a/testdata/root_anchor.tdir/root_anchor.test b/testdata/root_anchor.tdir/root_anchor.test
index 8be248ab9e12..f75dadf67871 100644
--- a/testdata/root_anchor.tdir/root_anchor.test
+++ b/testdata/root_anchor.tdir/root_anchor.test
@@ -27,7 +27,7 @@ fi
echo ""
# test that unbound-anchor, the builtin certificate, works
-# so, force https with -F and the -c is a nonexistant file
+# so, force https with -F and the -c is a nonexistent file
$PRE/unbound-anchor -a test.cert -c test.pem -v -F
# check that the test.cert file is OK.
if $PRE/unbound-host -f test.cert -t SOA -v . 2>&1 | grep "(secure)"; then
@@ -38,7 +38,7 @@ else
fi
# use curl to see if the PGP certificate has been updated.
-curl --time-cond "20170203 10:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert
+curl --time-cond "20210908 17:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert
if test -n "`cat newcert`"; then
echo "icannbundle.pem has been updated"
cat newcert
diff --git a/testdata/rpz_clientip.rpl b/testdata/rpz_clientip.rpl
new file mode 100644
index 000000000000..78e05ad91994
--- /dev/null
+++ b/testdata/rpz_clientip.rpl
@@ -0,0 +1,264 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: no
+ access-control: 192.0.0.0/8 allow
+
+rpz:
+ name: "rpz.example.com."
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+24.0.0.0.192.rpz-client-ip CNAME .
+24.0.1.0.192.rpz-client-ip CNAME *.
+24.0.2.0.192.rpz-client-ip CNAME rpz-drop.
+24.0.3.0.192.rpz-client-ip CNAME rpz-passthru.
+24.0.4.0.192.rpz-client-ip CNAME rpz-tcp-only.
+24.0.5.0.192.rpz-client-ip A 127.0.0.1
+24.0.5.0.192.rpz-client-ip TXT "42"
+TEMPFILE_END
+
+stub-zone:
+ name: "a."
+ stub-addr: 10.20.30.40
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ client ip triggers
+
+RANGE_BEGIN 0 100
+ ADDRESS 10.20.30.40
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a. IN NS
+SECTION ANSWER
+a. IN NS ns.a.
+SECTION ADDITIONAL
+ns.a IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.a. IN A
+SECTION ANSWER
+a.a. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.a. IN AAAA
+SECTION ANSWER
+a.a. IN AAAA 2001:db8::123
+ENTRY_END
+
+RANGE_END
+
+; unrelated client ip address -- passthru
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+; should be NXDOMAIN
+
+STEP 20 QUERY ADDRESS 192.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA NXDOMAIN
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+ENTRY_END
+
+; should be NODATA
+
+STEP 30 QUERY ADDRESS 192.0.1.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+ENTRY_END
+
+; should be PASSTHRU
+
+STEP 40 QUERY ADDRESS 192.0.3.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+; should be TRUNCATED
+
+STEP 50 QUERY ADDRESS 192.0.4.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 51 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA TC RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+ENTRY_END
+
+; should not be TRUNCATED via TCP
+
+STEP 52 QUERY ADDRESS 192.0.4.1
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 53 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all TCP
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+; should be synthesized
+
+STEP 60 QUERY ADDRESS 192.0.5.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN A
+ENTRY_END
+
+STEP 61 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA NOERROR
+SECTION QUESTION
+a.a. IN A
+SECTION ANSWER
+a.a. IN A 127.0.0.1
+SECTION ADDITIONAL
+rpz.example.com. 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 )
+ENTRY_END
+
+; should be synthesized
+
+STEP 62 QUERY ADDRESS 192.0.5.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 63 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "42"
+SECTION ADDITIONAL
+rpz.example.com. 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 )
+ENTRY_END
+
+; should be synthesized NODATA
+
+STEP 64 QUERY ADDRESS 192.0.5.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN AAAA
+ENTRY_END
+
+STEP 65 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA NOERROR
+SECTION QUESTION
+a.a. IN AAAA
+SECTION ADDITIONAL
+rpz.example.com. 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 )
+ENTRY_END
+
+; should be DROPPED
+
+STEP 90 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_nsdname.rpl b/testdata/rpz_nsdname.rpl
new file mode 100644
index 000000000000..08ff3c2e2f5b
--- /dev/null
+++ b/testdata/rpz_nsdname.rpl
@@ -0,0 +1,390 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ access-control: 192.0.0.0/8 allow
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+ns1.gotham.aa.rpz-nsdname CNAME .
+ns1.gotham.bb.rpz-nsdname CNAME *.
+ns1.gotham.cc.rpz-nsdname CNAME rpz-drop.
+ns1.gotham.com.rpz-nsdname CNAME rpz-passthru.
+ns1.gotham.dd.rpz-nsdname CNAME rpz-tcp-only.
+ns1.gotham.ff.rpz-nsdname A 127.0.0.1
+ns1.gotham.ff.rpz-nsdname TXT "42"
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 1.1.1.1
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ nsip triggers
+
+; . --------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS ns.root.
+SECTION ADDITIONAL
+ns.root IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com. IN NS ns1.com.
+SECTION ADDITIONAL
+ns1.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+aa. IN A
+SECTION AUTHORITY
+aa. IN NS ns1.aa.
+SECTION ADDITIONAL
+ns1.aa. IN A 8.8.0.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+bb. IN A
+SECTION AUTHORITY
+bb. IN NS ns1.bb.
+SECTION ADDITIONAL
+ns1.bb. IN A 8.8.1.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+cc. IN A
+SECTION AUTHORITY
+cc. IN NS ns1.cc.
+SECTION ADDITIONAL
+ns1.cc. IN A 8.8.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+dd. IN A
+SECTION AUTHORITY
+dd. IN NS ns1.dd.
+SECTION ADDITIONAL
+ns1.dd. IN A 8.8.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ee. IN A
+SECTION AUTHORITY
+ee. IN NS ns1.ee.
+SECTION ADDITIONAL
+ns1.ee. IN A 8.8.5.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ff. IN A
+SECTION AUTHORITY
+ff. IN NS ns1.ff.
+SECTION ADDITIONAL
+ns1.ff. IN A 8.8.6.8
+ENTRY_END
+
+RANGE_END
+
+; com. -----------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.8.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS ns1.com.
+SECTION ADDITIONAL
+ns1.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION AUTHORITY
+gotham.com. IN NS ns1.gotham.com.
+SECTION ADDITIONAL
+ns1.gotham.com. IN A 192.0.6.1
+ENTRY_END
+
+RANGE_END
+
+; aa. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.0.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+aa. IN NS
+SECTION ANSWER
+aa. IN NS ns1.aa.
+SECTION ADDITIONAL
+ns1.aa. IN A 8.8.0.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.aa. IN A
+SECTION AUTHORITY
+gotham.aa. IN NS ns1.gotham.aa.
+SECTION ADDITIONAL
+ns1.gotham.aa. IN A 192.0.0.1
+ENTRY_END
+
+RANGE_END
+
+; bb. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.1.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+bb. IN NS
+SECTION ANSWER
+bb. IN NS ns1.bb.
+SECTION ADDITIONAL
+ns1.bb. IN A 8.8.1.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION AUTHORITY
+gotham.bb. IN NS ns1.gotham.bb.
+SECTION ADDITIONAL
+ns1.gotham.bb. IN A 192.0.1.1
+ENTRY_END
+
+RANGE_END
+
+; ff. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.6.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ff. IN NS
+SECTION ANSWER
+ff. IN NS ns1.ff.
+SECTION ADDITIONAL
+ns1.ff. IN A 8.8.6.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION AUTHORITY
+gotham.ff. IN NS ns1.gotham.ff.
+SECTION ADDITIONAL
+ns1.gotham.ff. IN A 192.0.5.1
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.com. ------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.6.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION ANSWER
+gotham.com. IN A 192.0.6.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.aa. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.0.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.aa. IN A
+SECTION ANSWER
+gotham.aa. IN A 192.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.bb. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.1.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION ANSWER
+gotham.bb. IN A 192.0.1.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.ff. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.5.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION ANSWER
+gotham.ff. IN A 192.0.5.2
+ENTRY_END
+
+RANGE_END
+
+; ----------------------------------------------------------------------------
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.com. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION ANSWER
+gotham.com. IN A 192.0.6.2
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.aa. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+gotham.aa. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.bb. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.ff. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION ANSWER
+gotham.ff. IN A 127.0.0.1
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_nsip.rpl b/testdata/rpz_nsip.rpl
new file mode 100644
index 000000000000..ac132cae0996
--- /dev/null
+++ b/testdata/rpz_nsip.rpl
@@ -0,0 +1,408 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ access-control: 192.0.0.0/8 allow
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.gotham.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+24.0.0.0.192.rpz-nsip CNAME .
+24.0.1.0.192.rpz-nsip CNAME *.
+24.0.2.0.192.rpz-nsip CNAME rpz-drop.
+24.0.3.0.192.rpz-nsip CNAME rpz-passthru.
+24.0.4.0.192.rpz-nsip CNAME rpz-tcp-only.
+24.0.5.0.192.rpz-nsip A 127.0.0.1
+24.0.5.0.192.rpz-nsip TXT "42"
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 1.1.1.1
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ nsip triggers
+
+; . --------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS ns.root.
+SECTION ADDITIONAL
+ns.root IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com. IN NS ns1.com.
+SECTION ADDITIONAL
+ns1.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+aa. IN A
+SECTION AUTHORITY
+aa. IN NS ns1.aa.
+SECTION ADDITIONAL
+ns1.aa. IN A 8.8.0.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+bb. IN A
+SECTION AUTHORITY
+bb. IN NS ns1.bb.
+SECTION ADDITIONAL
+ns1.bb. IN A 8.8.1.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+cc. IN A
+SECTION AUTHORITY
+cc. IN NS ns1.cc.
+SECTION ADDITIONAL
+ns1.cc. IN A 8.8.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+dd. IN A
+SECTION AUTHORITY
+dd. IN NS ns1.dd.
+SECTION ADDITIONAL
+ns1.dd. IN A 8.8.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ee. IN A
+SECTION AUTHORITY
+ee. IN NS ns1.ee.
+SECTION ADDITIONAL
+ns1.ee. IN A 8.8.5.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ff. IN A
+SECTION AUTHORITY
+ff. IN NS ns1.ff.
+SECTION ADDITIONAL
+ns1.ff. IN A 8.8.6.8
+ENTRY_END
+
+RANGE_END
+
+; com. -----------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.8.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS ns1.com.
+SECTION ADDITIONAL
+ns1.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION AUTHORITY
+gotham.com. IN NS ns1.gotham.com.
+SECTION ADDITIONAL
+ns1.gotham.com. IN A 192.0.6.1
+ENTRY_END
+
+RANGE_END
+
+; aa. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.0.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+aa. IN NS
+SECTION ANSWER
+aa. IN NS ns1.aa.
+SECTION ADDITIONAL
+ns1.aa. IN A 8.8.0.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.aa. IN A
+SECTION AUTHORITY
+gotham.aa. IN NS ns1.gotham.aa.
+SECTION ADDITIONAL
+ns1.gotham.aa. IN A 192.0.0.1
+ENTRY_END
+
+RANGE_END
+
+; bb. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.1.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+bb. IN NS
+SECTION ANSWER
+bb. IN NS ns1.bb.
+SECTION ADDITIONAL
+ns1.bb. IN A 8.8.1.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION AUTHORITY
+gotham.bb. IN NS ns1.gotham.bb.
+SECTION ADDITIONAL
+ns1.gotham.bb. IN A 192.0.1.1
+ENTRY_END
+
+RANGE_END
+
+; ff. ------------------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 8.8.6.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ff. IN NS
+SECTION ANSWER
+ff. IN NS ns1.ff.
+SECTION ADDITIONAL
+ns1.ff. IN A 8.8.6.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION AUTHORITY
+gotham.ff. IN NS ns1.gotham.ff.
+SECTION ADDITIONAL
+ns1.gotham.ff. IN A 192.0.5.1
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.com. ------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.6.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION ANSWER
+gotham.com. IN A 192.0.6.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.aa. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.0.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.aa. IN A
+SECTION ANSWER
+gotham.aa. IN A 192.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.bb. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.1.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION ANSWER
+gotham.bb. IN A 192.0.1.2
+ENTRY_END
+
+RANGE_END
+
+; ns1.gotham.ff. -------------------------------------------------------------
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.5.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION ANSWER
+gotham.ff. IN A 192.0.5.2
+ENTRY_END
+
+RANGE_END
+
+; ----------------------------------------------------------------------------
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.com. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+gotham.com. IN A
+SECTION ANSWER
+gotham.com. IN A 192.0.6.2
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.aa. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+gotham.aa. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.bb. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+gotham.bb. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.ff. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION ANSWER
+gotham.ff. IN A 127.0.0.1
+ENTRY_END
+
+; again with more cache items
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+gotham.ff. IN A
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+gotham.ff. IN A
+SECTION ANSWER
+gotham.ff. IN A 127.0.0.1
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl
index 7940e93926a8..ede6972331d0 100644
--- a/testdata/rpz_qname.rpl
+++ b/testdata/rpz_qname.rpl
@@ -38,6 +38,7 @@ d TXT "local data 2nd zone"
e CNAME *.a.example.
*.e CNAME *.b.example.
drop CNAME rpz-drop.
+tcp CNAME rpz-tcp-only.
TEMPFILE_END
stub-zone:
@@ -46,12 +47,15 @@ stub-zone:
stub-zone:
name: "example."
stub-addr: 10.20.30.50
+stub-zone:
+ name: "tcp."
+ stub-addr: 10.20.30.60
CONFIG_END
SCENARIO_BEGIN Test all support RPZ action for QNAME trigger
; a.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 1000
ADDRESS 10.20.30.40
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -88,7 +92,7 @@ ENTRY_END
RANGE_END
; example.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 1000
ADDRESS 10.20.30.50
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -122,6 +126,42 @@ SECTION ANSWER
something.e.b.example. IN TXT "*.b.example. answer from upstream ns"
ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+f.example. IN TXT
+SECTION ANSWER
+f.example. IN CNAME d.
+ENTRY_END
+
+RANGE_END
+
+; tcp.
+RANGE_BEGIN 0 1000
+ ADDRESS 10.20.30.60
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+tcp. IN NS
+SECTION ANSWER
+tcp. IN NS ns.example.
+SECTION ADDITIONAL
+ns.tcp IN A 10.20.30.60
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tcp. IN TXT
+SECTION ANSWER
+tcp. IN TXT "tcp. answer from upstream ns"
+ENTRY_END
RANGE_END
STEP 10 QUERY
@@ -295,10 +335,66 @@ something.e.b.example. IN TXT "*.b.example. answer from upstream ns"
ENTRY_END
; deny zone
-STEP 90 QUERY
+;STEP 90 QUERY
+;ENTRY_BEGIN
+;SECTION QUESTION
+;drop. IN TXT
+;ENTRY_END
+
+; tcp-only action
+
+STEP 95 QUERY
ENTRY_BEGIN
+REPLY RD
SECTION QUESTION
-drop. IN TXT
+tcp. IN TXT
ENTRY_END
+
+STEP 96 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA TC NOERROR
+SECTION QUESTION
+tcp. IN TXT
+SECTION ANSWER
+ENTRY_END
+
+STEP 97 QUERY
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD
+SECTION QUESTION
+tcp. IN TXT
+ENTRY_END
+
+STEP 98 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all TCP
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+tcp. IN TXT
+SECTION ANSWER
+tcp. IN TXT "tcp. answer from upstream ns"
+ENTRY_END
+
+; check if the name after the CNAME has the qname trigger applied to it.
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+f.example. IN TXT
+ENTRY_END
+
+STEP 101 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+f.example. IN TXT
+SECTION ANSWER
+f.example. IN CNAME d.
+d. IN TXT "local data 2nd zone"
+ENTRY_END
+
; no answer is checked at exit of testbound.
SCENARIO_END
diff --git a/testdata/rpz_qname_tcponly.rpl b/testdata/rpz_qname_tcponly.rpl
new file mode 100644
index 000000000000..d30b88616227
--- /dev/null
+++ b/testdata/rpz_qname_tcponly.rpl
@@ -0,0 +1,117 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+
+rpz:
+ name: "rpz.example.com."
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+a.a CNAME rpz-passthru.
+b.a CNAME rpz-tcp-only.
+TEMPFILE_END
+
+stub-zone:
+ name: "a."
+ stub-addr: 10.20.30.40
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ qname trigger and tcp-only action
+
+RANGE_BEGIN 0 100
+ ADDRESS 10.20.30.40
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a. IN NS
+SECTION ANSWER
+a. IN NS ns.a.
+SECTION ADDITIONAL
+ns.a IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+b.a. IN TXT
+SECTION ANSWER
+b.a. IN TXT "upstream txt rr b.a."
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.a. IN TXT
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.a. IN TXT
+SECTION ANSWER
+a.a. IN TXT "upstream txt rr a.a."
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+MATCH UDP
+REPLY RD
+SECTION QUESTION
+b.a. IN TXT
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all UDP
+REPLY QR AA TC RD RA NOERROR
+SECTION QUESTION
+b.a. IN TXT
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD
+SECTION QUESTION
+b.a. IN TXT
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all TCP
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+b.a. IN TXT
+SECTION ANSWER
+b.a. IN TXT "upstream txt rr b.a."
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_respip.rpl b/testdata/rpz_respip.rpl
index 94f998be66a4..894a7cc5fca3 100644
--- a/testdata/rpz_respip.rpl
+++ b/testdata/rpz_respip.rpl
@@ -20,6 +20,7 @@ $ORIGIN rpz.example.com.
16.0.0.10.10.rpz-ip CNAME .
24.0.10.10.10.rpz-ip CNAME rpz-drop.
32.10.10.10.10.rpz-ip CNAME rpz-passthru.
+32.1.1.1.10.rpz-ip CNAME rpz-tcp-only.
32.zz.db8.2001.rpz-ip CNAME *.
48.zz.aa.db8.2001.rpz-ip CNAME .
64.zz.bb.aa.db8.2001.rpz-ip CNAME rpz-drop.
@@ -217,6 +218,16 @@ SECTION ANSWER
h. IN AAAA 2001:db8:aa:bb:cc::124
ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+y. IN A
+SECTION ANSWER
+y. IN A 10.1.1.1
+ENTRY_END
+
RANGE_END
STEP 1 QUERY
@@ -446,4 +457,21 @@ SECTION QUESTION
e. IN AAAA
ENTRY_END
STEP 29 TIME_PASSES ELAPSE 12
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+y. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR TC RD RA NOERROR
+SECTION QUESTION
+y. IN A
+SECTION ANSWER
+ENTRY_END
+
SCENARIO_END
diff --git a/testdata/rpz_respip_tcponly.rpl b/testdata/rpz_respip_tcponly.rpl
new file mode 100644
index 000000000000..c495de2038a1
--- /dev/null
+++ b/testdata/rpz_respip_tcponly.rpl
@@ -0,0 +1,207 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+
+rpz:
+ name: "rpz.example.com."
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+8.0.0.0.10.rpz-ip CNAME *.
+16.0.0.10.10.rpz-ip CNAME .
+24.0.10.10.10.rpz-ip CNAME rpz-drop.
+32.10.10.10.10.rpz-ip CNAME rpz-passthru.
+32.1.1.1.10.rpz-ip CNAME rpz-tcp-only.
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 10.20.30.40
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ response IP address trigger and tcp-only action
+
+RANGE_BEGIN 0 100
+ ADDRESS 10.20.30.40
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS ns.
+SECTION ADDITIONAL
+ns. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a. IN A
+SECTION ANSWER
+a. IN A 10.0.0.123
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+b. IN A
+SECTION ANSWER
+b. IN A 10.1.0.123
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+c. IN A
+SECTION ANSWER
+c. IN A 10.11.0.123
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+d. IN A
+SECTION ANSWER
+d. IN A 10.10.0.123
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+f. IN A
+SECTION ANSWER
+f. IN A 10.10.10.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+y. IN A
+SECTION ANSWER
+y. IN A 10.1.1.1
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+b. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+b. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 13 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+d. IN A
+ENTRY_END
+
+STEP 14 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+d. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 17 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+f. IN A
+ENTRY_END
+
+STEP 18 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+f. IN A
+SECTION ANSWER
+f. IN A 10.10.10.10
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+y. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR TC RD RA NOERROR
+SECTION QUESTION
+y. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 40 QUERY
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD
+SECTION QUESTION
+y. IN A
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all TCP
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+y. IN A
+SECTION ANSWER
+y. IN A 10.1.1.1
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.conf b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.conf
new file mode 100644
index 000000000000..d57c787b154c
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.conf
@@ -0,0 +1,19 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+stub-zone:
+ name: "tcp.example.com"
+ stub-addr: "127.0.0.1@@TOPORT@"
+ stub-tcp-upstream: "yes"
+stub-zone:
+ name: "udp.example.com"
+ stub-addr: "127.0.0.1@@TOPORT@"
+ stub-tcp-upstream: "no" \ No newline at end of file
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.dsc b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.dsc
new file mode 100644
index 000000000000..526ff67f98f9
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.dsc
@@ -0,0 +1,16 @@
+BaseName: stub_udp_with_tcp_upstream
+Version: 1.0
+Description: Stub server contacted via UDP with tcp upstream.
+CreationDate: Thu Aug 5 07:44:41 CEST 2021
+Maintainer: ziollek
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: stub_udp_with_tcp_upstream.pre
+Post: stub_udp_with_tcp_upstream.post
+Test: stub_udp_with_tcp_upstream.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.post b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.post
new file mode 100644
index 000000000000..c804b6c46d64
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.post
@@ -0,0 +1,10 @@
+# #-- stub_udp_with_tcp_upstream.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.pre b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.pre
new file mode 100644
index 000000000000..2bca63b9d56b
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.pre
@@ -0,0 +1,35 @@
+# #-- stub_udp_with_tcp_upstream.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+. ../common.sh
+
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT stub_udp_with_tcp_upstream.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_udp_with_tcp_upstream.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+
+# wait for forwarder to come up
+wait_ldns_testns_up fwd.log
+
+# wait for unbound to come up
+wait_unbound_up unbound.log
+
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.test b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.test
new file mode 100644
index 000000000000..43591ac16c0f
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.test
@@ -0,0 +1,37 @@
+# #-- stub_udp_with_tcp_upstream.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+# do the test
+echo "> dig tcp.example.com."
+dig @127.0.0.1 -p $UNBOUND_PORT tcp.example.com. | tee outfile
+echo "> cat logfiles"
+cat fwd.log
+cat unbound.log
+echo "> check answer"
+if grep "10.20.30.40" outfile; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+
+# check if second stub is requested via udp
+echo "> dig udp.example.com."
+dig @127.0.0.1 -p $UNBOUND_PORT udp.example.com. | tee outfile
+echo "> cat logfiles"
+cat fwd.log
+cat unbound.log
+echo "> check answer"
+if grep "10.20.30.80" outfile; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+exit 0
diff --git a/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.testns b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.testns
new file mode 100644
index 000000000000..f2155414e045
--- /dev/null
+++ b/testdata/stub_udp_with_tcp_upstream.tdir/stub_udp_with_tcp_upstream.testns
@@ -0,0 +1,48 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+MATCH TCP
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+tcp IN A
+SECTION ANSWER
+tcp IN A 10.20.30.40
+SECTION AUTHORITY
+@ IN NS ns.example.com.
+SECTION ADDITIONAL
+ns IN A 127.0.0.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+MATCH UDP
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+udp IN A
+SECTION ANSWER
+udp IN A 10.20.30.80
+SECTION AUTHORITY
+@ IN NS ns.example.com.
+SECTION ADDITIONAL
+ns IN A 127.0.0.1
+ENTRY_END
+
+; root prime
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS root.server.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+root.server. IN A 127.0.0.1
+ENTRY_END
+
diff --git a/testdata/svcb.tdir/svcb.test b/testdata/svcb.tdir/svcb.test
index 707287d5cf89..17330e08fde6 100644
--- a/testdata/svcb.tdir/svcb.test
+++ b/testdata/svcb.tdir/svcb.test
@@ -80,7 +80,7 @@ else
fi
-# check all the succes and write them
+# check all the success and write them
if ! $PRE/readzone svcb.success-cases.zone > svcb.success-cases.zone.out
then
echo "Some particular success cases did not succeed to parse"
diff --git a/testdata/ttl_msg.rpl b/testdata/ttl_msg.rpl
index efb7ea387a4a..06726fb58ace 100644
--- a/testdata/ttl_msg.rpl
+++ b/testdata/ttl_msg.rpl
@@ -411,7 +411,7 @@ ENTRY_END
; cause a lookup for nx1.example.com bypassing the cache.
; with bug; this causes msg ttl for nx1 to be time(NOW)+ttl.
; so 15+5 = 20
-; visiable in debug log as "msg ttl is %d"
+; visible in debug log as "msg ttl is %d"
STEP 40 QUERY
ENTRY_BEGIN
REPLY RD
diff --git a/testdata/val_keyprefetch_verify.rpl b/testdata/val_keyprefetch_verify.rpl
index f2050fb7fe13..9b901a8cbca6 100644
--- a/testdata/val_keyprefetch_verify.rpl
+++ b/testdata/val_keyprefetch_verify.rpl
@@ -219,7 +219,7 @@ STEP 20 TIME_PASSES ELAPSE 3400
; now the key gets prefetched and has to be verified with the anchor,
; not with the key itself.
-; this answer is from cache enyway.
+; this answer is from cache anyway.
STEP 30 QUERY
ENTRY_BEGIN
REPLY RD DO
diff --git a/testdata/val_nodata_failwc.rpl b/testdata/val_nodata_failwc.rpl
index 76fa8acac3e3..f9c810951afe 100644
--- a/testdata/val_nodata_failwc.rpl
+++ b/testdata/val_nodata_failwc.rpl
@@ -42,7 +42,7 @@ SECTION ANSWER
SECTION AUTHORITY
nsecwc.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600
nsecwc.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. bYibpCDg1LgrnYJgVahgu94LBqLIcNs4iC0SW8LV7pTI1hhuFKbLkO2O ekPdkJAWmu/KTytf8D+cdcK6X/9VS8QCVIF5S0hraHtNezu0f1B5ztg3 7Rqy+uJSucNKoykueAsz2z43GMgO0rGH3bqM7+3ii8p2E2rhzqEtG/D3 qyY=
-; NSEC has a label lenght of 3, indication that the original owner name is:
+; NSEC has a label length of 3, indication that the original owner name is:
; *.nsecwc.nlnetlabs.nl. The NSEC therefore does no prove the NODATA answer.
_25._tcp.mail.nsecwc.nlnetlabs.nl. 3600 IN NSEC delegation.nsecwc.nlnetlabs.nl. TXT RRSIG NSEC
_25._tcp.mail.nsecwc.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. ddy1MRbshFuFJswlouNGHsZUF/tYu8BOCztY2JuHeTMyWL7rhRKp73q/ 1RAXMwywKsynT5ioY0bMtEQszeIEn29IYaPDHieLAobjF6BMu1kO7U2/ oEBrSHM/fx28BcaM5G4nfCIm3BlhQhWvk1NDHLn3Q26x4hF/dnmFOUet aXw=
diff --git a/testdata/val_nsec3_optout_cache.rpl b/testdata/val_nsec3_optout_cache.rpl
index 215cca6768e2..05c07a839272 100644
--- a/testdata/val_nsec3_optout_cache.rpl
+++ b/testdata/val_nsec3_optout_cache.rpl
@@ -138,7 +138,7 @@ b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccd
b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AKHQ0gnNP5WDab1yqbd+Bt12CSSff88sqeDR40dvhiWOcYA8mmyjYNA=
; span around sub.example.com., same span as foo.example.com, but it has
-; just changed and it is now larger to accomodate sub.example.com.
+; just changed and it is now larger to accommodate sub.example.com.
6obgmo062d9935unjnnj2su5otaj9334.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG
6obgmo062d9935unjnnj2su5otaj9334.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. ABzruSKUUcJRNlYDqZ4UmQH/WnzeXt9Gozp3chS4cR0sqsEeGjL54eQ=
@@ -164,7 +164,7 @@ b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccd
b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AKHQ0gnNP5WDab1yqbd+Bt12CSSff88sqeDR40dvhiWOcYA8mmyjYNA=
; span around sub.example.com., same span as foo.example.com, but it has
-; just changed and it is now larger to accomodate sub.example.com.
+; just changed and it is now larger to accommodate sub.example.com.
6obgmo062d9935unjnnj2su5otaj9334.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG
6obgmo062d9935unjnnj2su5otaj9334.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. ABzruSKUUcJRNlYDqZ4UmQH/WnzeXt9Gozp3chS4cR0sqsEeGjL54eQ=
diff --git a/util/config_file.c b/util/config_file.c
index 50b0e645af8f..39050f553e61 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -328,6 +328,7 @@ config_create(void)
cfg->ratelimit_size = 4*1024*1024;
cfg->ratelimit_for_domain = NULL;
cfg->ratelimit_below_domain = NULL;
+ cfg->outbound_msg_retry = 5;
cfg->ip_ratelimit_factor = 10;
cfg->ratelimit_factor = 10;
cfg->qname_minimisation = 1;
@@ -752,6 +753,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_POW2("ratelimit-slabs:", ratelimit_slabs)
else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor)
else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
+ else S_NUMBER_NONZERO("outbound-msg-retry:", outbound_msg_retry)
else S_SIZET_NONZERO("fast-server-num:", fast_server_num)
else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil)
else S_YNO("qname-minimisation:", qname_minimisation)
@@ -1195,6 +1197,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor)
else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
+ else O_UNS(opt, "outbound-msg-retry", outbound_msg_retry)
else O_DEC(opt, "fast-server-num", fast_server_num)
else O_DEC(opt, "fast-server-permil", fast_server_permil)
else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
diff --git a/util/config_file.h b/util/config_file.h
index aed6812dafe8..18910bee39fc 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -578,6 +578,8 @@ struct config_file {
struct config_str2list* ratelimit_below_domain;
/** ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */
int ratelimit_factor;
+ /** number of retries on outgoing queries */
+ int outbound_msg_retry;
/** minimise outgoing QNAME and hide original QTYPE if possible */
int qname_minimisation;
/** minimise QNAME in strict mode, minimise according to RFC.
@@ -697,6 +699,8 @@ struct config_stub {
int isprime;
/** if forward-first is set (failover to without if fails) */
int isfirst;
+ /** use tcp for queries to this stub */
+ int tcp_upstream;
/** use SSL for queries to this stub */
int ssl_upstream;
/*** no cache */
@@ -1106,7 +1110,7 @@ int cfg_count_numbers(const char* str);
int cfg_parse_memsize(const char* str, size_t* res);
/**
- * Parse nsid from string into binary nsid. nsid is either a hexidecimal
+ * Parse nsid from string into binary nsid. nsid is either a hexadecimal
* string or an ascii string prepended with ascii_ in which case the
* characters after ascii_ are simply copied.
* @param str: the string to parse.
diff --git a/util/configlexer.c b/util/configlexer.c
index 7c3f3fde8844..194fb76c3f21 100644
--- a/util/configlexer.c
+++ b/util/configlexer.c
@@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 352
-#define YY_END_OF_BUFFER 353
+#define YY_NUM_RULES 355
+#define YY_END_OF_BUFFER 356
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -363,391 +363,396 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[3484] =
+static const flex_int16_t yy_accept[3524] =
{ 0,
- 1, 1, 326, 326, 330, 330, 334, 334, 338, 338,
- 1, 1, 342, 342, 346, 346, 353, 350, 1, 324,
- 324, 351, 2, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 351, 326, 327, 327, 328,
- 351, 330, 331, 331, 332, 351, 337, 334, 335, 335,
- 336, 351, 338, 339, 339, 340, 351, 349, 325, 2,
- 329, 349, 351, 345, 342, 343, 343, 344, 351, 346,
- 347, 347, 348, 351, 350, 0, 1, 2, 2, 2,
- 2, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 326,
- 0, 330, 0, 337, 0, 334, 338, 0, 349, 0,
- 2, 2, 349, 345, 0, 342, 346, 0, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 349, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 128, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 137,
- 350, 350, 350, 350, 350, 350, 350, 349, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 112, 350, 323,
- 350, 350, 350, 350, 350, 350, 350, 8, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 129, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 142, 350, 350, 349, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 316, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 349, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 67, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 248, 350, 14, 15, 350, 19, 18, 350,
- 350, 232, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 135, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 230, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 3, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 349,
- 350, 350, 350, 350, 350, 350, 350, 310, 350, 350,
- 309, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 333, 350, 350, 350, 350, 350, 350, 350, 350, 66,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 70, 350, 279, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 317, 318,
- 350, 350, 350, 350, 350, 350, 350, 71, 350, 350,
- 136, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 132, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 219, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 21, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 162,
- 350, 350, 350, 350, 350, 349, 333, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 110, 350,
- 350, 350, 350, 350, 350, 350, 287, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 188, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 161, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 109, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 35, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 36, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 68,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 134, 350, 350, 350, 349, 350, 350, 350, 350, 350,
- 127, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 69, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 252,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 189, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 57, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 270, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 61, 350, 62,
-
- 350, 350, 350, 350, 350, 113, 350, 114, 350, 350,
- 350, 350, 111, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 7, 350, 350, 350, 350,
- 349, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 241,
- 350, 350, 350, 350, 165, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 253, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 48, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 58, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 211, 350, 210, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 16, 17, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 72, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 218, 350, 350, 350, 350,
- 350, 350, 116, 350, 115, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 202,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 143,
- 350, 350, 350, 349, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 104, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 92, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 231, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 97,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 65, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 205, 206, 350, 350, 350, 281, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 6, 350, 350, 350, 350, 350, 350, 300, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 285, 350, 350, 350,
- 350, 350, 350, 311, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 45, 350, 350,
- 350, 350, 47, 350, 350, 350, 93, 350, 350, 350,
- 350, 350, 55, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 349, 350, 198, 350, 350, 350,
- 138, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 223, 350, 199, 350, 350, 350, 238, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 56, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 140,
- 121, 350, 122, 350, 350, 350, 120, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 158, 350, 350, 53,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 269, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 200, 350, 350,
- 350, 350, 350, 203, 350, 209, 350, 350, 350, 350,
- 350, 350, 237, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 108,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 133, 350,
- 350, 350, 350, 350, 350, 350, 63, 350, 350, 350,
- 29, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 20, 350, 350, 350, 350, 350, 350, 30,
- 39, 350, 170, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 196, 350, 350,
- 349, 350, 350, 350, 350, 350, 350, 80, 82, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 289, 350, 350, 350, 350, 249, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 123, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 157, 350, 49, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 304, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 164, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 298,
-
- 350, 350, 350, 229, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 314, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 182, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 117, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 177, 350, 190,
- 350, 350, 350, 350, 350, 350, 350, 349, 350, 146,
- 350, 350, 350, 350, 350, 103, 350, 350, 350, 350,
- 221, 350, 350, 350, 350, 350, 350, 239, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 261, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 139, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 181, 350, 350, 350, 350, 350, 350, 83,
- 350, 84, 350, 350, 350, 350, 350, 64, 307, 350,
- 350, 350, 350, 350, 91, 191, 350, 212, 350, 242,
- 350, 350, 204, 282, 350, 350, 350, 350, 350, 350,
- 76, 350, 193, 350, 350, 350, 350, 350, 9, 350,
- 350, 350, 350, 350, 107, 350, 350, 350, 350, 274,
- 350, 350, 350, 350, 220, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 349, 350, 350, 350,
- 350, 180, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 166, 350, 288, 350, 350, 350, 350, 350,
- 260, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 233, 350, 350, 350, 350, 350, 280, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 163, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 308, 350, 192, 350, 350, 350, 350, 350, 350,
- 350, 350, 75, 77, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 106, 350, 350, 350, 350, 272, 350,
- 350, 350, 350, 284, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 225, 37, 31, 33,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 38, 350, 32, 34, 350, 350, 350, 350, 350,
- 350, 350, 350, 102, 350, 176, 350, 350, 350, 350,
-
- 350, 350, 350, 349, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 227, 224, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 74, 350, 350, 350, 141,
- 350, 124, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 159, 50, 350, 350, 350, 341, 13, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 302, 350,
- 305, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 12, 350, 350, 22, 350, 350, 350, 350,
- 350, 278, 350, 350, 350, 350, 286, 350, 350, 350,
-
- 78, 350, 235, 350, 350, 350, 350, 350, 226, 350,
- 350, 73, 350, 350, 350, 350, 350, 23, 350, 350,
- 46, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 175, 174, 350, 350, 341, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 228, 222, 350,
- 240, 350, 350, 290, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 85, 350, 350,
- 350, 350, 273, 350, 350, 350, 350, 208, 350, 350,
-
- 350, 350, 350, 234, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 312, 313, 172, 350, 350,
- 79, 350, 350, 350, 350, 183, 350, 350, 350, 118,
- 119, 350, 350, 350, 25, 350, 350, 167, 350, 169,
- 350, 213, 350, 350, 350, 350, 173, 350, 350, 350,
- 350, 243, 350, 350, 350, 350, 350, 350, 350, 148,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 251, 350, 350, 350, 350, 350, 350, 350,
- 321, 350, 27, 350, 283, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
-
- 89, 214, 350, 350, 271, 350, 306, 350, 207, 350,
- 350, 350, 350, 350, 59, 350, 350, 350, 350, 350,
- 350, 4, 350, 350, 350, 350, 131, 147, 350, 350,
- 350, 187, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 246, 40, 41, 350, 350, 350, 350, 350, 350, 350,
- 291, 350, 350, 350, 350, 350, 350, 350, 259, 350,
- 350, 350, 350, 350, 350, 350, 350, 217, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 88, 350, 60, 277, 350, 247, 350, 350, 350,
-
- 350, 350, 11, 350, 350, 350, 350, 350, 350, 350,
- 350, 130, 350, 350, 350, 350, 215, 94, 350, 350,
- 43, 350, 350, 350, 350, 350, 350, 350, 350, 179,
- 350, 350, 350, 350, 350, 350, 350, 150, 350, 350,
- 350, 350, 250, 350, 350, 350, 350, 350, 258, 350,
- 350, 350, 350, 144, 350, 350, 350, 125, 126, 350,
- 350, 350, 96, 100, 95, 160, 350, 350, 350, 350,
- 86, 350, 350, 350, 350, 350, 350, 10, 350, 350,
- 350, 350, 350, 275, 315, 350, 350, 350, 350, 350,
- 320, 42, 350, 350, 350, 350, 350, 178, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 101, 99, 350, 54, 350, 350, 87,
- 303, 350, 350, 350, 350, 24, 350, 350, 350, 350,
- 350, 201, 350, 350, 350, 350, 350, 216, 350, 350,
- 350, 350, 350, 350, 350, 350, 197, 350, 350, 168,
- 81, 350, 350, 350, 350, 350, 292, 350, 350, 350,
- 350, 350, 350, 350, 255, 350, 350, 254, 145, 350,
- 350, 98, 51, 350, 151, 152, 155, 156, 153, 154,
- 90, 301, 350, 350, 276, 350, 350, 350, 26, 350,
-
- 171, 350, 350, 350, 350, 195, 350, 245, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 185, 184,
- 44, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 299, 350, 350, 350, 350, 105, 350,
- 244, 350, 268, 296, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 322, 350, 52, 5, 350,
- 350, 236, 350, 350, 297, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 256, 28, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350, 257, 350,
- 350, 350, 149, 350, 350, 350, 350, 350, 350, 350,
- 350, 186, 350, 194, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 293, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 319, 350, 350, 264, 350, 350, 350, 350, 350,
- 294, 350, 350, 350, 350, 350, 350, 295, 350, 350,
- 350, 262, 350, 265, 266, 350, 350, 350, 350, 350,
- 263, 267, 0
+ 1, 1, 329, 329, 333, 333, 337, 337, 341, 341,
+ 1, 1, 345, 345, 349, 349, 356, 353, 1, 327,
+ 327, 354, 2, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 354, 329, 330, 330, 331,
+ 354, 333, 334, 334, 335, 354, 340, 337, 338, 338,
+ 339, 354, 341, 342, 342, 343, 354, 352, 328, 2,
+ 332, 352, 354, 348, 345, 346, 346, 347, 354, 349,
+ 350, 350, 351, 354, 353, 0, 1, 2, 2, 2,
+ 2, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 329,
+ 0, 333, 0, 340, 0, 337, 341, 0, 352, 0,
+ 2, 2, 352, 348, 0, 345, 349, 0, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 352, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 130,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 139, 353, 353, 353, 353, 353, 353, 353, 352, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 112, 353,
+ 326, 353, 353, 353, 353, 353, 353, 353, 353, 8,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 131,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 144, 353, 353, 352, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 319, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 352, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 67, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 250, 353, 14, 15, 353,
+ 19, 18, 353, 353, 234, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 137, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 232, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 3, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 352, 353, 353, 353, 353, 353,
+ 353, 353, 313, 353, 353, 312, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 336, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 66, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 70, 353, 282, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 320, 321, 353, 353, 353, 353, 353,
+ 353, 353, 353, 71, 353, 353, 138, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 134, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 221, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 21, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 164, 353, 353, 353,
+ 353, 353, 352, 336, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 110, 353, 353, 353, 353,
+ 353, 353, 353, 290, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 190, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 163, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 109, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 35,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 36, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 68, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 136,
+ 353, 353, 353, 352, 353, 353, 353, 353, 353, 129,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 69, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 254, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 191, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 57, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 272, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 61, 353,
+ 62, 353, 353, 353, 353, 353, 113, 353, 114, 353,
+ 353, 353, 353, 353, 111, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 7, 353, 353,
+ 353, 353, 352, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 243, 353, 353, 353, 353, 167, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 255, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 48, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 58, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 213, 353,
+ 212, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 16, 17, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 72, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 220,
+ 353, 353, 353, 353, 353, 353, 116, 353, 115, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 204, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 145, 353, 353, 353, 352, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 104,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 92,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 233, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 97, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 65,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 207, 208,
+ 353, 353, 353, 284, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 6, 353, 353,
+ 353, 353, 353, 353, 353, 303, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 288, 353, 353, 353, 353, 353, 353,
+ 314, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 45, 353, 353, 353, 353,
+ 47, 353, 353, 353, 93, 353, 353, 353, 353, 353,
+ 55, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 352, 353, 200, 353, 353, 353, 140, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 225,
+ 353, 201, 353, 353, 353, 240, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 56, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 142, 122, 353,
+ 123, 353, 353, 353, 353, 121, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 160, 353, 353, 53, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 271, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 202, 353, 353, 353,
+
+ 353, 353, 205, 353, 211, 353, 353, 353, 353, 353,
+ 353, 239, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 108,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 135, 353,
+ 353, 353, 353, 353, 353, 353, 63, 353, 353, 353,
+ 29, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 20, 353, 353, 353, 353, 353, 353,
+ 30, 39, 353, 172, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 198, 353,
+
+ 353, 352, 353, 353, 353, 353, 353, 353, 80, 82,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 292, 353, 353, 353, 353, 251, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 124, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 159, 353, 49, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 307, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 166, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 301, 353, 353, 353, 231, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 317, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 184, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 117, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 179, 353, 192, 353, 353, 353, 353, 353, 353,
+ 353, 352, 353, 148, 353, 353, 353, 353, 353, 103,
+
+ 353, 353, 353, 353, 223, 353, 353, 353, 353, 353,
+ 353, 241, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 263, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 141,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 183, 353, 353,
+ 353, 353, 353, 353, 83, 353, 84, 353, 353, 353,
+ 353, 353, 64, 310, 353, 353, 353, 353, 353, 91,
+ 193, 353, 214, 353, 244, 353, 353, 206, 285, 353,
+ 353, 353, 353, 353, 353, 76, 353, 195, 353, 353,
+
+ 353, 353, 353, 353, 9, 353, 353, 353, 353, 353,
+ 107, 353, 353, 353, 353, 276, 353, 353, 353, 353,
+ 222, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 352, 353, 353, 353, 353, 182, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 168,
+ 353, 291, 353, 353, 353, 353, 353, 262, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 235,
+ 353, 353, 353, 353, 353, 283, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 165, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 311,
+ 353, 194, 353, 353, 353, 353, 353, 353, 353, 353,
+ 75, 77, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 106, 353, 353, 353, 353, 274, 353, 353,
+ 353, 353, 287, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 227, 37, 31, 33, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 38, 353, 32, 34, 353, 353, 353, 353, 353,
+ 353, 353, 353, 102, 353, 178, 353, 353, 353, 353,
+ 353, 353, 353, 352, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 229, 226, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 74, 353, 353, 353, 143,
+ 353, 125, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 161, 50, 353, 353, 353, 344, 13, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 305,
+
+ 353, 308, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 12, 353, 353, 22, 353, 353,
+ 353, 353, 353, 280, 353, 353, 353, 353, 289, 353,
+ 353, 353, 78, 353, 237, 353, 353, 353, 353, 353,
+ 228, 353, 353, 73, 353, 353, 353, 353, 353, 353,
+ 23, 353, 353, 46, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 177, 176, 353, 353,
+ 344, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 230, 224, 353, 242, 353, 353, 293, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 85, 353, 353, 353, 353, 275, 353, 353, 353,
+ 353, 210, 353, 353, 353, 353, 353, 236, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 315, 316, 174, 353, 353, 79, 353, 353, 353, 353,
+ 185, 353, 353, 353, 118, 120, 119, 353, 353, 353,
+ 25, 353, 353, 169, 353, 171, 353, 215, 353, 353,
+ 353, 353, 175, 353, 353, 353, 353, 245, 353, 353,
+ 353, 353, 353, 353, 353, 150, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 253, 353,
+ 353, 353, 353, 353, 353, 353, 324, 353, 27, 353,
+ 286, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 89, 216, 353,
+ 353, 273, 353, 309, 353, 209, 353, 353, 353, 353,
+ 353, 281, 59, 353, 353, 353, 353, 353, 353, 4,
+ 353, 353, 353, 353, 133, 149, 353, 353, 353, 189,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 248, 40,
+ 41, 353, 353, 353, 353, 353, 353, 353, 294, 353,
+
+ 353, 353, 353, 353, 353, 353, 261, 353, 353, 353,
+ 353, 353, 353, 353, 353, 219, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 88, 353, 60, 279, 353, 249, 353, 353, 353, 353,
+ 353, 11, 353, 353, 353, 353, 353, 353, 353, 353,
+ 132, 353, 353, 353, 353, 217, 94, 353, 353, 43,
+ 353, 353, 353, 353, 353, 353, 353, 353, 181, 353,
+ 353, 353, 353, 353, 353, 353, 152, 353, 353, 353,
+ 353, 252, 353, 353, 353, 353, 353, 260, 353, 353,
+ 353, 353, 146, 353, 353, 353, 126, 128, 127, 353,
+
+ 353, 353, 96, 100, 95, 162, 353, 353, 353, 353,
+ 86, 353, 353, 353, 353, 353, 353, 10, 353, 353,
+ 353, 353, 353, 277, 318, 353, 353, 353, 353, 353,
+ 323, 42, 353, 353, 353, 353, 353, 180, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 101, 99, 353, 54, 353, 353, 87,
+ 306, 353, 353, 353, 353, 24, 353, 353, 353, 353,
+ 353, 203, 353, 353, 353, 353, 353, 218, 353, 353,
+ 353, 353, 353, 353, 353, 353, 199, 353, 353, 170,
+
+ 81, 353, 353, 353, 353, 353, 295, 353, 353, 353,
+ 353, 353, 353, 353, 257, 353, 353, 256, 147, 353,
+ 353, 98, 51, 353, 153, 154, 157, 158, 155, 156,
+ 90, 304, 353, 353, 278, 353, 353, 353, 26, 353,
+ 173, 353, 353, 353, 353, 197, 353, 247, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 187, 186,
+ 44, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 302, 353, 353, 353, 353, 105, 353,
+
+ 246, 353, 270, 299, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 325, 353, 52, 5, 353,
+ 353, 238, 353, 353, 300, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 258, 28, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 259, 353,
+ 353, 353, 151, 353, 353, 353, 353, 353, 353, 353,
+ 353, 188, 353, 196, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 296, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 322, 353, 353, 266, 353, 353, 353, 353, 353,
+
+ 297, 353, 353, 353, 353, 353, 353, 298, 353, 353,
+ 353, 264, 353, 267, 268, 353, 353, 353, 353, 353,
+ 265, 269, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -793,17 +798,17 @@ static const YY_CHAR yy_meta[67] =
1, 1, 1, 1, 1, 1
} ;
-static const flex_int16_t yy_base[3502] =
+static const flex_int16_t yy_base[3542] =
{ 0,
0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
- 131, 137, 112, 118, 123, 142, 429, 383, 96, 9961,
- 9961, 9961, 160, 185, 116, 183, 229, 132, 175, 173,
+ 131, 137, 112, 118, 123, 142, 429, 383, 96,10077,
+ 10077,10077, 160, 185, 116, 183, 229, 132, 175, 173,
232, 50, 66, 120, 263, 275, 151, 323, 134, 375,
- 416, 286, 308, 283, 126, 237, 374, 9961, 9961, 9961,
- 95, 372, 9961, 9961, 9961, 186, 361, 373, 9961, 9961,
- 9961, 258, 309, 9961, 9961, 9961, 104, 293, 9961, 266,
- 9961, 167, 351, 281, 311, 9961, 9961, 9961, 369, 268,
- 9961, 9961, 9961, 146, 252, 378, 177, 0, 392, 0,
+ 416, 286, 308, 283, 126, 237, 374,10077,10077,10077,
+ 95, 372,10077,10077,10077, 186, 361, 373,10077,10077,
+ 10077, 258, 309,10077,10077,10077, 104, 293,10077, 266,
+ 10077, 167, 351, 281, 311,10077,10077,10077, 369, 268,
+ 10077,10077,10077, 146, 252, 378, 177, 0, 392, 0,
0, 303, 270, 235, 317, 362, 344, 384, 178, 177,
226, 420, 377, 330, 379, 402, 414, 419, 410, 453,
@@ -820,760 +825,768 @@ static const flex_int16_t yy_base[3502] =
734, 737, 724, 718, 745, 740, 749, 759, 766, 728,
773, 760, 772, 787, 819, 789, 762, 797, 339, 802,
827, 378, 808, 443, 832, 805, 699, 829, 725, 838,
- 836, 844, 843, 835, 852, 847, 866, 860, 849, 864,
- 875, 874, 871, 865, 868, 911, 885, 878, 893, 892,
- 894, 907, 908, 902, 913, 781, 909, 920, 921, 935,
- 912, 937, 930, 919, 943, 950, 948, 956, 957, 938,
- 958, 955, 953, 960, 954, 973, 969, 984, 994, 986,
- 993, 1002, 989, 995, 988, 996, 999, 987, 1013, 1014,
- 1022, 1026, 144, 1020, 1029, 1031, 1019, 1028, 1039, 1041,
-
- 1051, 1052, 1053, 1036, 1057, 1062, 1072, 1069, 1070, 1076,
- 1079, 1088, 1055, 1067, 1065, 1082, 1092, 1098, 1087, 1100,
- 1091, 1103, 1115, 1106, 1120, 1099, 1134, 1132, 1127, 1159,
- 1136, 1128, 1148, 1189, 1154, 1143, 1162, 1185, 1169, 1155,
- 1190, 1182, 1193, 1205, 1191, 1204, 1197, 1206, 1224, 1227,
- 1215, 1231, 1229, 1220, 1226, 1233, 1249, 1258, 9961, 1242,
- 1240, 1269, 1260, 1266, 1275, 1267, 1296, 1273, 1283, 1279,
- 1291, 1298, 1344, 1392, 1293, 1311, 1301, 1304, 1307, 9961,
- 1333, 1308, 1441, 1339, 1328, 1329, 1363, 1340, 1331, 1355,
- 1364, 1356, 1300, 1359, 1367, 1390, 1403, 1400, 1379, 1389,
-
- 1406, 1419, 1410, 1306, 1438, 1442, 1437, 1431, 1383, 1434,
- 1447, 1468, 1479, 1465, 1472, 1475, 1480, 1495, 1506, 1489,
- 1492, 1500, 1486, 1483, 1487, 1513, 1515, 1535, 1580, 1452,
- 1525, 1532, 1541, 1538, 1522, 1527, 1533, 1542, 1560, 1572,
- 1556, 1578, 1568, 1401, 1583, 1573, 1590, 1607, 1592, 1599,
- 1595, 1604, 1606, 1626, 1617, 1610, 1621, 1620, 1637, 1641,
- 1638, 1633, 1648, 1647, 1634, 1650, 1636, 9961, 1669, 9961,
- 1659, 1663, 1672, 1662, 1679, 1667, 1676, 9961, 1673, 1674,
- 1675, 1690, 1710, 1700, 1717, 1708, 1702, 1715, 1718, 1711,
- 1719, 1729, 1712, 1727, 1733, 1735, 1736, 1742, 1744, 1743,
-
- 1750, 1752, 1753, 1756, 1754, 1762, 1802, 9961, 1766, 1763,
- 1782, 1792, 1768, 1793, 1788, 1813, 1827, 1811, 1807, 1831,
- 1824, 1851, 1837, 1841, 1839, 1838, 1853, 1866, 1845, 1874,
- 1871, 1864, 1872, 1880, 1863, 1883, 1884, 1895, 1893, 1891,
- 1890, 9961, 1910, 1911, 1917, 1897, 1913, 1914, 1907, 1916,
- 1920, 1909, 1924, 1932, 1947, 1934, 1942, 1551, 1965, 1951,
- 1969, 1954, 1964, 1956, 1953, 1974, 1972, 1989, 1957, 1987,
- 1990, 1986, 1988, 1994, 2004, 2007, 2014, 2023, 1999, 2000,
- 2016, 2006, 2009, 2002, 2021, 2017, 2029, 2026, 2036, 2047,
- 2034, 2053, 2041, 2055, 2044, 2061, 2049, 2048, 2065, 2071,
-
- 2050, 2074, 2078, 2095, 2085, 2103, 2086, 2082, 2089, 2092,
- 2097, 2113, 2109, 2105, 9961, 2130, 2119, 2134, 2139, 2144,
- 2145, 2146, 2136, 2135, 2147, 2155, 2162, 2157, 2156, 2160,
- 2166, 2170, 2172, 2181, 2174, 2203, 2194, 2199, 2207, 2206,
- 2205, 2193, 2208, 2214, 2197, 2212, 2218, 2230, 2225, 2215,
- 2226, 2256, 2234, 2235, 2249, 2264, 2244, 2251, 2261, 2245,
- 2272, 2270, 2276, 2275, 2274, 2293, 2285, 2283, 2280, 2287,
- 2290, 2313, 2300, 2301, 2304, 2307, 2303, 2329, 2333, 2330,
- 2328, 2332, 2334, 2335, 2336, 2350, 2346, 2324, 2353, 2356,
- 2357, 2351, 2363, 2381, 2369, 2370, 2371, 2383, 2388, 2395,
-
- 2377, 2392, 2413, 2397, 2404, 2394, 2412, 2420, 2414, 2416,
- 2424, 2429, 2428, 2438, 2422, 2443, 2449, 2440, 2452, 2457,
- 2447, 2460, 2456, 2476, 2472, 2475, 2485, 2480, 2473, 2483,
- 2487, 2470, 2490, 2510, 2506, 2503, 2504, 9961, 2496, 2497,
- 2500, 2518, 2514, 2507, 2521, 2534, 2528, 2537, 2525, 2529,
- 2530, 2580, 9961, 2545, 9961, 9961, 2551, 9961, 9961, 2567,
- 2563, 9961, 2577, 2570, 2595, 2587, 2597, 2604, 2590, 2603,
- 2606, 2566, 2613, 2648, 2614, 2610, 2624, 2617, 2632, 2619,
- 2653, 2651, 2662, 2659, 2670, 2644, 2665, 2703, 2683, 2687,
- 2684, 2696, 2704, 2697, 2706, 2708, 2707, 2714, 2710, 2700,
-
- 2717, 2698, 2720, 2730, 2741, 2735, 2737, 2752, 2736, 2743,
- 2734, 2679, 2762, 2758, 2776, 9961, 2768, 2725, 2765, 2764,
- 2769, 2777, 2772, 2780, 2779, 2788, 2790, 2785, 2791, 2792,
- 2798, 2803, 2800, 2804, 2808, 2801, 2814, 2826, 2834, 2819,
- 9961, 2824, 2830, 2818, 2835, 2843, 2841, 2849, 2845, 2831,
- 2846, 2850, 2880, 2873, 2869, 2866, 2878, 2864, 2871, 2891,
- 9961, 2890, 2895, 2876, 2899, 2906, 2893, 2903, 2910, 2908,
- 2916, 2911, 2935, 2918, 2922, 2883, 2933, 2944, 2938, 2937,
- 2940, 2945, 2960, 2943, 2958, 2962, 2959, 2967, 2968, 2969,
- 2970, 2971, 2972, 2980, 2987, 2997, 2995, 3007, 2996, 2985,
-
- 3016, 3018, 3015, 3002, 3013, 3023, 3014, 3029, 3031, 3036,
- 3041, 3020, 3026, 3054, 3047, 3051, 3043, 3059, 3066, 3077,
- 3058, 3071, 3078, 3065, 3056, 3085, 3070, 9961, 3083, 3081,
- 9961, 3086, 3098, 3094, 3143, 3100, 3116, 3108, 3124, 3104,
- 3126, 3134, 3141, 3131, 3151, 3144, 3153, 3158, 3179, 3169,
- 3182, 3176, 3185, 3180, 3177, 3186, 3192, 3196, 3203, 3142,
- 3210, 3133, 381, 3221, 3204, 3147, 3214, 3259, 3206, 3215,
- 3222, 3227, 3242, 3229, 3247, 3241, 3248, 3225, 3231, 3256,
- 3269, 3271, 3268, 3263, 3275, 3270, 3283, 3140, 3289, 3284,
- 9961, 3314, 3310, 3298, 3316, 3306, 3327, 3318, 3305, 9961,
-
- 3320, 3325, 3322, 3331, 3326, 3336, 3337, 3339, 3343, 3340,
- 3356, 3362, 3363, 3367, 3358, 3379, 9961, 3361, 9961, 3364,
- 3376, 3387, 3374, 3383, 3389, 3394, 3403, 3406, 9961, 9961,
- 3410, 3404, 3416, 3385, 3418, 3414, 3412, 9961, 3430, 3453,
- 9961, 3454, 3444, 3435, 3439, 3434, 3433, 3452, 3448, 3437,
- 3464, 3472, 3468, 3482, 3474, 9961, 3466, 3473, 3492, 3493,
- 3486, 3480, 3499, 3500, 3491, 9961, 3506, 3501, 3516, 3511,
- 3508, 3514, 3518, 3531, 3539, 3519, 3528, 3532, 3545, 3529,
- 3556, 3558, 3549, 3555, 3562, 3563, 3567, 9961, 3565, 3553,
- 3557, 3578, 3581, 3588, 3582, 3584, 3583, 3580, 3597, 3603,
-
- 3585, 3609, 3598, 3590, 3612, 3608, 3624, 3607, 3627, 3621,
- 3618, 3626, 3630, 3620, 91, 3628, 3635, 3633, 3636, 9961,
- 3647, 3650, 3648, 3663, 3665, 3658, 128, 3662, 3657, 3669,
- 3675, 3673, 3686, 3667, 3696, 3703, 3685, 3699, 3708, 3706,
- 3702, 3705, 3712, 3700, 3721, 3718, 3707, 3728, 9961, 3724,
- 3727, 3732, 3738, 3730, 3742, 3756, 9961, 3754, 3759, 3766,
- 3764, 3769, 3765, 3781, 3763, 3777, 3785, 3773, 3788, 3789,
- 3805, 3799, 3803, 3798, 9961, 3818, 3815, 3819, 3809, 3822,
- 3831, 3830, 3823, 3828, 3833, 3836, 3844, 3846, 3849, 3845,
- 3847, 3851, 3871, 3866, 3872, 3862, 3863, 3875, 3870, 3873,
-
- 3889, 3886, 3890, 3879, 3908, 3887, 9961, 3923, 3909, 3906,
- 3914, 3910, 3911, 3921, 3913, 3944, 3936, 3929, 3918, 3945,
- 3982, 3948, 3950, 3965, 3966, 3957, 3970, 3969, 3971, 3975,
- 3984, 3992, 3998, 4018, 3988, 4002, 3973, 4007, 4004, 4022,
- 4019, 4012, 4009, 4042, 4036, 4034, 4061, 4039, 4045, 4055,
- 4086, 4051, 9961, 4049, 4072, 4046, 4065, 4095, 4084, 4076,
- 4089, 4082, 4091, 4088, 4105, 4103, 4110, 4111, 4118, 4114,
- 4130, 4115, 4122, 4133, 4125, 4121, 4142, 4136, 4139, 4150,
- 4157, 9961, 4158, 4160, 4145, 4162, 4168, 4155, 4176, 4177,
- 4174, 4169, 4172, 4180, 4188, 4183, 4191, 4189, 4202, 4206,
-
- 4203, 4217, 4195, 9961, 4220, 4199, 4226, 4210, 4227, 4234,
- 4238, 4222, 4240, 4247, 4250, 4239, 4254, 4249, 4251, 9961,
- 4267, 4268, 4266, 4274, 4273, 4276, 4261, 4275, 4289, 4270,
- 9961, 4287, 4278, 4294, 4284, 4288, 4295, 4314, 4315, 4319,
- 9961, 4329, 4313, 4310, 4312, 4316, 4320, 4326, 4335, 4331,
- 4323, 4346, 4360, 4349, 4343, 4362, 9961, 4350, 4379, 4354,
- 4359, 4374, 4370, 4373, 4387, 4399, 4376, 4381, 4403, 9961,
- 4395, 4394, 4408, 4418, 4397, 4401, 4415, 4431, 4432, 4420,
- 4421, 4434, 4429, 9961, 4426, 4444, 4451, 4454, 4446, 4452,
- 4453, 4425, 4463, 4464, 4460, 4471, 4473, 4465, 4480, 4487,
-
- 4490, 4491, 4498, 4496, 4502, 4489, 4497, 4500, 4507, 4531,
- 4533, 4523, 4538, 4540, 4535, 4526, 4522, 4546, 4549, 4550,
- 4553, 4554, 4556, 9961, 4552, 4559, 4562, 4567, 4560, 4547,
- 4576, 4568, 4592, 4577, 4588, 4595, 4587, 4586, 4611, 4621,
- 4590, 4606, 4612, 4616, 4617, 4620, 4622, 4609, 4624, 4613,
- 4640, 4630, 4628, 4651, 4644, 4653, 4665, 4647, 4656, 4657,
- 4660, 4668, 4643, 4646, 4684, 4686, 4677, 4678, 4687, 4694,
- 4698, 4695, 4703, 4688, 4708, 4705, 4727, 9961, 4692, 4715,
- 4716, 4721, 4722, 4736, 4734, 4713, 4735, 4740, 4747, 4751,
- 4760, 4749, 4754, 4748, 4763, 4775, 4759, 9961, 4767, 9961,
-
- 4768, 4766, 4787, 4797, 4780, 9961, 4801, 9961, 4802, 4803,
- 4790, 4792, 9961, 4810, 4799, 4784, 4809, 4814, 4821, 4823,
- 4825, 4824, 4837, 4830, 4852, 4845, 4840, 4841, 4835, 4839,
- 4862, 4861, 4864, 4869, 4877, 4876, 4880, 4873, 4894, 4883,
- 4879, 4886, 4904, 4896, 4907, 9961, 4899, 4911, 4903, 4913,
- 4901, 4909, 4919, 4928, 4923, 4924, 4951, 4953, 4936, 4939,
- 4957, 4960, 4962, 4941, 4963, 4966, 4828, 4950, 4977, 9961,
- 4968, 4973, 4972, 4975, 9961, 4996, 4979, 5004, 5006, 4997,
- 4992, 4998, 5009, 5014, 4999, 5008, 5002, 5040, 5021, 5045,
- 5049, 9961, 5018, 5048, 5030, 5056, 5051, 5061, 5065, 5057,
-
- 5063, 5070, 5066, 5069, 5081, 5082, 5080, 5083, 5084, 5086,
- 5107, 5101, 5109, 5089, 5110, 5105, 5113, 5102, 5097, 5104,
- 5121, 5108, 5111, 5129, 5128, 5126, 5150, 5155, 5139, 5152,
- 9961, 5148, 5149, 5156, 5167, 5144, 5147, 5145, 5166, 5168,
- 9961, 5197, 5178, 5194, 5188, 5201, 5191, 5190, 5184, 5185,
- 5205, 5195, 5212, 5211, 5218, 9961, 5228, 9961, 5215, 5233,
- 5244, 5249, 5239, 5235, 5254, 5252, 5245, 5237, 5260, 5266,
- 5263, 5255, 5261, 5264, 5267, 5290, 5280, 5303, 5297, 5285,
- 5293, 5291, 5294, 5295, 5315, 5314, 5313, 9961, 9961, 5312,
- 5316, 5322, 5328, 5318, 5326, 5347, 5351, 5352, 5338, 5345,
-
- 5341, 5381, 9961, 5353, 5355, 5369, 5368, 5374, 5380, 5377,
- 5390, 5383, 5378, 5404, 5396, 9961, 5386, 5389, 5414, 5399,
- 5418, 5416, 9961, 5420, 9961, 5405, 5415, 5429, 5417, 5426,
- 5423, 5431, 5425, 5432, 5443, 5460, 5471, 5473, 5456, 5472,
- 5455, 5458, 5459, 5474, 5464, 5484, 5466, 5479, 5462, 9961,
- 5490, 5489, 5493, 5487, 5498, 5505, 5507, 5504, 5500, 9961,
- 5515, 5519, 5527, 5517, 5506, 5535, 5522, 5531, 5532, 5538,
- 5533, 5545, 5549, 5554, 9961, 5544, 5553, 5569, 5555, 5557,
- 5571, 5583, 5582, 5586, 9961, 5584, 5578, 5574, 5591, 5580,
- 5593, 5594, 5579, 5581, 5605, 5607, 5610, 5612, 5618, 5616,
-
- 5614, 5626, 5624, 5620, 5652, 5643, 5634, 5635, 5641, 5638,
- 9961, 5644, 5647, 5653, 5658, 5670, 5667, 5676, 5682, 5687,
- 5668, 5689, 5691, 5679, 5680, 5698, 5707, 5717, 5699, 9961,
- 5718, 5703, 5722, 5715, 5706, 5729, 5723, 5716, 5719, 5735,
- 5725, 5733, 5734, 5748, 5756, 5750, 5742, 5759, 5765, 5752,
- 5767, 5769, 5768, 9961, 5806, 5762, 5775, 5789, 5782, 5792,
- 5809, 5799, 5801, 5802, 5741, 5784, 5812, 5804, 5800, 5829,
- 5825, 5818, 9961, 9961, 5832, 5816, 5833, 9961, 5835, 5826,
- 5851, 5839, 5854, 5837, 5846, 5856, 5866, 5850, 5869, 5853,
- 5868, 9961, 5862, 5877, 5871, 5880, 5897, 5898, 9961, 5882,
-
- 5904, 5886, 5903, 5896, 5890, 5893, 5907, 5913, 5911, 5895,
- 5914, 5931, 5938, 5924, 5930, 5932, 9961, 5927, 5928, 5948,
- 5949, 5941, 5946, 9961, 5943, 5963, 5965, 5958, 5969, 5981,
- 5979, 5984, 5982, 5976, 5972, 5985, 5993, 5987, 5996, 5974,
- 5999, 6003, 6010, 6006, 6002, 6020, 6024, 9961, 6023, 6025,
- 6029, 6035, 9961, 6038, 6058, 6044, 9961, 6045, 6034, 6052,
- 6042, 6069, 9961, 6055, 6062, 6061, 6074, 6053, 6079, 6064,
- 6082, 6070, 6071, 6072, 6098, 6083, 9961, 6096, 6085, 6102,
- 9961, 6111, 6115, 6118, 6120, 6101, 6088, 6126, 6119, 6127,
- 6128, 9961, 6131, 9961, 6141, 6138, 6139, 9961, 6145, 6149,
-
- 6147, 6156, 6153, 6164, 6165, 6172, 6173, 6158, 6177, 6163,
- 6168, 6189, 6196, 6199, 6180, 6194, 6188, 6195, 9961, 6217,
- 6192, 6215, 6207, 6211, 6222, 6220, 6214, 6238, 6233, 9961,
- 9961, 6240, 9961, 6245, 6234, 6236, 9961, 6242, 6239, 6260,
- 6247, 6267, 6269, 6258, 6278, 6273, 9961, 6282, 6285, 9961,
- 6265, 6277, 6294, 6279, 6290, 6280, 6291, 6298, 6292, 6295,
- 6315, 6318, 6308, 6319, 6306, 6321, 6328, 9961, 6317, 6326,
- 6329, 6339, 6333, 6342, 6364, 6360, 6350, 9961, 6366, 6373,
- 6354, 6374, 6376, 9961, 6377, 9961, 6378, 6381, 6368, 6382,
- 6393, 6387, 9961, 6413, 6402, 6418, 6395, 6414, 6422, 6420,
-
- 6423, 6408, 6407, 6435, 6431, 6443, 6432, 6437, 6430, 9961,
- 6441, 6447, 6466, 6468, 6452, 6453, 6477, 6470, 6474, 6463,
- 6483, 6478, 6480, 6484, 6488, 6497, 6493, 6495, 9961, 6505,
- 6507, 6500, 6528, 6518, 6520, 6519, 9961, 6523, 6532, 6533,
- 9961, 6526, 6522, 6534, 6551, 6536, 6549, 6552, 6546, 6558,
- 6559, 6570, 9961, 6565, 6576, 6560, 6578, 6579, 6573, 9961,
- 9961, 6602, 9961, 6585, 6566, 6598, 6596, 6592, 6611, 6622,
- 6615, 6626, 6609, 6612, 6628, 6625, 6633, 9961, 6618, 6601,
- 6634, 6667, 6638, 6639, 6647, 6655, 6648, 9961, 9961, 6643,
- 6670, 6672, 6676, 6677, 6674, 6661, 6689, 6675, 6690, 6687,
-
- 6688, 6694, 9961, 6705, 6699, 6706, 6702, 9961, 6700, 6723,
- 6707, 6716, 6733, 6717, 6724, 6721, 6734, 6720, 6745, 6749,
- 6744, 6751, 6737, 6752, 6761, 6755, 6772, 6762, 6766, 6754,
- 9961, 6779, 6776, 6786, 6769, 6767, 6788, 6789, 6796, 6799,
- 6697, 9961, 6794, 9961, 6785, 6803, 6818, 6825, 6811, 6828,
- 6834, 6826, 6830, 6819, 6835, 6840, 6842, 6847, 6850, 6844,
- 6851, 6862, 6870, 6865, 6872, 6868, 9961, 6875, 6861, 6867,
- 6871, 6884, 6885, 6874, 6896, 6886, 6903, 6890, 6910, 6916,
- 6918, 6907, 6913, 6902, 6911, 6908, 9961, 6923, 6924, 6914,
- 6926, 6929, 6930, 6941, 6957, 6939, 6940, 6949, 6960, 9961,
-
- 6950, 6942, 6970, 9961, 6952, 6955, 6966, 6971, 6980, 6976,
- 6985, 6979, 6986, 9961, 6983, 6984, 6989, 7000, 6991, 6997,
- 6993, 7024, 7017, 7027, 7030, 9961, 7035, 7020, 7034, 7038,
- 7042, 7036, 7037, 7063, 7045, 9961, 7069, 7073, 7064, 7060,
- 7085, 7061, 7066, 7088, 7084, 7087, 7072, 7090, 7083, 7093,
- 7095, 7098, 7109, 7112, 7128, 7132, 7117, 9961, 7113, 9961,
- 7115, 7129, 7136, 7146, 7142, 7140, 7153, 7145, 7162, 9961,
- 7131, 7152, 7161, 7156, 7166, 9961, 7173, 7170, 7172, 7178,
- 9961, 7188, 7189, 7176, 7180, 7201, 7203, 9961, 7206, 7205,
- 7215, 7227, 7229, 7216, 7210, 7212, 7233, 7224, 7230, 7219,
-
- 7239, 7232, 7231, 7243, 9961, 7237, 7246, 7250, 7257, 7260,
- 7265, 7258, 7275, 7255, 7267, 9961, 7276, 7263, 7266, 7277,
- 7284, 7289, 7290, 7302, 7292, 7299, 7294, 7301, 7304, 7319,
- 7311, 7314, 9961, 7318, 7317, 7329, 7340, 7335, 7346, 9961,
- 7328, 9961, 7338, 7341, 7350, 7345, 7357, 9961, 9961, 7359,
- 7354, 7362, 7366, 7367, 9961, 9961, 7378, 9961, 7364, 9961,
- 7369, 7372, 9961, 9961, 7387, 7380, 7381, 7390, 7399, 7397,
- 9961, 7400, 9961, 7416, 7411, 7405, 7391, 7415, 9961, 7409,
- 7422, 7418, 7423, 7434, 9961, 7432, 7442, 7426, 7431, 9961,
- 7451, 7453, 7445, 7436, 9961, 7459, 7465, 7461, 7449, 7468,
-
- 7469, 7473, 7470, 7471, 7478, 7494, 7462, 7483, 7501, 7507,
- 7508, 7513, 7514, 7504, 7497, 7517, 7518, 7524, 7511, 7500,
- 7527, 7509, 7532, 7521, 7555, 7538, 7558, 7560, 7550, 7551,
- 7562, 7556, 7547, 7565, 7552, 7566, 7571, 7564, 7575, 7577,
- 7581, 7592, 7582, 7593, 7588, 7609, 7600, 7613, 7608, 7616,
- 7627, 9961, 7628, 7596, 7598, 7623, 7633, 7624, 7644, 7652,
- 7657, 7658, 9961, 7660, 9961, 7662, 7648, 7653, 7651, 7650,
- 9961, 7674, 7654, 7673, 7676, 7689, 7682, 7681, 7684, 7687,
- 7688, 7711, 9961, 7707, 7699, 7697, 7708, 7718, 9961, 7721,
- 7720, 7709, 7710, 7734, 7735, 7724, 7725, 7733, 7737, 7746,
-
- 7758, 7759, 7745, 7748, 7757, 9961, 7767, 7771, 7779, 7760,
- 7773, 7762, 7768, 7786, 7776, 7777, 7794, 7800, 7801, 7805,
- 7810, 9961, 7792, 9961, 7803, 7795, 7804, 7813, 7815, 7830,
- 7824, 7826, 9961, 9961, 7828, 7822, 7836, 7831, 7832, 7854,
- 7853, 7841, 7857, 9961, 7851, 7863, 7865, 7869, 9961, 7859,
- 7875, 7877, 7876, 9961, 7873, 7878, 7894, 7879, 7880, 7889,
- 7903, 7901, 7902, 7905, 7893, 7911, 9961, 9961, 9961, 9961,
- 7914, 7909, 7919, 7920, 7921, 7930, 7940, 7941, 7927, 7932,
- 7928, 9961, 7951, 9961, 9961, 7948, 7957, 7942, 7958, 7964,
- 7946, 7973, 7966, 9961, 7971, 9961, 7976, 7983, 7979, 7987,
-
- 7995, 7991, 7978, 8002, 8000, 7999, 7993, 7998, 8017, 8014,
- 8027, 8015, 8031, 8032, 8033, 9961, 9961, 8022, 8037, 8042,
- 8052, 8034, 8043, 8026, 8055, 8047, 8060, 8059, 8056, 8069,
- 8063, 8061, 8078, 8075, 8064, 9961, 8074, 8088, 8082, 9961,
- 8087, 9961, 8089, 8092, 8095, 8104, 8091, 8101, 8105, 8114,
- 8120, 9961, 9961, 8111, 8135, 8128, 9961, 9961, 8124, 8119,
- 8126, 8136, 8141, 8130, 8133, 8144, 8154, 8146, 9961, 8152,
- 9961, 8157, 8160, 8158, 8153, 8179, 8187, 8170, 8194, 8183,
- 8182, 8191, 9961, 8184, 8185, 9961, 8200, 8199, 8197, 8189,
- 8192, 9961, 8212, 8204, 8208, 8232, 9961, 8233, 8234, 8231,
-
- 9961, 8237, 9961, 8221, 8239, 8230, 8250, 8235, 9961, 8226,
- 8251, 9961, 8243, 8254, 8253, 8259, 8262, 9961, 8255, 8249,
- 9961, 8264, 8285, 8286, 8288, 8277, 8290, 8280, 8278, 8281,
- 8302, 8298, 8297, 9961, 9961, 8305, 8304, 73, 8321, 8283,
- 8307, 8310, 8312, 8308, 8313, 8322, 8341, 9961, 9961, 8337,
- 9961, 8335, 8344, 9961, 8325, 8348, 8345, 8349, 8353, 8361,
- 8336, 8368, 8359, 8370, 8378, 8373, 8371, 8383, 8401, 8404,
- 8388, 8392, 8402, 8411, 8419, 8421, 8397, 8418, 8405, 8400,
- 8427, 8428, 8416, 8431, 8442, 8417, 8439, 9961, 8456, 8457,
- 8458, 8447, 9961, 8467, 8463, 8471, 8468, 9961, 8472, 8466,
-
- 8478, 8480, 8482, 9961, 8483, 8476, 8477, 8497, 8492, 8485,
- 8498, 8520, 8504, 8512, 8518, 9961, 9961, 9961, 8524, 8526,
- 9961, 8527, 8516, 8507, 8519, 9961, 8535, 8533, 8538, 9961,
- 9961, 8536, 8547, 8546, 9961, 8548, 8563, 9961, 8554, 9961,
- 8549, 9961, 8562, 8573, 8571, 8574, 9961, 8575, 8579, 8577,
- 8607, 9961, 8585, 8586, 8587, 8594, 8589, 8596, 8612, 9961,
- 8601, 8619, 8620, 8622, 8613, 8614, 8606, 8632, 8630, 8634,
- 8618, 8650, 9961, 8651, 8657, 8658, 8659, 8646, 8641, 8652,
- 9961, 8649, 9961, 8666, 9961, 8661, 8668, 8676, 8682, 8683,
- 8678, 8690, 8695, 8684, 8701, 8703, 8688, 8687, 8716, 8715,
-
- 9961, 9961, 8719, 8720, 9961, 8711, 9961, 8721, 9961, 8725,
- 8728, 8718, 8733, 8730, 9961, 8736, 8731, 8745, 8742, 8743,
- 8737, 9961, 8752, 8759, 8748, 8765, 9961, 9961, 8757, 8779,
- 8780, 9961, 8760, 8788, 8789, 8775, 8771, 8795, 8786, 8792,
- 8776, 8804, 8802, 8793, 8806, 8808, 8810, 8824, 8831, 8829,
- 9961, 9961, 9961, 8828, 8816, 8815, 8811, 8841, 8850, 8842,
- 9961, 8854, 8839, 8857, 8845, 8851, 8856, 8849, 9961, 8853,
- 8852, 8863, 8869, 8875, 8866, 8878, 8886, 9961, 8898, 8899,
- 8901, 8889, 8902, 8904, 8908, 8910, 8911, 8905, 8893, 8922,
- 8909, 9961, 8923, 9961, 9961, 8920, 9961, 8921, 8929, 8925,
-
- 8931, 8941, 9961, 8927, 8933, 8936, 8947, 8937, 8956, 8940,
- 8962, 9961, 8977, 8967, 8954, 8970, 9961, 9961, 8958, 8976,
- 9961, 8990, 8986, 8981, 8982, 8984, 8985, 8998, 8994, 9961,
- 8997, 9000, 9009, 9010, 9011, 9007, 9025, 9961, 9027, 9014,
- 9020, 9022, 9961, 9021, 9028, 9046, 9024, 9048, 9961, 9054,
- 9041, 9055, 9060, 9961, 9050, 9071, 9066, 9961, 9961, 9076,
- 9078, 9080, 9961, 9961, 9961, 9961, 9083, 9089, 9077, 9085,
- 9961, 9095, 9101, 9110, 9102, 9115, 9113, 9961, 9114, 9109,
- 9120, 9106, 9111, 9961, 9961, 9107, 9112, 9121, 9130, 9123,
- 9961, 9961, 9131, 9128, 9145, 9151, 9146, 9961, 9147, 9158,
-
- 9164, 9157, 9167, 9169, 9171, 9162, 9170, 9191, 9186, 9172,
- 9155, 9190, 9185, 9196, 9204, 9189, 9210, 9184, 9213, 9214,
- 9215, 9207, 9216, 9961, 9961, 9220, 9961, 9224, 9217, 9961,
- 9961, 9225, 9229, 9238, 9239, 9961, 9245, 9250, 9254, 9255,
- 9231, 9961, 9251, 9259, 9252, 9256, 9242, 9961, 9263, 9248,
- 9264, 9258, 9279, 9281, 9269, 9271, 9961, 9284, 9274, 9961,
- 9961, 9285, 9277, 9283, 9301, 9287, 9961, 9310, 9320, 9304,
- 9311, 9298, 9306, 9307, 9961, 9315, 9326, 9961, 9961, 9337,
- 9312, 9961, 9961, 9329, 9961, 9961, 9961, 9961, 9961, 9961,
- 9961, 9961, 9344, 9343, 9961, 9339, 9357, 9358, 9961, 9359,
-
- 9961, 9338, 9351, 9363, 9354, 9961, 9366, 9961, 9368, 9372,
- 9370, 9387, 9377, 9395, 9385, 9381, 9388, 9393, 9378, 9402,
- 9404, 9399, 9416, 9407, 9419, 9432, 9415, 9434, 9961, 9961,
- 9961, 9423, 9425, 9441, 9438, 9449, 9452, 9454, 9456, 9444,
- 9440, 9455, 9464, 9465, 9448, 9462, 9483, 9472, 9476, 9479,
- 9493, 9474, 9495, 9961, 9498, 9487, 9489, 9505, 9961, 9492,
- 9961, 9491, 9961, 9961, 9512, 9516, 9515, 9511, 9529, 9531,
- 9513, 9520, 9518, 9536, 9528, 9961, 9546, 9961, 9961, 9532,
- 9542, 9961, 9534, 9545, 9961, 9547, 9560, 9551, 9539, 9558,
- 9563, 9572, 9576, 9583, 9961, 9961, 9564, 9568, 9569, 9593,
-
- 9595, 9606, 9601, 9607, 9609, 9611, 9598, 9610, 9961, 9618,
- 9619, 9621, 9961, 9622, 9604, 9625, 9628, 9635, 9640, 9637,
- 9644, 9961, 9641, 9961, 9658, 9651, 9661, 9646, 9653, 9662,
- 9669, 9671, 9664, 9961, 9668, 9678, 9681, 9685, 9706, 9696,
- 9702, 9691, 9711, 9712, 9713, 9714, 9718, 9719, 9697, 9727,
- 9703, 9961, 9720, 9729, 9961, 9730, 9745, 9736, 9739, 9759,
- 9961, 9751, 9742, 9746, 9763, 9767, 9769, 9961, 9768, 9770,
- 9772, 9961, 9766, 9961, 9961, 9775, 9762, 9782, 9783, 9784,
- 9961, 9961, 9961, 9841, 9848, 9855, 9862, 9869, 9876, 9883,
- 102, 9890, 9897, 9904, 9911, 9918, 9925, 9932, 9939, 9946,
-
- 9953
+ 836, 855, 843, 831, 845, 847, 869, 863, 865, 864,
+ 874, 871, 866, 870, 868, 910, 882, 893, 895, 894,
+ 922, 900, 928, 904, 920, 781, 913, 923, 933, 934,
+ 917, 938, 927, 921, 940, 942, 958, 961, 962, 947,
+ 966, 960, 956, 965, 957, 974, 955, 963, 985, 989,
+ 990, 991, 992, 982, 993, 999, 1002, 1000, 1019, 1012,
+ 1022, 1027, 144, 1014, 1029, 1034, 1017, 1016, 1042, 1043,
+
+ 1039, 1041, 1058, 1049, 1069, 1065, 1070, 1074, 1072, 1066,
+ 1084, 1085, 1061, 1064, 1062, 1089, 1086, 1100, 1088, 1113,
+ 1099, 1101, 1120, 1105, 1122, 1112, 1139, 1132, 1126, 1161,
+ 1127, 1137, 1162, 1169, 1165, 1144, 1164, 1183, 1198, 1199,
+ 1156, 1201, 1189, 1196, 1215, 1200, 1210, 1220, 1217, 1223,
+ 1229, 1225, 1234, 1231, 1235, 1244, 1226, 1148, 1262,10077,
+ 1249, 1250, 1277, 1268, 1275, 1282, 1270, 1300, 1279, 1297,
+ 1283, 1293, 1312, 1348, 1396, 1306, 1302, 1313, 1320, 1304,
+ 10077, 1333, 1327, 1445, 1343, 1329, 1364, 1367, 1350, 1355,
+ 1368, 1377, 1362, 1395, 1376, 1389, 1391, 1436, 1446, 1394,
+
+ 1407, 1410, 1401, 1423, 1416, 1452, 1429, 1443, 1454, 1435,
+ 1465, 1450, 1478, 1499, 1474, 1473, 1486, 1492, 1501, 1505,
+ 1500, 1518, 1511, 1496, 1509, 1527, 1523, 1526, 1538, 1583,
+ 1549, 1539, 1550, 1552, 1553, 1564, 1536, 1565, 1568, 1575,
+ 1576, 1566, 1589, 1593, 1594, 1602, 1598, 1608, 1617, 1610,
+ 1603, 1605, 1634, 1635, 1641, 1631, 1627, 1628, 1636, 1649,
+ 1651, 1653, 1659, 1663, 1655, 1667, 1680, 1670,10077, 1684,
+ 10077, 1668, 1691, 1675, 1694, 1679, 1704, 1690, 1693,10077,
+ 1715, 1695, 1714, 1687, 1624, 1716, 1677, 1719, 1730, 1737,
+ 1726, 1736, 1732, 1743, 1738, 1746, 1760, 1740, 1761, 1757,
+
+ 1759, 1764, 1777, 1774, 1785, 1767, 1773, 1784, 1824,10077,
+ 1776, 1781, 1799, 1818, 1801, 1810, 1819, 1827, 1851, 1806,
+ 1834, 1853, 1846, 1858, 1849, 1852, 1871, 1861, 1866, 1880,
+ 1867, 1888, 1882, 1890, 1885, 1903, 1887, 1883, 1913, 1911,
+ 1907, 1908, 1915,10077, 1916, 1924, 1932, 1927, 1929, 1922,
+ 1938, 1944, 1945, 1943, 1935, 1954, 1971, 1950, 1968, 1622,
+ 1951, 1963, 1984, 1970, 1966, 1972, 1965, 1978, 1988, 2003,
+ 1990, 2021, 2001, 2004, 2008, 2025, 2023, 2024, 2030, 2032,
+ 2013, 2017, 2033, 2037, 2026, 2035, 2044, 2049, 2050, 2039,
+ 2051, 2070, 2048, 2063, 2061, 2075, 2069, 2085, 2072, 2071,
+
+ 2084, 2074, 2088, 2097, 2096, 2098, 2091, 2125, 2108, 2120,
+ 2111, 2118, 2122, 2135, 2132, 2124,10077, 2114, 2141, 2154,
+ 2161, 2153, 2166, 2167, 2155, 2152, 2168, 2163, 2173, 2181,
+ 2183, 2177, 2188, 2185, 2193, 2202, 2204, 2147, 2212, 2214,
+ 1800, 2219, 2220, 2203, 2210, 2213, 2230, 2223, 2196, 2248,
+ 2231, 2229, 2236, 2250, 2265, 2251, 2254, 2266, 2273, 2257,
+ 2263, 2269, 2275, 2278, 2280, 2301, 2288, 2296, 2305, 2316,
+ 2317, 2299, 2307, 2302, 2323, 2312, 2315, 2322, 2334, 2335,
+ 2332, 2337, 2329, 2339, 2343, 2345, 2350, 2371, 2360, 2376,
+ 2359, 2364, 2361, 2365, 2368, 2380, 2390, 2386, 2381, 2391,
+
+ 2396, 2393, 2417, 2405, 2424, 2423, 2416, 2410, 2434, 2421,
+ 2428, 2431, 2440, 2450, 2446, 2460, 2457, 2246, 2461, 2470,
+ 2451, 2472, 2462, 2454, 2467, 2473, 2443, 2477, 2480, 2497,
+ 2491, 2499, 2496, 2500, 2492, 2515, 2516, 2520, 2524, 2512,
+ 10077, 2503, 2536, 2526, 2530, 2533, 2537, 2532, 2538, 2547,
+ 2551, 2548, 2542, 2556, 2602,10077, 2553,10077,10077, 2554,
+ 10077,10077, 2561, 2573,10077, 2585, 2581, 2583, 2582, 2600,
+ 2615, 2608, 2578, 2606, 2605, 2635, 2662, 2630, 2640, 2634,
+ 2626, 2652, 2641, 2682, 2668, 2651, 2671, 2672, 2633, 2685,
+ 2710, 2677, 2693, 2691, 2711, 2718, 2712, 2720, 2721, 2722,
+
+ 2725, 2724, 2713, 2730, 2708, 2737, 2733, 2757, 2747, 2751,
+ 2766, 2752, 2759, 2750, 2774, 2768, 2775, 2781,10077, 2777,
+ 2785, 2769, 2792, 2786, 2795, 2800, 2799, 2798, 2807, 2810,
+ 2808, 2793, 2809, 2813, 2821, 2824, 2823, 2826, 2829, 2822,
+ 2838, 2847, 2857, 2835,10077, 2850, 2851, 2837, 2858, 2862,
+ 2864, 2865, 2866, 2874, 2873, 2883, 2908, 2878, 2887, 2849,
+ 2895, 2888, 2893, 2910,10077, 2914, 2917, 2897, 2920, 2906,
+ 2922, 2926, 2928, 2931, 2947, 2907, 2932, 2943, 2941, 2937,
+ 2953, 2954, 2949, 2948, 2957, 2973, 2964, 2968, 2980, 2986,
+ 2977, 2970, 2992, 2983, 2994, 2988, 2989, 2995, 2998, 3010,
+
+ 3025, 3012, 3029, 3013, 3016, 3037, 3038, 3030, 3023, 3035,
+ 3039, 3046, 3048, 3051, 3053, 3056, 3050, 3045, 3065, 3061,
+ 3070, 3066, 3074, 3086, 3096, 3072, 3094, 3099, 3083, 3092,
+ 3110, 3090,10077, 3106, 3093,10077, 3111, 3108, 3119, 3165,
+ 3117, 3144, 3135, 3122, 3127, 3156, 3138, 3155, 3158, 3164,
+ 3161, 3157, 3175, 3190, 3183, 3199, 3188, 3202, 3195, 3191,
+ 3197, 3210, 3217, 3215, 3146, 3233, 3172, 381, 3235, 3218,
+ 3224, 3230, 3275, 3241, 3227, 3238, 3246, 3260, 3250, 3263,
+ 3270, 3264, 3247, 3265, 3280, 3277, 3304, 3287, 3288, 3302,
+ 3307, 3312, 3300, 3313, 3315,10077, 3324, 3329, 3319, 3336,
+
+ 3334, 3342, 3343, 3331,10077, 3340, 3344, 3339, 3359, 3351,
+ 3345, 3368, 3361, 3365, 3363, 3372, 3376, 3380, 3387, 3377,
+ 3401,10077, 3382,10077, 3388, 3397, 3400, 3399, 3408, 3412,
+ 3404, 3428, 3429,10077,10077, 3431, 3414, 3437, 3442, 3445,
+ 3439, 3432, 3440,10077, 3427, 3473,10077, 3475, 3459, 3457,
+ 3458, 3461, 3463, 3469, 3468, 3492, 3474, 3496, 3484, 3488,
+ 3498,10077, 3504, 3495, 3508, 3509, 3501, 3515, 3522, 3525,
+ 3506,10077, 3523, 3521, 3526, 3543, 3546, 3538, 3540, 3552,
+ 3559, 3544, 3542, 3548, 3563, 3564, 3581, 3583, 3585, 3567,
+ 3579, 3586, 3587, 3588,10077, 3591, 3580, 3582, 3605, 3611,
+
+ 3597, 3594, 3608, 3604, 3601, 3623, 3624, 3625, 3628, 3619,
+ 3629, 3615, 3644, 3645, 3642, 3643, 3658, 3640, 3651, 3650,
+ 3655, 91, 3656, 3667, 3660, 3663,10077, 3672, 3666, 3687,
+ 3675, 3692, 3678, 128, 3682, 3689, 3699, 3703, 3701, 3712,
+ 3693, 3722, 3726, 3716, 3724, 3725, 3728, 3720, 3730, 3731,
+ 3735, 3745, 3739, 3752, 3749,10077, 3742, 3751, 3756, 3755,
+ 3769, 3760, 3784,10077, 3777, 3785, 3783, 3790, 3792, 3779,
+ 3802, 3795, 3791, 3812, 3818, 3815, 3816, 3819, 3817, 3822,
+ 3835,10077, 3837, 3842, 3848, 3832, 3851, 3836, 3857, 3850,
+ 3855, 3849, 3882, 3871, 3880, 3861, 3872, 3869, 3883, 3896,
+
+ 3888, 3862, 3884, 3899, 3897, 3893, 3913, 3910, 3915, 3900,
+ 3921, 3943, 3924,10077, 3946, 3930, 3933, 3931, 3935, 3937,
+ 3949, 3938, 3983, 3948, 3965, 3971, 3968, 4011, 3973, 3978,
+ 3961, 3990, 3994, 3995, 3998, 3996, 4010, 4008, 3981, 4026,
+ 4045, 4013, 4014, 4049, 4043, 4035, 4051, 4044, 4046, 4054,
+ 4068, 4060, 4062, 4061, 4093, 4085, 4053, 4095, 4070, 4087,
+ 10077, 4099, 4089, 4088, 4091, 4110, 4112, 4097, 4123, 4118,
+ 4126, 4122, 4124, 4130, 4147, 4151, 4146, 4142, 4153, 4149,
+ 4155, 4159, 4157, 4140, 4167, 3916, 4162, 4160, 4186,10077,
+ 4192, 4191, 4178, 4189, 4200, 4181, 4203, 4205, 4202, 4190,
+
+ 4193, 4210, 4209, 4215, 4222, 4218, 4220, 4217, 4238, 4237,
+ 4224, 4232,10077, 4249, 4241, 4255, 4247, 4258, 4264, 4266,
+ 4251, 4270, 4268, 4279, 4262, 4286, 4287, 4288,10077, 4291,
+ 4305, 4298, 4299, 4310, 4300, 4289, 4306, 4312, 4302,10077,
+ 4315, 4316, 4313, 4326, 4318, 4325, 4329, 4351, 4349,10077,
+ 4356, 4340, 4337, 4339, 4346, 4363, 4344, 4368, 4352, 4366,
+ 4370, 4375, 4374, 4371, 4387,10077, 4381, 4410, 4385, 4397,
+ 4401, 4399, 4396, 4402, 4426, 4416, 4430, 4408,10077, 4421,
+ 4435, 4440, 4446, 4423, 4428, 4438, 4455, 4458, 4450, 4444,
+ 4465, 4452,10077, 4461, 4462, 4466, 4473, 4482, 4476, 4477,
+
+ 4481, 4493, 4490, 4491, 4498, 4499, 4500, 4497, 4517, 4521,
+ 4524, 4513, 4509, 4525, 4518, 4520, 4541, 4533, 4537, 4559,
+ 4564, 4549, 4565, 4567, 4568, 4554, 4548, 4573, 4576, 4577,
+ 4584, 4581, 4586,10077, 4583, 4585, 4579, 4580, 4590, 4604,
+ 4605, 4592, 4621, 4603, 4616, 4628, 4613, 4615, 4641, 4644,
+ 4626, 4636, 4638, 4639, 4643, 4651, 4640, 4642, 4654, 4679,
+ 4670, 4660, 4650, 4687, 4669, 4684, 4696, 4673, 4674, 4685,
+ 4686, 4689, 4695, 4697, 4683, 4720, 4723, 4710, 4711, 4715,
+ 4728, 4733, 4734, 4736, 4731, 4732, 4738, 4767,10077, 4725,
+ 4757, 4749, 4752, 4758, 4775, 4776, 4782, 4765, 4770, 4785,
+
+ 4784, 4789, 4778, 4777, 4797, 4794, 4792, 4818,10077, 4805,
+ 10077, 4807, 4821, 4829, 4832, 4811,10077, 4835,10077, 4833,
+ 4837, 4824, 4827, 4845,10077, 4839, 4825, 4848, 4838, 4851,
+ 4875, 4862, 4858, 4863, 4878, 4866, 4885, 4872, 4869, 4896,
+ 4867, 4895, 4890, 4902, 4903, 4919, 4905, 4900, 4922, 4908,
+ 4930, 4912, 4906, 4929, 4932, 4918, 4939,10077, 4941, 4947,
+ 4949, 4955, 4938, 4951, 4956, 4953, 4961, 4959, 4978, 4980,
+ 4971, 4974, 4990, 4983, 4988, 4989, 5001, 4999, 5000, 5002,
+ 5013,10077, 5010, 5014, 5006, 5017,10077, 5027, 5011, 5033,
+ 5038, 5028, 5029, 5030, 5040, 5052, 5046, 5036, 5051, 5078,
+
+ 5063, 5072, 5073,10077, 5059, 5080, 5062, 5079, 5083, 5093,
+ 5098, 5089, 5100, 5112, 5102, 5110, 5104, 5106, 5099, 5114,
+ 5119, 5135, 5137, 5140, 5131, 5143, 5125, 5142, 5150, 5149,
+ 5138, 5133, 5152, 5139, 5141, 5158, 5164, 5166, 5162, 5169,
+ 5186, 5175, 5183,10077, 5180, 5185, 5182, 5206, 5196, 5202,
+ 5200, 5211, 5205,10077, 5203, 5208, 5229, 5219, 5235, 5222,
+ 5227, 5215, 5230, 5242, 5244, 5233, 5261, 5249,10077, 5257,
+ 10077, 5254, 5271, 5280, 5282, 5275, 5267, 5286, 5283, 5278,
+ 5276, 5288, 5305, 5306, 5298, 5303, 5312, 5304, 5315, 5320,
+ 5301, 5326, 5330, 5314, 5332, 5322, 5338, 5339, 5363, 5357,
+
+ 5348,10077,10077, 5343, 5351, 5370, 5358, 5364, 5372, 5379,
+ 5393, 5376, 5365, 5388, 5395, 5416,10077, 5398, 5399, 5396,
+ 5419, 5422, 5410, 5427, 5435, 5426, 5420, 5438, 5436,10077,
+ 5430, 5445, 5440, 5439, 5461, 5449,10077, 5448,10077, 5441,
+ 5454, 5455, 5463, 5475, 5469, 5472, 5483, 5476, 5479, 5481,
+ 5494, 5509, 5514, 5498, 5513, 5497, 5500, 5504, 5526, 5516,
+ 5519, 5506, 5521, 5512,10077, 5532, 5527, 5531, 5544, 5540,
+ 5546, 5556, 5543, 5542,10077, 5555, 5554, 5569, 5568, 5562,
+ 5575, 5567, 5573, 5578, 5584, 5587, 5591, 5594, 5596,10077,
+ 5590, 5583, 5620, 5604, 5611, 5613, 5622, 5623, 5627,10077,
+
+ 5632, 5625, 5644, 5641, 5630, 5643, 5648, 5635, 5636, 5647,
+ 5649, 5661, 5668, 5670, 5669, 5662, 5675, 5689, 5663, 5700,
+ 5682, 5676, 5686, 5704, 5694,10077, 5701, 5703, 5707, 5697,
+ 5724, 5719, 5728, 5736, 5737, 5721, 5740, 5742, 5731, 5738,
+ 5745, 5754, 5753, 5750, 5758,10077, 5776, 5755, 5779, 5770,
+ 5762, 5780, 5778, 5771, 5785, 5792, 5781, 5774, 5789, 5799,
+ 5808, 5806, 5818, 5815, 5805, 5812, 5817, 5820, 5821,10077,
+ 5851, 5826, 5835, 5847, 5832, 5845, 5863, 5856, 5846, 5848,
+ 5871, 5853, 5880, 5862, 5864, 5883, 5885, 5868,10077,10077,
+ 5894, 5872, 5891,10077, 5892, 5893, 5907, 5889, 5903, 5896,
+
+ 5910, 5915, 5920, 5909, 5930, 5912, 5924,10077, 5948, 5921,
+ 5950, 5934, 5939, 5955, 5957,10077, 5941, 5968, 5964, 5965,
+ 5962, 5949, 5953, 5966, 5976, 5956, 5981, 5984, 5993, 5995,
+ 5982, 5989, 5990,10077, 5998, 5992, 6008, 6000, 5996, 6009,
+ 10077, 6011, 6022, 6027, 6033, 6023, 6043, 6040, 6036, 6046,
+ 6035, 6034, 6045, 6053, 6049, 6057, 6061, 6038, 6060, 6067,
+ 6063, 6073, 6089, 6091, 6093,10077, 6090, 6087, 6095, 6101,
+ 10077, 6102, 6111, 6112,10077, 6117, 6105, 6116, 6122, 6128,
+ 10077, 6123, 6106, 6124, 6126, 6120, 6146, 6130, 6151, 6140,
+ 6137, 6139, 6155, 6153,10077, 6157, 6149, 6166,10077, 6167,
+
+ 6173, 6175, 6177, 6161, 6190, 6183, 6186, 6193, 6194,10077,
+ 6200,10077, 6204, 6197, 6210,10077, 6202, 6213, 6201, 6212,
+ 6226, 6217, 6218, 6216, 6215, 6227, 6239, 6233, 6236, 6252,
+ 6253, 6262, 6241, 6260, 6243, 6250,10077, 6272, 6249, 6281,
+ 6245, 6270, 6286, 6289, 6282, 6288, 6291,10077,10077, 6302,
+ 10077, 6307, 6296, 6298, 6305,10077, 6309, 6292, 6331, 6318,
+ 6326, 6336, 6322, 6342, 6339,10077, 6343, 6345,10077, 6329,
+ 6344, 6349, 6341, 6353, 6337, 6358, 6356, 6366, 6367, 6369,
+ 6377, 6376, 6380, 6371, 6384, 6394,10077, 6390, 6402, 6408,
+ 6395, 6396, 6411, 6403, 6407, 6416,10077, 6423, 6430, 6424,
+
+ 6439, 6438,10077, 6437,10077, 6435, 6440, 6448, 6452, 6451,
+ 6461,10077, 6466, 6463, 6474, 6456, 6479, 6483, 6481, 6487,
+ 6471, 6473, 6476, 6499, 6497, 6494, 6493, 6522, 6517,10077,
+ 6508, 6501, 6530, 6532, 6516, 6518, 6541, 6534, 6535, 6528,
+ 6540, 6547, 6551, 6549, 6552, 6560, 6565, 6554,10077, 6573,
+ 6584, 6567, 6589, 6579, 6592, 6581,10077, 6583, 6597, 6598,
+ 10077, 6594, 6606, 6596, 6571, 6609, 6613, 6617, 6621, 6614,
+ 6624, 6628, 6640,10077, 6630, 6634, 6629, 6647, 6654, 6641,
+ 10077,10077, 6665,10077, 6669, 6655, 6668, 6662, 6660, 6679,
+ 6663, 6682, 6693, 6676, 6681, 6695, 6692, 6701,10077, 6698,
+
+ 6706, 6707, 6735, 6709, 6718, 6713, 6715, 6711,10077,10077,
+ 6732, 6738, 6740, 6746, 6747, 6742, 6733, 6752, 6750, 6756,
+ 6761, 6758, 6773,10077, 6766, 6767, 6768, 6769,10077, 6776,
+ 6781, 6775, 6777, 6800, 6788, 6791, 6790, 6804, 6799, 6811,
+ 6808, 6814, 6815, 6796, 6825, 6818, 6827, 6835, 6831, 6832,
+ 6824,10077, 6845, 6836, 6841, 6842, 6851, 6852, 6856, 6863,
+ 6854, 6864, 6869,10077, 6871,10077, 6879, 6880, 6883, 6893,
+ 6877, 6899, 6900, 6906, 6901, 6903, 6902, 6907, 6918, 6921,
+ 6925, 6916, 6924, 6938, 6944, 6940, 6946, 6942,10077, 6949,
+ 6935, 6941, 6945, 6959, 6960, 6951, 6963, 6967, 6975, 6962,
+
+ 6974, 6991, 6992, 6981, 6984, 6982, 6986, 6988,10077, 6998,
+ 6996, 6997, 7005, 7010, 7009, 7011, 7018, 7030, 7029, 7020,
+ 7025, 7033,10077, 7027, 7032, 7049,10077, 7041, 7047, 7038,
+ 7059, 7050, 7045, 7066, 7060, 7067,10077, 7079, 7065, 7074,
+ 7069, 7077, 7087, 7073, 7088, 7094, 7109, 7115,10077, 7112,
+ 7101, 7114, 7120, 7102, 7104, 7116, 7129, 7097,10077, 7143,
+ 7144, 7146, 7138, 7160, 7162, 7142, 7152, 7164, 7161, 7169,
+ 7156, 7145, 7165, 7173, 7175, 7177, 7188, 7185, 7203, 7208,
+ 7201,10077, 7187,10077, 7190, 7209, 7215, 7211, 7220, 7213,
+ 7224, 7214, 7233,10077, 7223, 7238, 7231, 7242, 7235,10077,
+
+ 7247, 7245, 7248, 7252,10077, 7265, 7262, 7250, 7266, 7273,
+ 7275,10077, 7283, 7282, 7291, 7292, 7303, 7290, 7301, 7293,
+ 7305, 7302, 7294, 7297, 7310, 7309, 7313, 7317,10077, 7321,
+ 7312, 7331, 7340, 7337, 7338, 7330, 7349, 7351, 7342,10077,
+ 7354, 7336, 7341, 7364, 7348, 7366, 7365, 7374, 7371, 7381,
+ 7389, 7376, 7377, 7380, 7395, 7388, 7402,10077, 7393, 7397,
+ 7414, 7415, 7410, 7423,10077, 7421,10077, 7417, 7427, 7432,
+ 7407, 7437,10077,10077, 7439, 7444, 7441, 7447, 7440,10077,
+ 10077, 7451,10077, 7445,10077, 7442, 7457,10077,10077, 7470,
+ 7455, 7458, 7472, 7482, 7461,10077, 7486,10077, 7494, 7471,
+
+ 7492, 7480, 7483, 7490,10077, 7484, 7498, 7500, 7504, 7515,
+ 10077, 7517, 7497, 7511, 7518,10077, 7534, 7532, 7521, 7519,
+ 10077, 7546, 7536, 7544, 7523, 7542, 7550, 7552, 7543, 7558,
+ 7553, 7561, 7563, 7567, 7570, 7586, 7589, 7591, 7595, 7584,
+ 7580, 7599, 7600, 7602, 7605, 7597, 7588, 7607, 7617, 7618,
+ 7622, 7620, 7621, 7641, 7642, 7632, 7644, 7645, 7646, 7630,
+ 7648, 7634, 7635, 7651, 7665, 7660, 7662, 7664, 7663, 7669,
+ 7672, 7673, 7692, 7685, 7701, 7689, 7690, 7691,10077, 7696,
+ 7682, 7703, 7707, 7713, 7730, 7731, 7738, 7739, 7741,10077,
+ 7743,10077, 7745, 7729, 7737, 7732, 7734,10077, 7740, 7759,
+
+ 7757, 7761, 7771, 7762, 7783, 7770, 7773, 7774, 7793,10077,
+ 7795, 7788, 7789, 7787, 7799,10077, 7804, 7803, 7806, 7807,
+ 7809, 7821, 7817, 7819, 7823, 7826, 7816, 7838, 7839, 7847,
+ 7829, 7840, 7851,10077, 7860, 7861, 7868, 7852, 7856, 7854,
+ 7863, 7875, 7862, 7866, 7887, 7889, 7894, 7897, 7896,10077,
+ 7884,10077, 7901, 7893, 7905, 7888, 7920, 7922, 7909, 7914,
+ 10077,10077, 7911, 7916, 7937, 7942, 7930, 7928, 7948, 7939,
+ 7936, 7949,10077, 7944, 7958, 7965, 7955,10077, 7964, 7954,
+ 7963, 7970,10077, 7972, 7978, 7989, 7988, 7975, 7996, 7995,
+ 7998, 7992, 7991, 7997, 8004,10077,10077,10077,10077, 8011,
+
+ 8006, 8009, 8013, 8016, 8019, 8033, 8036, 8038, 8037, 8021,
+ 8034,10077, 8050,10077,10077, 8046, 8052, 8040, 8053, 8062,
+ 8056, 8073, 8063,10077, 8072,10077, 8061, 8081, 8076, 8092,
+ 8094, 8090, 8077, 8101, 8098, 8102, 8088, 8093, 8115, 8119,
+ 8125, 8112, 8130, 8116, 8131,10077,10077, 8123, 8137, 8138,
+ 8145, 8139, 8142, 8134, 8154, 8151, 8162, 8150, 8158, 8152,
+ 8149, 8161, 8185, 8178, 8172,10077, 8186, 8187, 8188,10077,
+ 8189,10077, 8190, 8197, 8198, 8205, 8194, 8199, 8200, 8230,
+ 8224, 8232,10077,10077, 8220, 8244, 8234,10077,10077, 8222,
+ 8225, 8227, 8242, 8236, 8229, 8253, 8251, 8255, 8257,10077,
+
+ 8259,10077, 8261, 8273, 8279, 8258, 8292, 8295, 8278, 8297,
+ 8291, 8286, 8282, 8293,10077, 8290, 8289,10077, 8300, 8308,
+ 8310, 8301, 8316,10077, 8329, 8318, 8312, 8332,10077, 8333,
+ 8340, 8341,10077, 8347,10077, 8328, 8345, 8337, 8366, 8342,
+ 10077, 8358, 8352,10077, 8362, 8365, 8370, 8379, 8371, 8373,
+ 10077, 8383, 8369,10077, 8368, 8390, 8393, 8391, 8389, 8399,
+ 8395, 8385, 8405, 8406, 8402, 8420,10077,10077, 8412, 8418,
+ 73, 8441, 8411, 8417, 8422, 8421, 8430, 8428, 8436, 8443,
+ 10077,10077, 8447,10077, 8448, 8455,10077, 8435, 8462, 8470,
+ 8459, 8461, 8454, 8464, 8480, 8473, 8481, 8498, 8488, 8486,
+
+ 8504, 8519, 8523, 8497, 8490, 8525, 8529, 8532, 8534, 8536,
+ 8511, 8515, 8521, 8518, 8551, 8550, 8539, 8562, 8560, 8552,
+ 8553,10077, 8549, 8570, 8571, 8557,10077, 8581, 8576, 8586,
+ 8585,10077, 8588, 8582, 8584, 8595, 8596,10077, 8589, 8606,
+ 8614, 8615, 8612, 8608, 8613, 8610, 8643, 8617, 8620, 8622,
+ 10077,10077,10077, 8623, 8636,10077, 8645, 8644, 8634, 8642,
+ 10077, 8662, 8655, 8653,10077,10077,10077, 8641, 8668, 8667,
+ 10077, 8654, 8483,10077, 8663,10077, 8656,10077, 8679, 8683,
+ 8695, 8689,10077, 8692, 8686, 8691, 8708,10077, 8707, 8714,
+ 8717, 8711, 8701, 8710, 8722,10077, 8713, 8725, 8726, 8733,
+
+ 8724, 8734, 8738, 8740, 8737, 8748, 8741, 8750,10077, 8758,
+ 8765, 8769, 8775, 8744, 8764, 8768,10077, 8760,10077, 8778,
+ 10077, 8771, 8781, 8786, 8796, 8795, 8793, 8797, 8806, 8807,
+ 8798, 8827, 8808, 8811, 8820, 8788, 8813,10077,10077, 8830,
+ 8837,10077, 8821,10077, 8849,10077, 8834, 8835, 8847, 8844,
+ 8848,10077,10077, 8858, 8843, 8856, 8871, 8845, 8862,10077,
+ 8866, 8870, 8869, 8882,10077,10077, 8879, 8891, 8895,10077,
+ 8880, 8901, 8903, 8889, 8885, 8914, 8908, 8911, 8890, 8896,
+ 8894, 8912, 8916, 8925, 8927, 8931, 8941, 8947,10077,10077,
+ 10077, 8937, 8930, 8958, 8945, 8952, 8961, 8960,10077, 8954,
+
+ 8962, 8965, 8964, 8971, 8976, 8973,10077, 8968, 8972, 8977,
+ 8988, 8984, 8987, 8992, 9000,10077, 8996, 9012, 9013, 9011,
+ 9004, 9017, 9024, 9025, 9026, 9030, 9019, 9015, 9039, 9042,
+ 10077, 9037,10077,10077, 9029,10077, 9028, 9036, 9035, 9038,
+ 9066,10077, 9061, 9044, 9053, 9059, 9056, 9069, 9079, 9082,
+ 10077, 9089, 9071, 9083, 9085,10077,10077, 9074, 9092,10077,
+ 9104, 9103, 9093, 9094, 9099, 9105, 9114, 9110,10077, 9119,
+ 9120, 9116, 9124, 9122, 9121, 9139,10077, 9147, 9134, 9137,
+ 9138,10077, 9141, 9140, 9152, 9154, 9168,10077, 9171, 9167,
+ 9182, 9183,10077, 9172, 9186, 9177,10077,10077,10077, 9178,
+
+ 9191, 9197,10077,10077,10077,10077, 9193, 9202, 9203, 9206,
+ 10077, 9208, 9213, 9227, 9221, 9233, 9219,10077, 9231, 9228,
+ 9238, 9224, 9225,10077,10077, 9241, 9247, 9248, 9243, 9251,
+ 10077,10077, 9220, 9249, 9255, 9264, 9262,10077, 9263, 9252,
+ 9285, 9278, 9291, 9293, 9295, 9282, 9294, 9298, 9301, 9308,
+ 9286, 9300, 9296, 9324, 9325, 9312, 9306, 9321, 9326, 9336,
+ 9340, 9328, 9341,10077,10077, 9345,10077, 9347, 9351,10077,
+ 10077, 9349, 9350, 9354, 9361,10077, 9362, 9364, 9365, 9366,
+ 9353,10077, 9373, 9369, 9374, 9359, 9370,10077, 9375, 9376,
+ 9384, 9389, 9372, 9393, 9406, 9394,10077, 9398, 9408,10077,
+
+ 10077, 9396, 9412, 9392, 9423, 9409,10077, 9425, 9431, 9416,
+ 9432, 9419, 9426, 9433,10077, 9441, 9439,10077,10077, 9452,
+ 9446,10077,10077, 9436,10077,10077,10077,10077,10077,10077,
+ 10077,10077, 9464, 9467,10077, 9459, 9477, 9478,10077, 9480,
+ 10077, 9458, 9473, 9483, 9475,10077, 9476,10077, 9488, 9501,
+ 9493, 9504, 9503, 9515, 9500, 9502, 9474, 9507, 9499, 9517,
+ 9526, 9525, 9531, 9520, 9544, 9546, 9534, 9550,10077,10077,
+ 10077, 9542, 9540, 9557, 9561, 9565, 9571, 9566, 9574, 9559,
+ 9569, 9576, 9575, 9585, 9583, 9594, 9596, 9586, 9592, 9606,
+ 9595, 9598, 9614,10077, 9615, 9605, 9607, 9624,10077, 9613,
+
+ 10077, 9612,10077,10077, 9629, 9636, 9635, 9625, 9651, 9653,
+ 9640, 9645, 9641, 9656, 9649,10077, 9650,10077,10077, 9638,
+ 9646,10077, 9655, 9670,10077, 9664, 9685, 9673, 9662, 9681,
+ 9676, 9693, 9699, 9679,10077,10077, 9687, 9691, 9686, 9710,
+ 9711, 9720, 9722, 9719, 9725, 9728, 9708, 9734,10077, 9739,
+ 9735, 9741,10077, 9738, 9726, 9737, 9729, 9751, 9763, 9754,
+ 9761,10077, 9758,10077, 9776, 9768, 9778, 9760, 9765, 9769,
+ 9788, 9786, 9781,10077, 9772, 9792, 9795, 9801, 9811, 9818,
+ 9810, 9805, 9826, 9822, 9828, 9831, 9829, 9833, 9815, 9838,
+ 9845,10077, 9835, 9847,10077, 9841, 9854, 9850, 9852, 9874,
+
+ 10077, 9876, 9861, 9863, 9877, 9883, 9885,10077, 9884, 9887,
+ 9888,10077, 9889,10077,10077, 9901, 9881, 9898, 9897, 9899,
+ 10077,10077,10077, 9957, 9964, 9971, 9978, 9985, 9992, 9999,
+ 102,10006,10013,10020,10027,10034,10041,10048,10055,10062,
+ 10069
} ;
-static const flex_int16_t yy_def[3502] =
+static const flex_int16_t yy_def[3542] =
{ 0,
- 3483, 1, 3484, 3484, 3485, 3485, 3486, 3486, 3487, 3487,
- 3488, 3488, 3489, 3489, 3490, 3490, 3483, 3491, 3483, 3483,
- 3483, 3483, 3492, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3493, 3483, 3483, 3483,
- 3493, 3494, 3483, 3483, 3483, 3494, 3495, 3483, 3483, 3483,
- 3483, 3495, 3496, 3483, 3483, 3483, 3496, 3497, 3483, 3498,
- 3483, 3497, 3497, 3499, 3483, 3483, 3483, 3483, 3499, 3500,
- 3483, 3483, 3483, 3500, 3491, 3491, 3483, 3501, 3492, 3501,
- 3492, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3493,
- 3493, 3494, 3494, 3495, 3495, 3483, 3496, 3496, 3497, 3497,
- 3498, 3498, 3497, 3499, 3499, 3483, 3500, 3500, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3497, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3497, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3497, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3497, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3483, 3483, 3491, 3483, 3483, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3497,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3497, 3497, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3497, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483,
-
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3497, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3497, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3483, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3497, 3491, 3483, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3483, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3483, 3491, 3483, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3497, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
-
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3497, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3491,
- 3491, 3491, 3491, 3491, 3483, 3483, 3491, 3483, 3491, 3483,
- 3491, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3497, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3483, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3497, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3483,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3483, 3491, 3491, 3491, 3483, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
-
- 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3483, 3491, 3491, 3497, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3491,
- 3483, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
-
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3483, 3483, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3483,
- 3483, 3491, 3491, 3491, 3483, 3491, 3491, 3483, 3491, 3483,
- 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-
- 3483, 3483, 3491, 3491, 3483, 3491, 3483, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3483, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3483, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3483, 3491, 3483, 3491, 3491, 3491,
-
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3483, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3483, 3483, 3491,
- 3491, 3491, 3483, 3483, 3483, 3483, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491,
- 3483, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3483, 3491, 3483, 3491, 3491, 3483,
- 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3483,
- 3483, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3491, 3491, 3483, 3483, 3491,
- 3491, 3483, 3483, 3491, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3491, 3491, 3483, 3491, 3491, 3491, 3483, 3491,
-
- 3483, 3491, 3491, 3491, 3491, 3483, 3491, 3483, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3483,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3483, 3491,
- 3483, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3483, 3483, 3491,
- 3491, 3483, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3483, 3483, 3491, 3491, 3491, 3491,
-
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491,
- 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
- 3491, 3483, 3491, 3491, 3483, 3491, 3491, 3491, 3491, 3491,
- 3483, 3491, 3491, 3491, 3491, 3491, 3491, 3483, 3491, 3491,
- 3491, 3483, 3491, 3483, 3483, 3491, 3491, 3491, 3491, 3491,
- 3483, 3483, 0, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
-
- 3483
+ 3523, 1, 3524, 3524, 3525, 3525, 3526, 3526, 3527, 3527,
+ 3528, 3528, 3529, 3529, 3530, 3530, 3523, 3531, 3523, 3523,
+ 3523, 3523, 3532, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3533, 3523, 3523, 3523,
+ 3533, 3534, 3523, 3523, 3523, 3534, 3535, 3523, 3523, 3523,
+ 3523, 3535, 3536, 3523, 3523, 3523, 3536, 3537, 3523, 3538,
+ 3523, 3537, 3537, 3539, 3523, 3523, 3523, 3523, 3539, 3540,
+ 3523, 3523, 3523, 3540, 3531, 3531, 3523, 3541, 3532, 3541,
+ 3532, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3533,
+ 3533, 3534, 3534, 3535, 3535, 3523, 3536, 3536, 3537, 3537,
+ 3538, 3538, 3537, 3539, 3539, 3523, 3540, 3540, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3537, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3537, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3537, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3523, 3531,
+ 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3537, 3537, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3537, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3537, 3531, 3523, 3531, 3531, 3531, 3523, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+
+ 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+
+ 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3537, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523,
+
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3523, 3531, 3523, 3531, 3523, 3531, 3531, 3523, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3523, 3523, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3523,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3523, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531,
+ 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3523, 3523, 3523, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3523, 3531, 3523, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531,
+ 3531, 3523, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3523, 3523, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3523,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3523, 3523, 3531,
+
+ 3531, 3531, 3523, 3523, 3523, 3523, 3531, 3531, 3531, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3523, 3531, 3523, 3531, 3531, 3523,
+ 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523,
+
+ 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3523, 3531,
+ 3531, 3523, 3523, 3531, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3531,
+ 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523,
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531,
+
+ 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3523, 3531,
+ 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531,
+ 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
+ 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531,
+
+ 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531,
+ 3531, 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531,
+ 3523, 3523, 0, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523
} ;
-static const flex_int16_t yy_nxt[10028] =
+static const flex_int16_t yy_nxt[10144] =
{ 0,
18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
@@ -1586,12 +1599,12 @@ static const flex_int16_t yy_nxt[10028] =
59, 60, 61, 120, 22, 58, 59, 60, 61, 86,
22, 64, 65, 66, 64, 65, 66, 87, 160, 160,
- 1325, 88, 85, 51, 119, 86, 51, 167, 167, 56,
+ 1334, 88, 85, 51, 119, 86, 51, 167, 167, 56,
120, 56, 170, 75, 76, 77, 78, 62, 22, 75,
76, 77, 78, 62, 22, 81, 82, 83, 67, 97,
86, 67, 19, 20, 21, 69, 70, 71, 19, 20,
21, 69, 70, 71, 81, 82, 83, 121, 108, 177,
- 177, 79, 72, 159, 409, 86, 97, 79, 72, 86,
+ 177, 79, 72, 159, 410, 86, 97, 79, 72, 86,
137, 90, 84, 90, 90, 86, 90, 170, 109, 178,
73, 86, 90, 86, 121, 108, 73, 176, 87, 72,
159, 84, 88, 86, 130, 72, 112, 137, 110, 162,
@@ -1616,1071 +1629,1084 @@ static const flex_int16_t yy_nxt[10028] =
134, 152, 169, 135, 169, 169, 86, 169, 86, 184,
136, 153, 86, 131, 195, 154, 155, 132, 182, 86,
174, 133, 174, 174, 166, 174, 205, 134, 86, 85,
- 135, 85, 85, 86, 85, 332, 184, 136, 138, 1176,
+ 135, 85, 85, 86, 85, 332, 184, 136, 138, 1183,
85, 195, 139, 90, 183, 90, 90, 206, 90, 185,
165, 86, 140, 141, 90, 142, 86, 193, 194, 197,
196, 163, 186, 161, 86, 138, 86, 86, 86, 139,
- 86, 183, 86, 86, 206, 240, 185, 198, 3483, 140,
+ 86, 183, 86, 86, 206, 240, 185, 198, 3523, 140,
141, 91, 142, 143, 193, 194, 144, 196, 190, 186,
199, 86, 201, 145, 191, 200, 192, 146, 147, 86,
- 334, 86, 240, 86, 198, 86, 207, 3483, 86, 86,
- 143, 208, 3483, 144, 209, 190, 215, 199, 86, 201,
+ 334, 86, 240, 86, 198, 86, 207, 3523, 86, 86,
+ 143, 208, 3523, 144, 209, 190, 215, 199, 86, 201,
145, 191, 200, 192, 146, 147, 202, 203, 211, 86,
- 210, 212, 86, 207, 204, 228, 86, 3483, 208, 217,
- 216, 209, 86, 86, 213, 214, 3483, 86, 86, 86,
+ 210, 212, 86, 207, 204, 228, 86, 3523, 208, 217,
+ 216, 209, 86, 86, 213, 214, 3523, 86, 86, 86,
- 225, 3483, 86, 202, 203, 211, 218, 210, 212, 226,
+ 225, 3523, 86, 202, 203, 211, 218, 210, 212, 226,
220, 204, 228, 86, 221, 223, 217, 216, 227, 229,
224, 213, 214, 86, 232, 230, 219, 225, 86, 253,
222, 86, 86, 218, 86, 231, 226, 220, 86, 86,
233, 221, 223, 86, 86, 227, 229, 224, 235, 86,
234, 232, 230, 219, 237, 236, 253, 222, 238, 86,
- 3483, 239, 231, 86, 86, 241, 245, 233, 86, 246,
- 86, 86, 86, 3483, 242, 235, 86, 234, 86, 247,
- 248, 237, 236, 243, 251, 238, 3483, 86, 239, 244,
- 3483, 249, 241, 245, 257, 250, 246, 86, 86, 3483,
+ 3523, 239, 231, 86, 86, 241, 245, 233, 86, 246,
+ 86, 86, 86, 3523, 242, 235, 86, 234, 86, 247,
+ 248, 237, 236, 243, 251, 238, 3523, 86, 239, 244,
+ 3523, 249, 241, 245, 257, 250, 246, 86, 86, 3523,
254, 242, 259, 261, 86, 258, 247, 248, 262, 86,
243, 251, 267, 86, 86, 260, 244, 255, 249, 86,
256, 257, 250, 86, 263, 266, 86, 254, 268, 259,
261, 270, 258, 264, 86, 262, 277, 269, 272, 267,
86, 271, 260, 86, 255, 265, 86, 256, 86, 86,
- 3483, 263, 266, 86, 86, 268, 177, 177, 270, 3483,
- 264, 3483, 170, 277, 269, 272, 3483, 273, 271, 3483,
- 3483, 164, 265, 164, 164, 169, 164, 169, 169, 90,
+ 3523, 263, 266, 86, 86, 268, 177, 177, 270, 3523,
+ 264, 3523, 170, 277, 269, 272, 3523, 273, 271, 3523,
+ 3523, 164, 265, 164, 164, 169, 164, 169, 169, 90,
169, 90, 90, 174, 90, 174, 174, 274, 174, 86,
- 3483, 276, 3483, 280, 273, 278, 281, 282, 283, 284,
+ 3523, 276, 3523, 280, 273, 278, 281, 282, 283, 284,
- 86, 275, 279, 3483, 285, 86, 338, 3483, 3483, 86,
+ 86, 275, 279, 3523, 285, 86, 338, 3523, 3523, 86,
86, 86, 286, 290, 86, 86, 291, 172, 276, 86,
280, 86, 278, 281, 282, 283, 284, 287, 275, 279,
86, 285, 340, 288, 289, 86, 86, 293, 86, 286,
- 290, 294, 86, 291, 301, 303, 3483, 302, 306, 3483,
+ 290, 294, 86, 291, 301, 303, 3523, 302, 306, 3523,
307, 304, 308, 86, 305, 314, 310, 86, 295, 86,
- 288, 289, 86, 86, 86, 86, 311, 86, 294, 3483,
+ 288, 289, 86, 86, 86, 86, 311, 86, 294, 3523,
86, 301, 303, 86, 302, 306, 86, 307, 304, 86,
309, 305, 314, 310, 86, 295, 296, 312, 86, 318,
- 317, 297, 313, 311, 326, 370, 298, 315, 86, 86,
+ 317, 297, 313, 311, 326, 371, 298, 315, 86, 86,
- 316, 86, 299, 300, 319, 86, 325, 309, 3483, 86,
- 3483, 86, 86, 296, 312, 329, 318, 317, 297, 313,
- 86, 326, 370, 298, 315, 327, 86, 316, 86, 299,
+ 316, 86, 299, 300, 319, 86, 325, 309, 3523, 86,
+ 3523, 86, 86, 296, 312, 329, 318, 317, 297, 313,
+ 86, 326, 371, 298, 315, 327, 86, 316, 86, 299,
300, 319, 320, 325, 330, 321, 86, 322, 337, 335,
- 333, 86, 329, 342, 86, 331, 339, 86, 3483, 323,
- 344, 324, 327, 336, 341, 3483, 3483, 3483, 86, 320,
- 345, 3483, 321, 343, 322, 337, 86, 333, 86, 351,
- 346, 86, 331, 339, 86, 86, 323, 86, 324, 347,
- 336, 341, 86, 86, 348, 349, 86, 345, 86, 352,
- 343, 86, 353, 356, 350, 354, 351, 346, 355, 86,
-
- 357, 364, 360, 86, 86, 86, 347, 86, 361, 362,
- 86, 348, 349, 86, 86, 367, 352, 86, 358, 353,
- 356, 350, 354, 359, 86, 355, 363, 357, 373, 360,
- 369, 86, 86, 86, 368, 361, 362, 365, 366, 372,
- 371, 86, 374, 375, 376, 378, 86, 86, 86, 3483,
- 86, 86, 86, 363, 377, 381, 379, 369, 86, 86,
- 86, 368, 380, 383, 365, 366, 372, 371, 3483, 86,
- 375, 384, 378, 386, 86, 387, 86, 86, 382, 388,
- 390, 377, 86, 379, 389, 3483, 391, 86, 385, 86,
- 392, 394, 86, 86, 170, 86, 86, 86, 384, 86,
-
- 386, 395, 387, 396, 393, 382, 388, 390, 86, 398,
- 397, 389, 86, 391, 3483, 385, 399, 392, 401, 403,
- 405, 400, 402, 86, 404, 86, 86, 86, 86, 406,
- 396, 393, 86, 86, 86, 86, 407, 397, 86, 408,
- 3483, 86, 411, 399, 412, 401, 403, 413, 400, 402,
- 410, 404, 86, 86, 415, 414, 406, 416, 86, 86,
- 419, 86, 420, 407, 421, 86, 408, 86, 86, 411,
- 86, 412, 417, 418, 413, 86, 422, 410, 86, 423,
- 86, 415, 414, 426, 416, 424, 428, 431, 3483, 420,
- 86, 86, 86, 427, 86, 429, 86, 432, 433, 417,
-
- 418, 86, 425, 422, 86, 435, 86, 434, 86, 86,
- 426, 86, 424, 436, 431, 86, 438, 437, 86, 430,
- 427, 86, 439, 445, 432, 433, 86, 86, 441, 425,
- 86, 86, 435, 440, 434, 443, 442, 86, 86, 86,
- 436, 446, 86, 438, 437, 86, 430, 447, 3483, 439,
- 445, 448, 444, 3483, 86, 441, 3483, 455, 456, 86,
- 440, 3483, 443, 442, 3483, 457, 86, 86, 463, 462,
- 469, 86, 3483, 86, 447, 86, 467, 3483, 448, 444,
- 449, 468, 86, 450, 455, 456, 464, 86, 451, 452,
- 453, 454, 457, 86, 86, 463, 462, 469, 86, 465,
-
- 466, 86, 470, 3483, 458, 3483, 459, 449, 86, 478,
- 450, 471, 476, 464, 472, 451, 452, 453, 454, 460,
- 473, 86, 461, 479, 86, 477, 465, 466, 86, 86,
- 86, 458, 86, 459, 474, 475, 86, 480, 471, 476,
- 481, 472, 482, 86, 86, 86, 460, 473, 483, 461,
- 479, 485, 477, 484, 86, 3483, 488, 493, 486, 86,
- 487, 474, 475, 86, 480, 86, 86, 481, 86, 482,
- 86, 489, 86, 490, 492, 483, 494, 495, 485, 86,
- 484, 86, 491, 496, 493, 486, 507, 487, 86, 497,
- 498, 3483, 499, 500, 505, 3483, 506, 86, 489, 86,
-
- 490, 492, 3483, 508, 495, 86, 86, 550, 86, 491,
- 496, 501, 86, 563, 86, 509, 497, 498, 86, 499,
- 500, 505, 86, 506, 502, 522, 523, 503, 525, 504,
- 86, 526, 86, 527, 530, 86, 541, 86, 501, 86,
- 86, 542, 509, 86, 524, 86, 86, 86, 528, 540,
- 86, 502, 522, 523, 503, 525, 504, 510, 526, 511,
- 527, 530, 546, 3483, 529, 512, 539, 86, 86, 513,
- 86, 524, 86, 545, 514, 528, 540, 515, 86, 170,
- 3483, 543, 547, 86, 510, 548, 511, 549, 544, 546,
- 568, 529, 512, 539, 86, 86, 513, 551, 86, 552,
-
- 545, 514, 86, 86, 515, 516, 86, 517, 543, 547,
- 554, 558, 548, 615, 549, 544, 553, 556, 86, 555,
- 518, 559, 86, 519, 551, 520, 552, 521, 86, 86,
- 3483, 86, 516, 560, 517, 557, 561, 562, 558, 86,
- 86, 3483, 86, 553, 556, 86, 555, 518, 559, 86,
- 519, 564, 520, 3483, 521, 531, 532, 567, 86, 601,
- 560, 566, 557, 561, 562, 533, 534, 535, 536, 537,
- 86, 569, 538, 86, 565, 570, 86, 86, 564, 3483,
- 86, 86, 531, 532, 567, 571, 86, 3483, 566, 572,
- 573, 86, 533, 534, 535, 536, 537, 574, 569, 538,
-
- 575, 565, 570, 576, 86, 582, 577, 86, 583, 578,
- 587, 86, 571, 585, 86, 588, 3483, 586, 86, 86,
- 579, 580, 86, 584, 574, 86, 86, 575, 86, 606,
- 576, 86, 582, 577, 86, 583, 578, 587, 581, 86,
- 585, 590, 588, 589, 586, 86, 602, 579, 580, 603,
- 584, 608, 86, 3483, 86, 591, 592, 604, 609, 605,
- 607, 86, 3483, 738, 86, 581, 86, 593, 590, 594,
- 589, 86, 86, 602, 86, 610, 603, 86, 608, 3483,
- 86, 86, 591, 592, 604, 609, 605, 607, 612, 611,
- 86, 613, 3483, 614, 593, 86, 594, 595, 617, 86,
-
- 616, 3483, 610, 618, 3483, 596, 597, 86, 620, 598,
- 599, 86, 86, 600, 619, 612, 611, 86, 613, 86,
- 614, 623, 86, 624, 595, 617, 621, 616, 622, 86,
- 618, 86, 596, 597, 86, 620, 598, 599, 86, 625,
- 600, 627, 628, 86, 630, 86, 86, 626, 623, 86,
- 624, 629, 631, 621, 633, 622, 86, 634, 632, 86,
- 86, 635, 3483, 638, 636, 86, 625, 637, 627, 628,
- 639, 630, 86, 86, 626, 86, 86, 86, 629, 631,
- 86, 633, 640, 642, 634, 632, 86, 86, 635, 86,
- 638, 636, 641, 643, 637, 644, 645, 639, 86, 646,
-
- 647, 86, 86, 648, 650, 649, 86, 651, 86, 640,
- 642, 86, 86, 86, 86, 86, 652, 653, 86, 641,
- 643, 654, 644, 645, 655, 656, 646, 647, 657, 86,
- 648, 650, 649, 660, 651, 658, 663, 661, 659, 86,
- 666, 86, 665, 652, 664, 3483, 662, 86, 654, 86,
- 86, 86, 656, 669, 86, 657, 86, 86, 86, 672,
- 660, 668, 658, 667, 661, 659, 86, 673, 86, 665,
- 675, 664, 86, 662, 86, 86, 670, 671, 3483, 674,
- 669, 86, 86, 86, 676, 677, 672, 678, 668, 86,
- 667, 86, 86, 86, 673, 86, 688, 675, 687, 691,
-
- 3483, 86, 86, 670, 671, 86, 674, 86, 690, 689,
- 692, 676, 677, 3483, 678, 679, 693, 3483, 3483, 3483,
- 680, 86, 681, 688, 698, 687, 691, 86, 682, 694,
- 683, 86, 86, 684, 685, 690, 689, 692, 697, 3483,
- 686, 86, 679, 693, 695, 701, 86, 680, 696, 681,
- 86, 698, 86, 3483, 706, 682, 694, 683, 702, 699,
- 684, 685, 700, 86, 704, 697, 86, 686, 703, 705,
- 86, 695, 701, 707, 3483, 696, 86, 86, 86, 709,
- 86, 706, 710, 3483, 86, 708, 699, 711, 713, 700,
- 86, 704, 86, 715, 716, 703, 705, 3483, 712, 714,
-
- 707, 718, 86, 86, 726, 86, 709, 3483, 722, 710,
- 86, 86, 708, 86, 711, 713, 719, 717, 721, 86,
- 715, 716, 86, 86, 720, 712, 714, 724, 718, 86,
- 86, 723, 86, 725, 86, 722, 86, 727, 729, 732,
- 733, 728, 730, 719, 717, 721, 86, 731, 86, 86,
- 86, 720, 86, 86, 724, 86, 170, 734, 723, 86,
- 725, 735, 737, 86, 727, 729, 732, 733, 728, 730,
- 736, 86, 739, 86, 731, 740, 741, 3483, 742, 743,
- 745, 86, 744, 3483, 734, 751, 86, 747, 735, 737,
- 86, 746, 86, 86, 752, 86, 86, 736, 755, 753,
-
- 756, 757, 740, 86, 86, 742, 743, 745, 86, 744,
- 748, 86, 751, 86, 747, 754, 758, 749, 746, 759,
- 750, 760, 768, 766, 764, 86, 86, 86, 86, 86,
- 761, 765, 763, 86, 770, 762, 769, 748, 86, 86,
- 767, 86, 754, 86, 749, 86, 86, 750, 86, 768,
- 766, 764, 773, 86, 774, 86, 86, 772, 765, 763,
- 86, 770, 86, 769, 771, 86, 775, 767, 86, 776,
- 779, 777, 778, 86, 780, 86, 781, 3483, 785, 773,
- 86, 782, 783, 86, 772, 787, 86, 86, 86, 86,
- 3483, 771, 86, 775, 86, 795, 776, 779, 777, 778,
-
- 86, 780, 784, 781, 86, 785, 786, 3483, 782, 783,
- 86, 789, 788, 86, 798, 3483, 794, 86, 790, 796,
- 797, 86, 795, 791, 86, 86, 792, 793, 86, 784,
- 799, 86, 801, 786, 86, 800, 86, 802, 789, 788,
- 803, 798, 86, 794, 86, 790, 796, 797, 86, 804,
- 791, 3483, 86, 792, 793, 805, 3483, 799, 86, 801,
- 808, 807, 800, 809, 810, 811, 812, 803, 816, 86,
- 3483, 3483, 3483, 86, 86, 86, 804, 806, 86, 814,
- 813, 817, 805, 86, 86, 86, 86, 808, 807, 815,
- 809, 810, 811, 812, 86, 86, 86, 818, 822, 86,
-
- 820, 86, 821, 819, 806, 86, 814, 813, 817, 86,
- 823, 86, 824, 86, 825, 3483, 815, 826, 827, 834,
- 86, 828, 829, 830, 818, 822, 3483, 820, 833, 821,
- 819, 832, 86, 86, 831, 835, 86, 836, 86, 824,
- 837, 825, 86, 839, 86, 86, 86, 86, 828, 829,
- 830, 86, 838, 86, 86, 833, 3483, 86, 832, 842,
- 843, 831, 835, 840, 86, 86, 844, 837, 841, 86,
- 839, 847, 849, 86, 86, 848, 3483, 851, 850, 838,
- 845, 846, 856, 86, 86, 852, 842, 843, 86, 853,
- 86, 854, 860, 844, 3483, 86, 862, 861, 857, 849,
-
- 86, 864, 848, 86, 851, 850, 855, 845, 846, 86,
- 858, 86, 852, 86, 86, 86, 853, 863, 854, 86,
- 859, 865, 86, 862, 86, 857, 86, 866, 864, 86,
- 867, 868, 86, 855, 869, 871, 872, 858, 870, 86,
- 86, 3483, 86, 86, 863, 3483, 86, 859, 865, 873,
- 3483, 874, 86, 881, 866, 875, 882, 867, 868, 876,
- 879, 869, 871, 86, 877, 870, 878, 86, 86, 86,
- 3483, 86, 86, 86, 86, 86, 873, 880, 874, 883,
- 884, 3483, 875, 882, 886, 86, 876, 879, 885, 86,
- 86, 877, 86, 878, 887, 86, 86, 888, 890, 889,
-
- 3483, 891, 86, 896, 880, 897, 883, 884, 86, 86,
- 86, 886, 895, 892, 893, 885, 86, 901, 3483, 894,
- 86, 887, 86, 899, 888, 890, 889, 86, 891, 898,
- 896, 86, 897, 86, 86, 900, 86, 903, 902, 895,
- 892, 893, 904, 86, 901, 908, 894, 905, 907, 906,
- 899, 86, 86, 86, 3483, 86, 898, 909, 910, 86,
- 911, 86, 900, 86, 903, 902, 912, 86, 86, 904,
- 913, 914, 908, 916, 905, 907, 906, 86, 915, 86,
- 918, 917, 86, 919, 909, 910, 86, 911, 86, 920,
- 921, 86, 3483, 912, 924, 86, 86, 913, 914, 86,
-
- 916, 922, 928, 927, 935, 915, 923, 918, 917, 86,
- 925, 170, 86, 926, 86, 86, 920, 921, 931, 86,
- 932, 924, 86, 929, 86, 933, 86, 934, 922, 86,
- 927, 930, 936, 923, 937, 86, 86, 925, 938, 86,
- 926, 941, 86, 86, 939, 86, 86, 932, 942, 86,
- 929, 940, 933, 86, 934, 944, 943, 86, 930, 936,
- 86, 937, 946, 3483, 86, 938, 945, 86, 86, 86,
- 3483, 939, 954, 86, 3483, 942, 86, 3483, 940, 3483,
- 955, 957, 944, 943, 86, 3483, 3483, 3483, 956, 946,
- 86, 959, 3483, 945, 947, 958, 3483, 948, 967, 954,
-
- 3483, 949, 86, 961, 950, 86, 86, 955, 957, 86,
- 962, 951, 952, 964, 953, 956, 86, 963, 959, 86,
- 968, 947, 958, 960, 948, 967, 86, 977, 949, 86,
- 961, 950, 966, 965, 86, 3483, 86, 962, 951, 952,
- 964, 953, 86, 86, 963, 86, 976, 979, 980, 86,
- 960, 3483, 86, 86, 977, 981, 86, 978, 86, 966,
- 965, 969, 970, 86, 971, 3483, 3483, 972, 984, 982,
- 3483, 86, 973, 976, 979, 980, 986, 3483, 974, 975,
- 989, 988, 981, 86, 978, 983, 1015, 86, 969, 970,
- 86, 971, 86, 985, 972, 984, 982, 987, 86, 973,
-
- 993, 86, 992, 986, 86, 974, 975, 989, 988, 86,
- 990, 994, 983, 995, 997, 991, 3483, 996, 86, 1000,
- 985, 998, 86, 86, 987, 999, 86, 993, 1001, 992,
- 1005, 1003, 1021, 1004, 1002, 86, 86, 86, 994, 86,
- 995, 997, 86, 86, 996, 86, 86, 86, 998, 86,
- 1007, 1006, 999, 86, 1008, 1001, 86, 1005, 1003, 86,
- 1004, 1002, 1009, 1010, 86, 1011, 1012, 1013, 1014, 86,
- 1017, 1023, 3483, 86, 86, 86, 86, 1007, 1006, 1016,
- 86, 1008, 86, 1018, 1025, 1020, 1024, 1026, 1019, 1009,
- 1010, 86, 1011, 1012, 1013, 1014, 1022, 86, 1027, 1028,
-
- 1029, 86, 1030, 86, 86, 1031, 1016, 86, 86, 1033,
- 3483, 86, 1020, 1024, 1026, 86, 86, 1034, 86, 86,
- 1038, 1032, 1039, 1022, 86, 1027, 1028, 86, 1036, 86,
- 86, 86, 1031, 1035, 1040, 1037, 1033, 86, 1041, 86,
- 86, 1042, 86, 86, 1034, 1044, 3483, 86, 1032, 1039,
- 1043, 1045, 1047, 86, 1046, 1036, 1049, 86, 86, 3483,
- 1035, 1040, 1037, 86, 1048, 86, 1050, 1053, 1052, 86,
- 86, 1051, 1044, 86, 86, 1054, 3483, 1043, 1045, 1047,
- 86, 1046, 86, 1049, 86, 86, 1057, 1055, 86, 86,
- 1079, 1048, 1056, 1050, 1053, 1052, 1058, 1059, 1051, 1060,
-
- 1061, 1062, 1054, 86, 1065, 86, 1063, 1066, 86, 1067,
- 86, 3483, 86, 1057, 1064, 86, 1068, 86, 3483, 86,
- 3483, 3483, 86, 1058, 1059, 1070, 1060, 1061, 1062, 86,
- 86, 1065, 86, 1063, 86, 1071, 1067, 1074, 86, 1069,
- 1073, 1064, 86, 1068, 1072, 86, 1075, 86, 1077, 86,
- 86, 1076, 1070, 1078, 1080, 86, 3483, 86, 1084, 3483,
- 1087, 86, 1071, 1083, 1074, 1085, 1069, 1073, 1081, 1082,
- 1088, 1072, 86, 1075, 86, 1077, 86, 86, 1076, 86,
- 1078, 1080, 86, 86, 86, 1084, 1086, 1087, 1091, 1093,
- 1083, 1090, 1085, 1089, 1098, 1081, 1082, 86, 86, 86,
-
- 1092, 86, 1094, 1096, 1099, 1095, 86, 86, 86, 86,
- 86, 86, 1097, 1086, 1101, 1091, 1093, 1103, 1090, 86,
- 1089, 1100, 1102, 1104, 86, 1105, 86, 1092, 3483, 1094,
- 1096, 1106, 1095, 1107, 86, 86, 86, 1108, 1113, 1097,
- 1110, 86, 1112, 1114, 1103, 1109, 86, 1111, 1100, 1102,
- 1116, 1117, 86, 86, 86, 86, 1115, 86, 1106, 86,
- 1107, 1118, 86, 1120, 1108, 86, 3483, 1110, 86, 1112,
- 86, 3483, 1109, 1121, 1111, 86, 1122, 1116, 1117, 1119,
- 86, 1123, 86, 1115, 1126, 1128, 86, 1129, 1132, 1127,
- 86, 1130, 3483, 86, 1124, 86, 1125, 86, 86, 1131,
-
- 1121, 1134, 1133, 1122, 86, 86, 1119, 1136, 1123, 86,
- 86, 1137, 1128, 1146, 1129, 1132, 170, 86, 1130, 1135,
- 86, 1124, 86, 1125, 86, 86, 1131, 1139, 1134, 1133,
- 1138, 3483, 1147, 86, 1136, 1148, 1149, 86, 1137, 86,
- 1146, 1150, 1151, 86, 3483, 1175, 1135, 86, 1154, 1173,
- 3483, 1156, 1207, 3483, 1139, 86, 1157, 1138, 1140, 1147,
- 1141, 1152, 1148, 86, 1142, 86, 1143, 1153, 1150, 1151,
- 86, 1144, 86, 86, 1158, 1154, 1145, 1155, 1179, 86,
- 86, 86, 86, 86, 1159, 1140, 86, 1141, 1152, 3483,
- 86, 1142, 86, 1143, 1153, 1160, 1162, 86, 1144, 1163,
-
- 1165, 1158, 1166, 1145, 1155, 1179, 1167, 1161, 86, 1164,
- 1168, 1159, 1169, 1170, 1171, 86, 86, 1174, 86, 86,
- 1172, 86, 1160, 1162, 86, 86, 1163, 1165, 1177, 1166,
- 1188, 86, 1189, 1167, 1161, 86, 1164, 1168, 1178, 1169,
- 1170, 1171, 86, 86, 1180, 86, 1193, 1172, 1190, 86,
- 3483, 1191, 3483, 86, 86, 1192, 1197, 1188, 3483, 1189,
- 86, 86, 1198, 3483, 86, 1178, 86, 1194, 86, 1195,
- 86, 1180, 1181, 1193, 1196, 1190, 1200, 1182, 1191, 1183,
- 86, 86, 1192, 1197, 1199, 1184, 86, 86, 1201, 1198,
- 1185, 1186, 1202, 1203, 1194, 86, 1195, 1187, 86, 1181,
-
- 1205, 1196, 86, 1204, 1182, 1208, 1183, 86, 86, 86,
- 86, 1199, 1184, 1206, 86, 1201, 1209, 1185, 1186, 1202,
- 1203, 1210, 86, 86, 1187, 1211, 3483, 1205, 86, 1212,
- 1204, 1214, 1208, 1213, 1215, 1216, 1217, 86, 1221, 3483,
- 1206, 1218, 3483, 1209, 86, 86, 1219, 1222, 3483, 86,
- 1220, 3483, 1211, 86, 1224, 86, 1212, 86, 1214, 86,
- 1213, 86, 1216, 1217, 86, 86, 86, 1223, 1218, 1226,
- 86, 1225, 1227, 1219, 1222, 86, 86, 1220, 86, 86,
- 1228, 1224, 86, 1229, 1230, 1231, 1233, 1232, 3483, 1234,
- 1235, 3483, 1247, 3483, 1223, 86, 1226, 86, 1225, 1227,
-
- 86, 86, 86, 86, 1237, 1238, 86, 1228, 1236, 1239,
- 1229, 1230, 1231, 86, 1232, 86, 1234, 1235, 86, 1240,
- 1242, 1241, 86, 1243, 86, 1245, 86, 1244, 86, 1246,
- 3483, 1237, 1238, 86, 3483, 1236, 1239, 1250, 3483, 1248,
- 3483, 1249, 86, 86, 1263, 86, 1240, 1242, 1241, 86,
- 1243, 86, 1245, 86, 1244, 86, 1246, 86, 1251, 1256,
- 1252, 1257, 1259, 1260, 1250, 1253, 1248, 1254, 1249, 86,
- 1255, 1258, 86, 86, 86, 1262, 86, 1261, 86, 1265,
- 3483, 1269, 3483, 86, 3483, 1251, 1256, 86, 1257, 1259,
- 1260, 86, 86, 86, 1254, 1266, 1264, 1255, 1258, 1267,
-
- 1268, 1274, 1262, 86, 1261, 86, 1270, 86, 1269, 1271,
- 1272, 86, 86, 86, 1273, 1277, 1275, 1276, 1281, 86,
- 1282, 86, 1266, 1264, 1278, 86, 1267, 1268, 1274, 1279,
- 86, 86, 86, 1270, 1280, 1283, 1271, 1272, 86, 86,
- 86, 1273, 1277, 1275, 1276, 86, 1285, 86, 1284, 1287,
- 86, 1278, 1286, 86, 1291, 86, 1279, 86, 86, 1288,
- 1290, 1280, 1283, 1292, 1289, 1293, 1294, 86, 86, 1296,
- 86, 86, 1295, 1285, 1298, 1284, 1287, 3483, 86, 1286,
- 1297, 1291, 1299, 1300, 86, 1302, 1288, 1290, 86, 1301,
- 3483, 1289, 86, 1294, 86, 86, 86, 86, 1303, 1295,
-
- 1304, 86, 86, 1305, 86, 1306, 86, 1297, 1311, 1299,
- 1300, 1308, 1309, 1307, 1314, 1316, 1301, 86, 1310, 86,
- 86, 86, 86, 86, 86, 1303, 1312, 86, 1313, 86,
- 1305, 1317, 1306, 1320, 1318, 1311, 86, 86, 1308, 1309,
- 1307, 1314, 86, 1315, 1319, 1310, 86, 86, 86, 1321,
- 1324, 86, 1322, 1312, 1323, 1313, 1327, 86, 1326, 86,
- 86, 1318, 1331, 86, 1328, 86, 86, 86, 1332, 86,
- 1315, 1319, 86, 1329, 86, 86, 1321, 1324, 1330, 1322,
- 1333, 1323, 1334, 1327, 1337, 1326, 86, 86, 1336, 86,
- 1335, 1328, 1339, 1338, 1340, 1332, 86, 170, 1341, 1342,
-
- 1329, 86, 86, 1343, 86, 1330, 86, 1333, 86, 1334,
- 1344, 1337, 86, 1345, 86, 1336, 1346, 1335, 3483, 1339,
- 1338, 1340, 1347, 1348, 86, 86, 1342, 1352, 1349, 1351,
- 3483, 1350, 3483, 3483, 1355, 86, 1357, 1354, 86, 86,
- 1345, 86, 86, 1346, 86, 86, 86, 86, 1361, 1347,
- 1348, 86, 1353, 1358, 1352, 1349, 1351, 86, 1350, 1356,
- 86, 1355, 1359, 86, 1354, 1360, 86, 86, 3483, 86,
- 1367, 86, 1368, 1363, 1362, 1361, 1370, 86, 3483, 1353,
- 1358, 86, 1364, 1369, 1365, 3483, 1356, 1366, 1371, 1359,
- 1377, 1372, 1360, 86, 1374, 86, 1373, 1367, 86, 1368,
-
- 1363, 1362, 86, 86, 86, 86, 1376, 1375, 86, 1364,
- 1369, 1365, 86, 1379, 1366, 1371, 86, 1377, 1372, 1378,
- 86, 1374, 1380, 1373, 86, 1381, 1382, 86, 86, 1383,
- 1384, 3483, 1385, 1376, 1375, 3483, 1386, 86, 86, 1388,
- 1379, 1387, 86, 3483, 86, 3483, 1378, 1389, 86, 1380,
- 1391, 1390, 1381, 1382, 86, 1392, 1383, 86, 86, 1385,
- 1394, 86, 86, 1386, 1393, 1396, 1388, 86, 1387, 86,
- 86, 1395, 86, 1397, 1389, 86, 1398, 1391, 1390, 1403,
- 1399, 1400, 1392, 86, 86, 86, 86, 1394, 86, 1401,
- 86, 1393, 1396, 1402, 1404, 1405, 1406, 1407, 1395, 3483,
-
- 1397, 86, 86, 1398, 1408, 86, 1412, 1399, 1400, 86,
- 86, 86, 86, 1409, 86, 1413, 1401, 1410, 86, 1414,
- 1402, 1404, 1405, 1406, 1407, 86, 86, 1411, 86, 86,
- 1415, 1408, 1417, 1412, 1418, 3483, 1416, 1422, 1421, 1420,
- 1409, 3483, 1419, 1427, 1410, 86, 1414, 86, 86, 86,
- 86, 1423, 86, 86, 1411, 1426, 1424, 86, 1428, 1417,
- 86, 1418, 86, 1416, 1422, 1421, 1420, 1425, 86, 1419,
- 1427, 1437, 1438, 1436, 1440, 86, 1442, 3483, 3483, 1439,
- 1452, 3483, 1426, 86, 86, 1428, 3483, 86, 1443, 86,
- 3483, 1441, 1444, 3483, 1425, 1429, 86, 1445, 1437, 1430,
-
- 1436, 1440, 1431, 1432, 86, 86, 1439, 1433, 86, 86,
- 86, 1447, 86, 1434, 86, 1443, 1458, 1435, 1441, 1444,
- 1450, 86, 1429, 86, 1445, 1446, 1430, 86, 1453, 1431,
- 1432, 86, 1451, 1448, 1433, 1449, 1454, 86, 1447, 1455,
- 1434, 86, 1457, 86, 1435, 1456, 86, 1450, 86, 1459,
- 1461, 86, 1446, 1460, 3483, 1453, 1467, 86, 86, 1451,
- 1448, 86, 1449, 1454, 3483, 1473, 1455, 3483, 1469, 1457,
- 3483, 1468, 1456, 86, 1472, 86, 1475, 1461, 86, 3483,
- 1460, 86, 1462, 1467, 86, 86, 1476, 1463, 86, 1464,
- 86, 1465, 1473, 1466, 86, 1469, 1470, 1471, 1468, 1474,
-
- 86, 1472, 1477, 1475, 86, 1479, 1481, 1478, 1482, 1462,
- 1480, 86, 1483, 1476, 1463, 86, 1464, 1487, 1465, 1484,
- 1466, 86, 3483, 86, 1488, 86, 1474, 86, 86, 1486,
- 86, 3483, 1479, 1481, 86, 1482, 1485, 1480, 1489, 1483,
- 1490, 1492, 86, 1493, 86, 3483, 1484, 1491, 1498, 86,
- 86, 1488, 1494, 86, 86, 1495, 1486, 86, 1496, 1497,
- 86, 86, 1500, 1485, 86, 1489, 1499, 1490, 1492, 86,
- 1493, 1501, 86, 1502, 1491, 86, 1504, 1503, 86, 1494,
- 1506, 86, 1495, 1505, 86, 1496, 1497, 1507, 1508, 86,
- 1509, 1510, 1513, 1499, 86, 3483, 86, 86, 1501, 86,
-
- 1502, 86, 1511, 1504, 1503, 1512, 1516, 86, 86, 1518,
- 1505, 86, 1515, 86, 1507, 86, 86, 1509, 1510, 86,
- 1514, 1517, 86, 1519, 1520, 1522, 1524, 86, 86, 1511,
- 86, 1521, 1512, 1516, 86, 1523, 1526, 1530, 86, 1515,
- 3483, 86, 86, 1525, 1527, 86, 3483, 1514, 1517, 86,
- 1519, 1520, 1522, 1524, 1528, 1529, 86, 1531, 1521, 86,
- 1532, 86, 1523, 1526, 1530, 86, 86, 1533, 1536, 1534,
- 1525, 1527, 1535, 86, 1538, 1539, 1537, 86, 86, 86,
- 1542, 1528, 1529, 1540, 1531, 3483, 86, 1532, 86, 86,
- 86, 1541, 1544, 86, 1533, 1536, 1534, 1543, 1545, 1535,
-
- 86, 1546, 1547, 1537, 1548, 86, 86, 86, 1549, 86,
- 1540, 1551, 86, 86, 86, 86, 1550, 86, 1541, 1544,
- 1552, 1554, 1555, 170, 1543, 1545, 86, 86, 86, 1547,
- 1553, 1548, 3483, 86, 86, 1549, 1557, 1556, 1551, 1558,
- 1562, 3483, 1560, 1550, 1561, 1559, 1563, 1552, 1565, 86,
- 3483, 86, 86, 86, 86, 86, 1564, 1553, 86, 86,
- 1567, 1570, 86, 1566, 1556, 86, 1558, 1562, 86, 1560,
- 86, 1561, 1559, 1563, 86, 1565, 1568, 1569, 1571, 1572,
- 1577, 1573, 86, 1564, 1576, 86, 1574, 1567, 86, 86,
- 1566, 1575, 3483, 86, 1578, 1586, 1579, 1585, 86, 86,
-
- 1580, 86, 1588, 1568, 1569, 1571, 1572, 1577, 1573, 86,
- 1589, 1576, 86, 86, 1581, 86, 1583, 1582, 86, 1584,
- 86, 1578, 1586, 1579, 1585, 1591, 86, 1580, 1593, 1587,
- 1592, 1590, 1609, 86, 86, 3483, 86, 1589, 86, 1594,
- 86, 1581, 86, 1583, 1582, 1595, 1584, 86, 1596, 1597,
- 1598, 1600, 1602, 1599, 86, 1593, 1587, 86, 1590, 86,
- 86, 1601, 1606, 3483, 86, 86, 1594, 1605, 86, 3483,
- 86, 86, 1595, 86, 1603, 1596, 1597, 1598, 1600, 1602,
- 1599, 1604, 1607, 86, 1608, 86, 1612, 1610, 1601, 1606,
- 86, 86, 86, 86, 1605, 1611, 1615, 1616, 1613, 86,
-
- 1614, 1603, 86, 86, 86, 3483, 1617, 1618, 1604, 1607,
- 86, 1608, 86, 1612, 1610, 1622, 1623, 1621, 1624, 86,
- 1626, 1619, 1611, 1615, 1616, 1613, 86, 1614, 86, 86,
- 86, 1620, 1625, 1617, 1618, 86, 86, 86, 1627, 86,
- 1628, 86, 1622, 1623, 1621, 1624, 86, 1626, 1619, 1629,
- 3483, 1630, 1631, 1632, 1633, 1634, 1636, 1637, 1620, 1625,
- 1638, 86, 86, 1635, 1641, 86, 3483, 1639, 3483, 1640,
- 86, 3483, 86, 1646, 86, 1642, 1629, 86, 1630, 86,
- 1632, 1633, 1634, 1643, 1645, 86, 86, 1648, 86, 86,
- 1635, 86, 86, 86, 1639, 86, 1640, 1644, 86, 86,
-
- 1646, 86, 1642, 1647, 3483, 1649, 86, 86, 1651, 1650,
- 1643, 1645, 1652, 1653, 1648, 86, 86, 1654, 1655, 1660,
- 1668, 3483, 1659, 1656, 1644, 86, 86, 86, 1657, 86,
- 1647, 86, 1649, 1658, 86, 1651, 1650, 1664, 1663, 1652,
- 1653, 1666, 3483, 1661, 1654, 86, 1660, 1662, 86, 1659,
- 86, 86, 86, 1665, 1667, 86, 86, 1669, 1672, 86,
- 86, 86, 1670, 86, 1664, 1663, 1671, 86, 1666, 86,
- 1661, 1674, 1675, 1682, 1662, 1673, 1681, 3483, 1676, 86,
- 1665, 1667, 86, 86, 1669, 86, 86, 1677, 1678, 1670,
- 86, 1679, 86, 1671, 1680, 86, 86, 1683, 1674, 86,
-
- 1682, 1684, 1673, 1681, 86, 1676, 1688, 86, 1685, 1686,
- 1689, 1687, 1690, 1692, 1677, 1678, 86, 86, 1679, 1691,
- 1705, 1680, 1698, 86, 1683, 86, 86, 86, 1684, 1693,
- 1694, 86, 1699, 86, 86, 1685, 1686, 86, 1687, 1690,
- 1692, 1695, 86, 1700, 86, 1696, 1691, 86, 1703, 1698,
- 1702, 1704, 86, 1701, 86, 86, 1693, 1694, 1697, 1699,
- 86, 86, 1706, 3483, 1708, 1707, 86, 1709, 1695, 1713,
- 1700, 1716, 1696, 86, 86, 86, 1710, 1702, 1704, 86,
- 1701, 1711, 1715, 1719, 1712, 1697, 86, 86, 86, 1706,
- 86, 1708, 1707, 86, 1709, 1714, 1713, 1717, 86, 86,
-
- 1720, 1718, 86, 1710, 1721, 86, 86, 86, 1711, 3483,
- 1719, 1712, 1722, 1723, 86, 1725, 1730, 1724, 1726, 86,
- 1727, 3483, 1714, 86, 1717, 1728, 86, 1720, 1718, 86,
- 1731, 86, 1729, 3483, 1733, 1781, 86, 3483, 86, 1722,
- 86, 86, 86, 1730, 1724, 1726, 1732, 1727, 86, 86,
- 1734, 3483, 1728, 86, 1737, 1736, 1738, 1731, 1735, 1729,
- 86, 1733, 86, 86, 86, 1739, 1740, 86, 1742, 86,
- 1741, 1744, 1743, 1732, 86, 1745, 86, 1734, 86, 86,
- 86, 1737, 1736, 1738, 86, 1735, 1748, 1746, 1750, 3483,
- 3483, 86, 1739, 1740, 1747, 1742, 1751, 1741, 1744, 1743,
-
- 86, 86, 1745, 86, 1749, 1752, 3483, 1753, 86, 1756,
- 1755, 1760, 86, 1748, 1746, 86, 86, 1754, 86, 86,
- 1757, 1747, 86, 1751, 1759, 86, 1761, 1758, 1762, 1764,
- 1763, 1749, 1752, 86, 1753, 86, 1756, 1755, 86, 1765,
- 170, 3483, 86, 86, 1754, 1766, 86, 1757, 86, 1769,
- 86, 1759, 86, 1761, 1758, 1762, 1764, 1763, 86, 1767,
- 1768, 1770, 86, 86, 1771, 3483, 1765, 86, 1773, 1775,
- 1772, 1774, 1766, 1778, 3483, 86, 1769, 1779, 86, 1777,
- 86, 1776, 1782, 1780, 1783, 1785, 1767, 1768, 1770, 86,
- 86, 1771, 86, 1787, 1784, 1773, 86, 1772, 1774, 86,
-
- 1778, 86, 86, 1786, 1779, 86, 1777, 86, 1776, 1782,
- 1780, 86, 86, 1788, 86, 1789, 86, 1790, 86, 1791,
- 1787, 1784, 1793, 1792, 1795, 1794, 3483, 1796, 1803, 1797,
- 1786, 86, 1798, 3483, 1799, 86, 86, 86, 86, 1807,
- 1788, 86, 1789, 86, 1790, 86, 1791, 86, 86, 1793,
- 1792, 1795, 1794, 86, 1796, 1800, 1797, 86, 1801, 1798,
- 86, 1799, 1804, 1811, 1805, 1808, 1807, 1809, 1812, 86,
- 1802, 1810, 1813, 1817, 1814, 3483, 1815, 3483, 3483, 86,
- 1806, 3483, 1800, 1816, 86, 1801, 1818, 86, 86, 1804,
- 86, 1805, 1808, 1824, 1809, 86, 86, 1802, 1810, 1823,
-
- 86, 1814, 86, 1815, 86, 86, 1819, 1806, 86, 86,
- 1816, 1821, 1820, 1818, 1825, 1822, 1827, 1830, 1826, 86,
- 86, 86, 86, 86, 1828, 86, 1823, 1829, 86, 1833,
- 1831, 3483, 1832, 1819, 1836, 1834, 86, 1837, 1821, 1820,
- 86, 86, 1822, 86, 86, 1826, 86, 86, 86, 86,
- 86, 1828, 86, 1835, 1829, 1838, 1833, 1831, 1839, 1832,
- 86, 1836, 1834, 1840, 1837, 86, 1841, 86, 86, 1842,
- 1843, 1844, 1845, 1846, 1848, 1850, 1849, 1851, 86, 3483,
- 1835, 1847, 1838, 86, 86, 1839, 86, 86, 86, 86,
- 1840, 86, 1852, 1841, 86, 86, 1842, 1843, 1844, 1845,
-
- 1846, 1853, 1850, 1849, 1851, 86, 86, 86, 1847, 1854,
- 1855, 1856, 1857, 3483, 1858, 1862, 1860, 86, 1859, 1852,
- 1861, 3483, 1864, 86, 86, 3483, 1863, 86, 1853, 86,
- 86, 1865, 1866, 86, 86, 1867, 86, 1855, 1856, 1857,
- 86, 1858, 1862, 1860, 86, 1859, 1868, 1861, 1872, 1864,
- 86, 86, 1871, 1863, 86, 1869, 1873, 86, 1865, 1866,
- 1870, 1874, 1867, 1875, 1878, 1876, 3483, 86, 1880, 1877,
- 1879, 3483, 86, 1868, 86, 1872, 86, 1881, 86, 1871,
- 1883, 1882, 1869, 86, 86, 1886, 1884, 1870, 86, 1885,
- 1875, 86, 1876, 86, 86, 1880, 1877, 1879, 1887, 86,
-
- 86, 1890, 86, 86, 1881, 86, 86, 1883, 1882, 1892,
- 1891, 1888, 1886, 1884, 1889, 3483, 1885, 1893, 1894, 86,
- 1896, 1895, 1898, 1897, 86, 1887, 3483, 1899, 1890, 86,
- 86, 1900, 86, 86, 86, 1904, 86, 1901, 1888, 1906,
- 3483, 1889, 86, 1907, 1893, 1894, 1903, 1896, 1895, 1902,
- 1897, 86, 86, 86, 86, 86, 1905, 86, 1900, 3483,
- 1908, 86, 1904, 3483, 1901, 86, 1906, 86, 1913, 1912,
- 1907, 1915, 1910, 1903, 1909, 1911, 1902, 86, 1914, 1918,
- 86, 1922, 1919, 1905, 86, 1921, 86, 1908, 1916, 1924,
- 86, 86, 86, 1917, 86, 1913, 1912, 1925, 1915, 1910,
-
- 1926, 1909, 1911, 1920, 1927, 1914, 1918, 86, 86, 1919,
- 1923, 1928, 1921, 86, 1929, 1931, 86, 86, 1930, 86,
- 86, 1932, 86, 1936, 1933, 86, 3483, 1926, 86, 86,
- 1920, 1927, 3483, 1934, 1941, 86, 1938, 1923, 86, 1935,
- 1937, 1929, 1931, 86, 86, 1930, 1939, 1942, 1943, 1940,
- 1945, 1933, 1944, 86, 86, 86, 86, 86, 1946, 86,
- 1934, 1941, 86, 1938, 86, 86, 1935, 1937, 86, 1947,
- 86, 86, 1948, 1939, 1942, 1943, 1940, 1945, 1950, 1944,
- 1951, 1952, 86, 3483, 1953, 1946, 1957, 1954, 1955, 1958,
- 1956, 1959, 1962, 1949, 86, 86, 1947, 86, 86, 86,
-
- 1960, 86, 1963, 86, 1966, 86, 3483, 1961, 1952, 1965,
- 86, 86, 86, 86, 1954, 1955, 1958, 1956, 86, 1962,
- 1949, 1964, 1968, 86, 1969, 1970, 86, 1960, 86, 86,
- 1967, 1966, 86, 1976, 1961, 1971, 1965, 86, 1972, 86,
- 1973, 1975, 1974, 86, 86, 86, 86, 1977, 1964, 1968,
- 1981, 1969, 1970, 1978, 86, 1979, 170, 1967, 86, 1982,
- 1976, 86, 1971, 1980, 1983, 1972, 86, 1973, 1975, 1974,
- 86, 86, 86, 1984, 86, 1986, 1988, 86, 1985, 1989,
- 1978, 1997, 1979, 86, 86, 1987, 1982, 1990, 86, 1991,
- 1980, 1983, 86, 86, 86, 1992, 86, 1993, 1994, 1996,
-
- 1984, 1995, 1986, 1998, 1999, 1985, 1989, 2000, 86, 2001,
- 86, 2002, 1987, 86, 1990, 2003, 1991, 86, 86, 86,
- 86, 86, 86, 86, 1993, 86, 1996, 2006, 1995, 2007,
- 86, 1999, 86, 86, 2000, 2004, 2001, 2005, 2002, 2008,
- 2009, 2010, 2003, 2011, 86, 2012, 86, 2019, 2020, 86,
- 3483, 86, 2014, 86, 2006, 86, 2007, 86, 2013, 86,
- 2017, 2018, 2004, 86, 2005, 86, 2008, 2009, 2010, 2015,
- 2011, 2021, 2012, 86, 86, 2022, 2016, 86, 2023, 2014,
- 86, 2024, 86, 86, 2026, 2013, 86, 2017, 2018, 2029,
- 2025, 86, 86, 2027, 2030, 2028, 2015, 86, 2021, 2031,
-
- 2032, 2033, 2022, 2016, 2034, 2023, 86, 86, 2024, 86,
- 2037, 2026, 2035, 2036, 2040, 86, 2029, 2025, 86, 86,
- 2027, 86, 2028, 2038, 2039, 2041, 86, 2032, 86, 2043,
- 86, 2034, 2044, 2042, 3483, 2047, 2049, 86, 86, 2035,
- 2036, 2040, 86, 2045, 2046, 86, 86, 2050, 2048, 2057,
- 2038, 2053, 2051, 2078, 86, 86, 86, 86, 86, 2044,
- 2042, 86, 86, 2049, 86, 2054, 2052, 2056, 86, 2055,
- 2045, 2046, 86, 86, 86, 2048, 2065, 3483, 2053, 2051,
- 86, 86, 2063, 2058, 2059, 2060, 3483, 86, 2069, 86,
- 2061, 86, 2054, 2052, 2056, 86, 2055, 2062, 86, 2064,
-
- 2066, 86, 2070, 2071, 86, 2072, 86, 86, 86, 2063,
- 2058, 2059, 2060, 2067, 86, 2069, 2074, 2061, 2068, 2073,
- 2075, 86, 2079, 86, 2062, 2080, 2064, 2066, 86, 2070,
- 2071, 86, 2072, 2076, 2082, 2077, 2081, 2084, 86, 86,
- 86, 86, 2083, 86, 2086, 86, 2073, 2075, 86, 2079,
- 2085, 86, 2080, 2087, 2088, 86, 2089, 86, 2091, 2090,
- 2076, 2082, 2077, 2081, 86, 86, 2093, 2092, 86, 2083,
- 2094, 86, 86, 2095, 86, 2096, 86, 2085, 86, 2102,
- 2087, 2088, 2099, 2089, 2103, 86, 2090, 2097, 2098, 86,
- 86, 2100, 86, 86, 2092, 86, 2101, 2094, 2110, 2105,
-
- 2095, 86, 2096, 2104, 2106, 86, 2102, 86, 86, 2099,
- 86, 2109, 2107, 2108, 2097, 2098, 86, 2112, 2100, 86,
- 2111, 86, 2113, 2101, 2114, 86, 2105, 2119, 2116, 86,
- 2104, 2115, 86, 2118, 86, 86, 86, 86, 2120, 2107,
- 2108, 2117, 86, 86, 2112, 2121, 86, 2111, 2124, 2113,
- 86, 2114, 86, 86, 2119, 2116, 2122, 2123, 2115, 2126,
- 2118, 2129, 2127, 86, 2125, 2128, 86, 86, 2117, 86,
- 86, 86, 2130, 2131, 2132, 2124, 2135, 86, 2134, 2133,
- 86, 2148, 86, 2122, 2123, 86, 2126, 86, 86, 2127,
- 2136, 2125, 2128, 2137, 2141, 2138, 3483, 86, 2143, 2130,
-
- 2131, 2132, 86, 2135, 86, 2134, 2133, 2139, 86, 2142,
- 2145, 86, 2140, 86, 2153, 86, 2144, 2136, 86, 2146,
- 86, 86, 2138, 86, 86, 2143, 86, 2151, 2147, 2149,
- 2150, 2152, 86, 2154, 2139, 86, 2142, 2145, 86, 2140,
- 2155, 86, 86, 2144, 2156, 86, 2146, 2160, 2157, 86,
- 2161, 2164, 2165, 2158, 2151, 2147, 2149, 2150, 2152, 86,
- 2154, 2159, 86, 86, 86, 2162, 2168, 2155, 86, 2167,
- 2163, 2156, 2166, 86, 86, 2157, 2169, 86, 2171, 2170,
- 2158, 86, 2178, 86, 86, 2172, 2175, 2173, 2159, 2177,
- 2174, 86, 86, 2168, 86, 2191, 2167, 86, 2176, 2166,
-
- 86, 86, 2179, 86, 2180, 2171, 2170, 2182, 86, 86,
- 86, 86, 2172, 86, 2173, 2181, 2184, 2174, 86, 2185,
- 2183, 86, 86, 3483, 86, 2176, 2186, 86, 2187, 2179,
- 2188, 2180, 2189, 2190, 2182, 86, 2193, 170, 3483, 3483,
- 86, 86, 2181, 2184, 2192, 2194, 2185, 2183, 2196, 2195,
- 86, 3483, 2199, 2186, 86, 2187, 2197, 86, 86, 86,
- 2190, 3483, 2198, 2193, 2202, 86, 86, 86, 2203, 2200,
- 86, 2192, 2194, 2201, 2204, 2196, 2195, 86, 86, 2199,
- 86, 2205, 2206, 2197, 86, 2208, 86, 2207, 86, 2198,
- 2209, 2202, 86, 2211, 3483, 86, 2200, 86, 2210, 2212,
-
- 2201, 2204, 86, 86, 86, 2213, 2215, 86, 2205, 2206,
- 2216, 86, 86, 2214, 2207, 2217, 86, 2209, 2218, 86,
- 2211, 2219, 2222, 3483, 2225, 2210, 2212, 86, 86, 3483,
- 2220, 86, 2213, 86, 86, 86, 2223, 2216, 86, 2224,
- 2214, 2221, 2217, 2226, 2227, 2218, 86, 2228, 2219, 2222,
- 86, 2225, 2231, 86, 86, 2229, 86, 2220, 2230, 86,
- 2232, 86, 2233, 2223, 2234, 2236, 2224, 2237, 2221, 2235,
- 2226, 2227, 86, 86, 2228, 86, 2238, 86, 86, 86,
- 2239, 86, 2229, 2240, 86, 2230, 86, 2232, 2241, 2233,
- 2242, 2234, 2236, 2243, 2244, 2247, 2235, 86, 2245, 86,
-
- 2246, 2248, 3483, 2238, 86, 2249, 86, 2239, 86, 2250,
- 2240, 2253, 86, 2254, 2251, 2241, 86, 86, 86, 86,
- 2243, 86, 2247, 2252, 86, 2245, 3483, 2246, 2255, 86,
- 86, 86, 2249, 86, 86, 2258, 2250, 86, 2253, 2256,
- 2254, 2251, 2257, 2259, 2260, 86, 2262, 86, 2261, 2264,
- 2252, 2267, 3483, 2266, 86, 2255, 86, 86, 86, 2263,
- 86, 2265, 2258, 2268, 3483, 86, 2256, 86, 86, 2257,
- 2259, 2260, 86, 2262, 2269, 2261, 2264, 2271, 86, 2270,
- 2266, 86, 2272, 2273, 2275, 3483, 2263, 2274, 2265, 86,
- 2268, 2276, 2281, 86, 2284, 2277, 2282, 3483, 2278, 86,
-
- 3483, 2269, 2280, 86, 2271, 86, 2270, 86, 2279, 2272,
- 2273, 2275, 86, 86, 2274, 86, 86, 86, 2276, 2281,
- 86, 86, 2277, 2282, 2283, 2278, 86, 2285, 2286, 2280,
- 2287, 2289, 86, 2288, 86, 2279, 2290, 2291, 2293, 2294,
- 2292, 86, 2295, 3483, 2299, 3483, 86, 86, 2296, 2300,
- 2301, 2283, 86, 86, 2285, 2286, 2298, 86, 2289, 86,
- 2288, 86, 86, 2290, 2291, 2293, 2294, 2292, 2297, 86,
- 86, 86, 2302, 2303, 86, 2296, 86, 2301, 2304, 2306,
- 86, 2305, 86, 2298, 2308, 2307, 86, 2309, 2310, 3483,
- 2314, 86, 86, 2311, 3483, 2297, 3483, 2316, 3483, 2302,
-
- 2303, 2317, 86, 2312, 2315, 86, 2306, 86, 2305, 86,
- 2319, 2313, 2307, 86, 2309, 2310, 86, 86, 2318, 86,
- 2311, 2323, 86, 86, 2316, 2320, 2321, 86, 2317, 2322,
- 2312, 2315, 86, 2324, 86, 2325, 86, 2319, 2313, 86,
- 2326, 2328, 2327, 2329, 86, 2318, 86, 2330, 2323, 2331,
- 2332, 2333, 2320, 2321, 2334, 2335, 2322, 86, 86, 86,
- 2324, 86, 86, 2336, 3483, 86, 2337, 86, 2328, 2327,
- 2329, 86, 86, 86, 2330, 86, 2331, 2332, 2333, 2338,
- 2339, 2334, 2335, 2340, 2341, 86, 2342, 2343, 86, 2344,
- 86, 86, 2346, 2337, 2349, 2347, 2348, 86, 86, 86,
-
- 2345, 2353, 3483, 2352, 86, 86, 2338, 2339, 2367, 86,
- 2340, 2341, 86, 2342, 2343, 86, 2344, 86, 86, 2346,
- 2350, 2349, 2347, 2348, 86, 2354, 2355, 2345, 2353, 2356,
- 2352, 86, 2357, 2351, 2358, 86, 2359, 86, 2360, 2361,
- 86, 86, 2364, 2362, 2363, 2371, 2372, 2350, 86, 2366,
- 86, 86, 2354, 2355, 86, 2376, 2356, 86, 2365, 2357,
- 2351, 86, 2373, 2359, 86, 86, 2361, 86, 2368, 2364,
- 2362, 2363, 86, 170, 2369, 2374, 2366, 86, 86, 2370,
- 2375, 3483, 86, 2377, 3483, 2365, 86, 86, 2381, 2373,
- 2382, 2384, 2386, 2380, 86, 2368, 2385, 2378, 2383, 2388,
-
- 86, 2390, 2374, 2387, 2426, 2389, 86, 2375, 2379, 86,
- 2377, 86, 3483, 86, 86, 86, 86, 2382, 2384, 2386,
- 2380, 2391, 2393, 3483, 2378, 2383, 86, 86, 86, 86,
- 2387, 2392, 2389, 86, 2394, 2379, 86, 2395, 86, 86,
- 2396, 86, 2397, 2398, 86, 86, 86, 2400, 2391, 2393,
- 2399, 2403, 2401, 2402, 2404, 86, 86, 2405, 2392, 86,
- 86, 2394, 86, 86, 2395, 2406, 2416, 2396, 2408, 2397,
- 2398, 2407, 86, 86, 2400, 2409, 86, 2399, 2403, 2401,
- 2402, 2404, 2410, 86, 86, 2411, 2412, 2414, 86, 2413,
- 86, 86, 2406, 86, 86, 2408, 2415, 3483, 2407, 2417,
-
- 86, 86, 2409, 2421, 2420, 86, 86, 2418, 86, 2410,
- 2428, 86, 2411, 2412, 2414, 86, 2413, 2419, 86, 2422,
- 2424, 2427, 2423, 2415, 86, 86, 2417, 86, 86, 2429,
- 2421, 2420, 2425, 86, 2418, 86, 2430, 2428, 86, 2431,
- 2433, 2435, 86, 2432, 2419, 2437, 2422, 2424, 2427, 2423,
- 86, 2434, 3483, 2439, 2440, 2436, 2429, 86, 86, 2425,
- 2438, 2441, 2442, 2430, 86, 86, 2431, 86, 2435, 86,
- 2432, 2443, 2437, 86, 86, 2445, 2444, 2448, 2434, 86,
- 2439, 86, 2436, 86, 2449, 2450, 86, 2438, 2441, 86,
- 86, 2446, 2451, 2452, 2447, 2454, 2455, 2456, 2443, 2453,
-
- 86, 86, 2445, 2444, 86, 2457, 86, 86, 2458, 86,
- 86, 86, 2450, 86, 86, 2460, 2459, 2461, 2446, 2451,
- 2452, 2447, 2454, 86, 86, 86, 2453, 2462, 2463, 86,
- 2464, 2467, 2457, 2465, 2466, 86, 2471, 2468, 2473, 2469,
- 2470, 86, 86, 2459, 2461, 2472, 86, 86, 2475, 86,
- 86, 2479, 86, 86, 2462, 86, 2476, 86, 2467, 2474,
- 2465, 2466, 86, 86, 2468, 86, 2469, 2470, 86, 86,
- 2477, 2480, 2472, 2484, 2482, 2475, 2481, 2483, 86, 86,
- 86, 86, 2485, 2476, 2486, 2478, 2474, 2489, 86, 86,
- 2487, 86, 2490, 2488, 86, 2495, 86, 2477, 2480, 86,
-
- 2484, 2482, 2492, 2481, 2483, 86, 2493, 2491, 2497, 86,
- 86, 2486, 2478, 2494, 2489, 86, 2496, 2487, 86, 86,
- 2488, 2499, 86, 86, 86, 86, 2498, 2500, 86, 2492,
- 86, 2501, 86, 2493, 2491, 2497, 86, 2502, 2503, 86,
- 2494, 2504, 2508, 2496, 2509, 2505, 3483, 3483, 2499, 3483,
- 3483, 2510, 3483, 2498, 2500, 2511, 86, 3483, 2501, 86,
- 2506, 2513, 2507, 86, 2502, 2503, 86, 2520, 2504, 86,
- 2514, 2509, 2505, 86, 86, 86, 86, 86, 2510, 2512,
- 2515, 86, 2511, 2516, 86, 3483, 2517, 2506, 2513, 2507,
- 2518, 2519, 2521, 2523, 2522, 2524, 3483, 2514, 2529, 86,
-
- 86, 2525, 86, 86, 2526, 86, 2512, 2515, 86, 2527,
- 2516, 86, 86, 2517, 2530, 2528, 2531, 2518, 2519, 2532,
- 2523, 2522, 86, 86, 86, 2529, 86, 86, 2525, 86,
- 2533, 2526, 86, 2537, 86, 2535, 2527, 86, 2534, 2536,
- 3483, 2530, 2528, 2531, 3483, 2538, 2532, 2539, 86, 2541,
- 2540, 86, 86, 2542, 86, 2543, 86, 2533, 3483, 2550,
- 2537, 2545, 2547, 2544, 3483, 2534, 2546, 86, 86, 3483,
- 86, 86, 2538, 2552, 2539, 86, 2541, 2540, 3483, 86,
- 2551, 86, 2543, 2553, 170, 86, 2550, 2554, 2545, 2547,
- 2544, 86, 86, 2546, 2548, 86, 2549, 2555, 2556, 2557,
-
- 86, 86, 2558, 2559, 2562, 86, 2560, 2551, 2561, 86,
- 2553, 86, 86, 2563, 2554, 86, 2564, 86, 2565, 86,
- 2566, 2548, 2571, 2549, 2555, 2556, 2557, 86, 86, 2558,
- 2559, 2562, 2567, 2560, 2568, 2561, 2569, 2570, 2572, 2578,
- 86, 3483, 86, 2564, 86, 86, 2573, 2566, 2574, 86,
- 2576, 86, 2577, 2581, 86, 86, 2575, 2579, 86, 2567,
- 2580, 2582, 2583, 86, 2570, 2572, 86, 2589, 86, 86,
- 86, 86, 86, 2573, 2584, 2574, 86, 2576, 86, 2577,
- 2581, 2585, 86, 2575, 2579, 86, 2586, 2580, 2582, 86,
- 2587, 2588, 2590, 2591, 86, 2592, 86, 86, 2593, 86,
-
- 2595, 2584, 86, 2594, 86, 86, 86, 2597, 2585, 2598,
- 2599, 3483, 2600, 2586, 86, 86, 86, 2587, 2588, 2590,
- 2591, 2596, 2592, 86, 2601, 2593, 2606, 2595, 86, 86,
- 2594, 86, 2602, 86, 2597, 2603, 2604, 2599, 86, 2600,
- 86, 86, 2607, 86, 2605, 2608, 2609, 2610, 2596, 2613,
- 86, 2601, 3483, 86, 2615, 2611, 86, 86, 86, 2602,
- 2612, 2620, 2603, 2604, 2614, 2616, 3483, 86, 86, 2607,
- 2618, 2605, 2608, 2609, 86, 2619, 2613, 86, 2622, 86,
- 86, 2615, 2611, 2617, 86, 86, 2621, 2612, 2623, 86,
- 2624, 2614, 2616, 86, 2625, 2626, 86, 2618, 86, 3483,
-
- 2627, 86, 2619, 86, 2628, 86, 86, 2631, 86, 2633,
- 2617, 86, 2634, 2621, 2630, 2623, 2632, 86, 2629, 86,
- 86, 2625, 2626, 2635, 2636, 2638, 86, 2627, 3483, 86,
- 86, 2628, 2639, 2637, 2631, 3483, 86, 2641, 86, 86,
- 2640, 2630, 2642, 2632, 86, 2629, 2644, 2643, 86, 2646,
- 86, 2636, 2638, 2645, 86, 86, 2647, 86, 2648, 2639,
- 2637, 86, 86, 2649, 2641, 86, 2652, 2640, 2650, 2642,
- 86, 86, 2653, 86, 2643, 86, 2651, 2654, 2655, 2656,
- 2645, 86, 3483, 2647, 86, 2648, 2658, 2659, 86, 2657,
- 86, 3483, 86, 2652, 2664, 2650, 2660, 2661, 86, 2653,
-
- 86, 86, 2662, 2651, 86, 2655, 2656, 86, 86, 86,
- 86, 2663, 86, 2658, 2659, 2665, 2657, 86, 2666, 2667,
- 2668, 2664, 86, 2660, 2661, 2669, 2670, 2672, 2671, 2662,
- 3483, 2674, 2677, 86, 2673, 2676, 86, 2675, 2663, 86,
- 86, 2679, 2665, 86, 3483, 2666, 86, 86, 86, 2681,
- 86, 2678, 86, 86, 2672, 2671, 86, 86, 2674, 2677,
- 86, 2673, 2676, 86, 2675, 2680, 86, 2682, 2679, 2683,
- 2684, 86, 2685, 2686, 3483, 2687, 2681, 86, 2678, 2690,
- 2689, 2688, 2691, 2694, 2692, 2695, 86, 2696, 3483, 86,
- 86, 86, 2680, 3483, 86, 86, 2683, 86, 2693, 86,
-
- 2686, 86, 2687, 86, 86, 86, 2690, 2689, 2688, 2691,
- 86, 2692, 2695, 2698, 86, 2697, 86, 2699, 2700, 2701,
- 86, 86, 2702, 2703, 2704, 2693, 2705, 86, 3483, 2706,
- 2710, 86, 86, 2711, 3483, 86, 3483, 86, 2712, 170,
- 2698, 2714, 2697, 2707, 2699, 2700, 2701, 86, 86, 2702,
- 2703, 2704, 86, 2705, 2708, 86, 2706, 2710, 2709, 2713,
- 2711, 2715, 86, 86, 2716, 2712, 86, 86, 2714, 2717,
- 2707, 2718, 86, 2719, 3483, 2720, 2722, 2724, 2721, 3483,
- 3483, 2708, 2723, 86, 2726, 2709, 2713, 86, 2715, 86,
- 86, 86, 86, 86, 3483, 2731, 86, 86, 2718, 86,
-
- 2719, 86, 2720, 2722, 2724, 2721, 2725, 2727, 2728, 2723,
- 2729, 2726, 86, 86, 2730, 86, 2732, 2733, 2734, 2736,
- 86, 86, 2731, 86, 2735, 2737, 86, 86, 86, 2739,
- 2740, 2738, 2742, 2725, 2727, 2728, 86, 2729, 86, 2743,
- 2744, 2730, 2741, 2732, 2733, 2734, 86, 86, 86, 86,
- 86, 2735, 2737, 2745, 2747, 2748, 2739, 86, 2738, 86,
- 86, 2749, 2746, 86, 86, 2751, 2743, 2744, 2750, 2741,
- 2752, 2753, 86, 86, 86, 2756, 86, 2754, 2755, 2757,
- 2745, 2747, 2748, 2758, 86, 86, 2759, 86, 2749, 2746,
- 2760, 3483, 2751, 2762, 2763, 2750, 86, 86, 86, 86,
-
- 2761, 86, 2756, 2764, 2754, 2755, 86, 86, 2765, 2766,
- 86, 2767, 86, 2769, 2768, 86, 86, 2760, 86, 2770,
- 2762, 2763, 2771, 2772, 2773, 86, 2774, 2761, 2775, 3483,
- 2764, 86, 2777, 86, 86, 2765, 2766, 2782, 2767, 86,
- 86, 2768, 86, 86, 86, 2776, 2770, 2778, 2783, 86,
- 2772, 2773, 86, 2774, 86, 2775, 2779, 2780, 2784, 2777,
- 2781, 86, 2785, 86, 2782, 86, 2786, 86, 2788, 86,
- 86, 86, 2776, 2789, 2778, 86, 2787, 2792, 2790, 2791,
- 86, 3483, 3483, 2779, 2780, 2784, 2794, 2781, 2797, 2785,
- 86, 2801, 86, 86, 2793, 2788, 86, 2798, 86, 2799,
-
- 2789, 2803, 86, 2787, 86, 2790, 2791, 2795, 86, 2796,
- 2800, 2802, 86, 2794, 86, 86, 86, 86, 86, 86,
- 2804, 2793, 2805, 2809, 2798, 2808, 2799, 2810, 86, 2807,
- 2806, 2812, 86, 86, 2795, 3483, 2796, 2800, 2802, 2818,
- 86, 86, 86, 2811, 86, 2813, 2814, 2804, 86, 2805,
- 86, 2815, 2808, 86, 2810, 2820, 2807, 2806, 86, 86,
- 86, 2816, 2817, 2821, 2819, 2822, 86, 86, 2824, 86,
- 2811, 86, 2813, 2814, 2823, 2825, 3483, 2827, 2815, 86,
- 86, 86, 2820, 3483, 2826, 86, 2829, 86, 2816, 2817,
- 86, 2819, 2822, 2831, 2828, 2824, 86, 86, 2830, 2834,
-
- 2832, 2823, 2825, 86, 2827, 86, 2833, 2835, 2836, 2837,
- 86, 2826, 86, 2829, 2838, 86, 2840, 86, 86, 2839,
- 2831, 2828, 86, 2841, 2843, 2830, 86, 2832, 2842, 3483,
- 86, 2844, 86, 2833, 86, 2836, 2837, 86, 86, 86,
- 2845, 170, 2846, 2840, 2848, 2849, 2839, 2850, 2847, 2851,
- 2841, 2855, 2857, 86, 86, 2842, 86, 2852, 2844, 2853,
- 2856, 86, 2858, 2859, 2854, 86, 86, 2845, 2865, 2846,
- 86, 86, 86, 86, 2850, 2847, 86, 2860, 2855, 2857,
- 2861, 86, 86, 2862, 2852, 2866, 86, 2856, 2868, 2863,
- 2859, 86, 2867, 2869, 86, 86, 2864, 2871, 86, 86,
-
- 86, 3483, 86, 86, 2860, 2870, 2873, 2861, 86, 2874,
- 2862, 2872, 2877, 86, 86, 2868, 2863, 86, 2879, 2867,
- 2869, 86, 2878, 2864, 2871, 2875, 86, 86, 86, 2876,
- 86, 86, 2870, 2873, 86, 2880, 2874, 2881, 2872, 2877,
- 86, 2882, 2883, 86, 86, 2879, 2884, 3483, 2888, 2878,
- 86, 2886, 2875, 86, 2891, 2885, 2876, 2887, 86, 86,
- 2889, 2890, 2880, 86, 2881, 86, 2893, 86, 2882, 86,
- 2898, 2892, 86, 2884, 86, 86, 2897, 2894, 2886, 2895,
- 86, 2891, 2885, 86, 2887, 86, 2900, 2889, 2890, 2896,
- 2899, 86, 86, 86, 2901, 2904, 86, 86, 2892, 86,
-
- 2902, 2903, 2905, 2897, 2894, 2907, 2895, 2909, 2906, 86,
- 2908, 3483, 3483, 2911, 2910, 2912, 2896, 2899, 86, 2913,
- 2916, 86, 86, 86, 86, 2914, 86, 2902, 86, 2905,
- 86, 86, 2907, 86, 2915, 2906, 86, 2908, 86, 86,
- 2911, 2910, 2912, 86, 2917, 2918, 2913, 86, 2920, 2921,
- 2919, 86, 2914, 2922, 2924, 2930, 2923, 2925, 2928, 2927,
- 86, 2915, 2926, 3483, 2929, 86, 2931, 2935, 2932, 86,
- 86, 86, 86, 86, 86, 2920, 86, 2919, 86, 2936,
- 2922, 2924, 86, 2923, 2933, 2928, 2927, 2934, 86, 86,
- 86, 2929, 86, 86, 86, 2932, 2937, 2938, 86, 2939,
-
- 2940, 86, 2942, 86, 2941, 2943, 2936, 2945, 2944, 2946,
- 2947, 2933, 2949, 2948, 2934, 2957, 86, 86, 2953, 86,
- 86, 2950, 86, 2937, 86, 86, 2939, 86, 2951, 86,
- 2956, 2941, 2943, 2952, 2945, 2944, 86, 86, 2959, 2954,
- 2948, 86, 2955, 86, 86, 2953, 86, 86, 2950, 86,
- 2958, 86, 86, 2960, 2961, 2962, 3483, 2956, 2966, 2963,
- 86, 86, 2964, 2965, 86, 2959, 2954, 3483, 2971, 2955,
- 2969, 2973, 3483, 3483, 86, 86, 86, 2958, 2967, 2968,
- 86, 2961, 2962, 86, 86, 2966, 2963, 86, 86, 2964,
- 2965, 2970, 86, 2975, 2972, 2971, 2974, 2969, 86, 2977,
-
- 86, 2976, 2978, 2979, 2985, 2967, 2968, 86, 2980, 86,
- 86, 2982, 86, 2981, 3483, 2986, 2983, 86, 2970, 2984,
- 2975, 2972, 86, 2974, 2987, 2990, 2977, 86, 2976, 2978,
- 2979, 86, 2988, 3483, 2989, 2991, 86, 2992, 2993, 86,
- 86, 86, 2986, 86, 86, 2995, 2984, 2996, 2997, 2999,
- 86, 2987, 2990, 2994, 3483, 86, 86, 86, 86, 2988,
- 86, 2989, 2991, 2998, 2992, 2993, 86, 86, 3001, 3002,
- 86, 3000, 2995, 3003, 2996, 2997, 2999, 3004, 86, 3005,
- 2994, 86, 3006, 3007, 3009, 3008, 86, 3010, 3015, 3483,
- 2998, 3483, 3483, 3016, 3483, 86, 86, 86, 3000, 3011,
-
- 3003, 3012, 86, 3013, 3004, 86, 86, 86, 3019, 3006,
- 86, 86, 3008, 3014, 3010, 86, 86, 86, 3017, 86,
- 3016, 86, 86, 3018, 86, 3020, 3011, 3021, 3012, 3023,
- 3013, 86, 3022, 3024, 3025, 3019, 86, 86, 3027, 3028,
- 3014, 3026, 3029, 86, 3030, 3017, 86, 3032, 3483, 3031,
- 3018, 86, 3020, 3483, 3033, 86, 3023, 86, 86, 86,
- 3024, 3025, 3034, 86, 3036, 86, 86, 3037, 3026, 3029,
- 3039, 3030, 86, 3035, 86, 86, 3031, 86, 3040, 3042,
- 3038, 3033, 3041, 3483, 3044, 86, 86, 86, 86, 3034,
- 3043, 3036, 3046, 86, 3037, 3045, 3483, 3051, 3052, 3053,
-
- 3035, 86, 86, 3048, 3047, 3040, 3042, 3038, 3058, 3041,
- 86, 3044, 86, 86, 86, 3054, 86, 3043, 86, 3046,
- 3049, 3055, 3045, 3050, 86, 86, 86, 3056, 86, 3057,
- 3048, 3047, 3483, 86, 3061, 86, 3059, 3060, 3063, 3064,
- 86, 3067, 3054, 3062, 3483, 86, 86, 3049, 3055, 3065,
- 3050, 86, 86, 86, 3056, 3068, 3057, 86, 86, 86,
- 3066, 86, 3069, 3059, 3060, 3063, 3064, 3070, 3075, 86,
- 3062, 86, 3073, 86, 3071, 3072, 3065, 3074, 3078, 3076,
- 86, 3077, 3068, 3483, 3483, 86, 3079, 3066, 86, 86,
- 86, 86, 3081, 3080, 3070, 3075, 86, 86, 86, 3073,
-
- 86, 3071, 3072, 3082, 3074, 86, 3076, 86, 3077, 3084,
- 3085, 3083, 3086, 3079, 3088, 86, 3087, 86, 3090, 3081,
- 3080, 86, 86, 86, 3089, 3091, 86, 86, 3092, 86,
- 3082, 3094, 3095, 3097, 86, 3100, 3084, 3085, 3083, 3086,
- 86, 3088, 86, 3087, 3096, 3090, 3093, 3102, 3103, 3106,
- 86, 3089, 3091, 3098, 86, 86, 3099, 86, 86, 86,
- 86, 3101, 3100, 3104, 86, 3109, 3105, 86, 3108, 86,
- 86, 3096, 86, 3093, 3102, 86, 86, 3112, 3107, 3111,
- 3098, 86, 86, 3099, 86, 3110, 3114, 86, 3101, 3113,
- 3104, 86, 3109, 3105, 3116, 3108, 86, 3115, 86, 86,
-
- 3117, 3118, 3119, 3120, 86, 3107, 3111, 3121, 3125, 3123,
- 86, 3126, 3110, 3124, 86, 86, 3113, 3128, 86, 86,
- 3130, 3116, 3137, 3138, 3115, 86, 3122, 86, 86, 3119,
- 3120, 86, 86, 3127, 86, 3125, 3123, 3131, 3129, 3132,
- 3124, 86, 3134, 86, 3128, 86, 3133, 86, 3136, 86,
- 86, 3143, 3135, 3122, 86, 86, 3139, 3140, 3146, 3483,
- 3127, 3149, 3483, 86, 3131, 3129, 3132, 86, 86, 3134,
- 86, 3142, 3141, 3133, 3144, 3136, 3145, 3150, 86, 3135,
- 86, 86, 3151, 3139, 86, 3147, 3148, 3154, 86, 86,
- 86, 86, 86, 86, 3153, 86, 86, 3155, 3142, 3141,
-
- 3152, 3144, 86, 3145, 3150, 86, 3156, 3157, 86, 3151,
- 3158, 3159, 3147, 3148, 86, 3161, 3163, 86, 3160, 3162,
- 3164, 3153, 3165, 3166, 3155, 86, 3170, 3152, 86, 3169,
- 3167, 3168, 86, 3156, 3157, 3171, 3483, 86, 86, 3178,
- 86, 86, 3161, 86, 86, 3160, 3162, 86, 86, 86,
- 86, 3172, 3184, 3170, 3177, 3173, 3175, 3167, 3168, 86,
- 86, 86, 86, 3174, 86, 3176, 86, 3180, 86, 3182,
- 86, 3179, 86, 3181, 3185, 86, 86, 3183, 3172, 86,
- 86, 3177, 3173, 3175, 3186, 3188, 86, 3189, 3191, 3195,
- 3174, 3190, 3176, 86, 3180, 86, 3182, 86, 3179, 3187,
-
- 3181, 86, 3192, 3193, 3183, 3197, 86, 3194, 3196, 86,
- 3198, 3199, 3188, 3200, 3189, 86, 86, 3201, 3190, 3483,
- 86, 86, 3483, 86, 86, 86, 3187, 3483, 3204, 86,
- 3193, 3205, 3197, 86, 3194, 3196, 86, 86, 3199, 86,
- 3200, 3202, 3203, 3206, 3201, 3208, 86, 3207, 86, 86,
- 86, 3211, 3209, 86, 3210, 3204, 3212, 3215, 3205, 86,
- 86, 86, 3219, 86, 86, 3216, 86, 86, 3202, 3203,
- 3206, 3217, 3208, 3218, 3207, 3213, 3214, 3220, 3211, 3209,
- 86, 3210, 3221, 3212, 3215, 86, 3222, 86, 3224, 86,
- 3225, 3223, 3216, 86, 86, 3227, 3226, 3230, 3217, 86,
-
- 3218, 3483, 3213, 3214, 3220, 86, 3228, 3231, 3229, 3221,
- 86, 3232, 3233, 3222, 3236, 86, 86, 86, 3223, 86,
- 3234, 3235, 86, 3226, 86, 3237, 3238, 3483, 86, 3239,
- 3241, 3240, 3242, 3228, 86, 3229, 3243, 3244, 3247, 3245,
- 86, 86, 3248, 3483, 3246, 86, 86, 3251, 86, 86,
- 86, 86, 86, 86, 86, 3249, 3239, 3241, 3240, 86,
- 86, 3252, 86, 3243, 3244, 3247, 3245, 86, 3250, 86,
- 86, 3246, 3253, 3254, 3251, 3256, 3257, 3255, 3258, 3268,
- 3259, 3260, 3249, 3261, 86, 86, 86, 3263, 3252, 3262,
- 86, 3276, 3269, 3266, 86, 3250, 86, 86, 3267, 3253,
-
- 3254, 86, 3256, 86, 3255, 3258, 86, 3259, 86, 86,
- 86, 86, 3264, 3272, 3263, 3265, 3262, 3270, 3271, 3269,
- 3274, 3273, 3275, 86, 86, 86, 3278, 3279, 86, 86,
- 86, 3277, 3282, 3281, 3280, 86, 3283, 3285, 3284, 3264,
- 3272, 3286, 3265, 86, 3270, 3271, 86, 3274, 3273, 86,
- 3287, 3288, 86, 86, 86, 86, 86, 3289, 3277, 86,
- 3281, 3280, 3290, 86, 86, 3284, 3291, 3292, 86, 3293,
- 86, 3295, 3294, 3296, 3298, 3299, 3301, 86, 86, 3300,
- 3297, 86, 3305, 3306, 86, 3302, 3308, 86, 3483, 86,
- 86, 86, 3310, 86, 86, 86, 3293, 86, 86, 3294,
-
- 3296, 3298, 86, 86, 3303, 3304, 3300, 3297, 86, 3305,
- 86, 3307, 3302, 86, 3312, 3309, 86, 3313, 86, 3310,
- 86, 3311, 86, 86, 86, 3314, 86, 3315, 3317, 3318,
- 3316, 3303, 3304, 3321, 3483, 3320, 3319, 86, 3307, 3324,
- 86, 3312, 3309, 86, 3313, 86, 86, 3322, 3311, 86,
- 86, 86, 3314, 3323, 86, 3317, 3318, 3316, 3327, 86,
- 3321, 3326, 3320, 3319, 3328, 86, 3324, 3325, 86, 3329,
- 3330, 3331, 3333, 3332, 3322, 3483, 86, 86, 86, 3334,
- 3323, 3483, 86, 86, 3483, 3327, 3335, 3339, 3326, 3483,
- 86, 3328, 3336, 86, 3325, 3338, 86, 86, 86, 3333,
-
- 3332, 3340, 86, 3337, 3341, 86, 3334, 86, 3342, 86,
- 3343, 86, 3344, 3335, 3339, 3347, 86, 86, 3345, 3336,
- 86, 3346, 3338, 3350, 86, 3349, 86, 86, 3340, 3348,
- 3337, 3341, 86, 3351, 86, 3342, 3353, 3343, 86, 3344,
- 3352, 86, 3347, 86, 3354, 3345, 86, 3355, 3346, 3357,
- 3350, 3356, 3349, 3359, 86, 86, 3348, 3358, 86, 3360,
- 3351, 3361, 86, 3353, 86, 3362, 3363, 3352, 3364, 3483,
- 3367, 86, 3366, 86, 3355, 3365, 3357, 86, 3356, 86,
- 86, 3368, 3369, 86, 3358, 3370, 3360, 86, 86, 3371,
- 3372, 86, 3362, 86, 86, 86, 3375, 3367, 3373, 3366,
-
- 3374, 86, 3365, 86, 86, 3376, 3377, 3378, 3368, 3369,
- 3379, 86, 3370, 86, 3380, 86, 3371, 3382, 86, 3383,
- 3381, 3384, 86, 3375, 3385, 3373, 86, 3374, 86, 3386,
- 86, 86, 86, 3377, 86, 3387, 3389, 86, 3390, 3391,
- 3395, 3380, 3388, 3483, 86, 3392, 3383, 3381, 3384, 3393,
- 86, 86, 86, 3394, 86, 86, 3386, 86, 3396, 86,
- 3399, 3400, 3387, 3483, 3404, 3397, 3391, 86, 86, 3388,
- 86, 86, 3392, 86, 3398, 86, 3393, 3402, 86, 3401,
- 3394, 86, 3403, 3405, 86, 86, 86, 3399, 3400, 3407,
- 86, 3404, 3397, 3408, 3406, 3409, 3410, 86, 3411, 86,
-
- 3412, 3398, 86, 86, 3402, 3413, 3401, 86, 86, 3403,
- 3405, 86, 3414, 3415, 3416, 86, 3407, 3421, 3483, 3483,
- 3408, 3406, 86, 3410, 3417, 3411, 3418, 3412, 3419, 3420,
- 3422, 3483, 86, 3424, 86, 3426, 3423, 86, 3425, 3414,
- 86, 3416, 3483, 86, 3427, 86, 86, 3430, 86, 86,
- 86, 3417, 3483, 3418, 3433, 3419, 3420, 86, 86, 3428,
- 86, 86, 3426, 3423, 86, 3425, 3429, 86, 3431, 3432,
- 3434, 3427, 3435, 3483, 86, 3436, 86, 3438, 3437, 86,
- 86, 3433, 3441, 86, 3439, 86, 3428, 3440, 3442, 3443,
- 86, 3445, 86, 3429, 3483, 3431, 3432, 86, 3447, 3435,
-
- 86, 86, 3436, 86, 3438, 3437, 3444, 86, 86, 3441,
- 86, 3439, 3446, 3449, 3440, 3442, 3443, 86, 3445, 3448,
- 86, 3450, 3451, 3452, 86, 3447, 3455, 3454, 3458, 3453,
- 86, 3483, 3461, 3444, 3460, 86, 86, 3456, 3457, 3446,
- 3449, 86, 86, 3483, 3459, 86, 3448, 3463, 3450, 3451,
- 86, 86, 86, 86, 3454, 3458, 3453, 86, 86, 86,
- 3462, 3460, 3464, 3468, 3456, 3457, 86, 3465, 86, 86,
- 3466, 3459, 3467, 3469, 3463, 86, 3471, 3470, 86, 3472,
- 3474, 86, 3475, 3477, 86, 86, 3483, 3462, 3473, 3464,
- 86, 3476, 3478, 3479, 3465, 3481, 3482, 3466, 86, 3467,
-
- 3469, 86, 86, 3471, 3470, 86, 86, 86, 86, 86,
- 3477, 86, 3483, 3480, 86, 3473, 3483, 3483, 3476, 3478,
- 3479, 86, 86, 86, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3480, 47, 47, 47, 47, 47, 47, 47, 52, 52,
- 52, 52, 52, 52, 52, 57, 57, 57, 57, 57,
- 57, 57, 63, 63, 63, 63, 63, 63, 63, 68,
- 68, 68, 68, 68, 68, 68, 74, 74, 74, 74,
- 74, 74, 74, 80, 80, 80, 80, 80, 80, 80,
- 89, 89, 3483, 89, 89, 89, 89, 160, 160, 3483,
-
- 3483, 3483, 160, 160, 162, 162, 3483, 3483, 162, 3483,
- 162, 164, 3483, 3483, 3483, 3483, 3483, 164, 167, 167,
- 3483, 3483, 3483, 167, 167, 169, 3483, 3483, 3483, 3483,
- 3483, 169, 171, 171, 3483, 171, 171, 171, 171, 174,
- 3483, 3483, 3483, 3483, 3483, 174, 177, 177, 3483, 3483,
- 3483, 177, 177, 90, 90, 3483, 90, 90, 90, 90,
- 17, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
-
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483
+ 333, 86, 329, 342, 86, 331, 339, 86, 3523, 323,
+ 345, 324, 327, 336, 341, 3523, 346, 3523, 86, 320,
+ 3523, 3523, 321, 347, 322, 337, 86, 333, 86, 343,
+ 86, 86, 331, 339, 344, 86, 323, 86, 324, 348,
+ 336, 341, 86, 346, 86, 352, 86, 349, 350, 353,
+ 347, 354, 355, 356, 86, 3523, 343, 351, 357, 361,
+
+ 358, 344, 86, 86, 86, 86, 348, 86, 86, 86,
+ 86, 363, 352, 86, 349, 350, 353, 359, 354, 355,
+ 356, 86, 360, 362, 351, 357, 361, 358, 364, 365,
+ 366, 367, 86, 86, 86, 368, 369, 370, 363, 86,
+ 374, 375, 373, 86, 372, 377, 3523, 379, 376, 86,
+ 362, 378, 86, 380, 381, 364, 86, 366, 367, 86,
+ 86, 86, 86, 369, 370, 382, 86, 86, 384, 373,
+ 395, 372, 86, 86, 379, 376, 385, 86, 378, 86,
+ 380, 86, 387, 388, 389, 391, 86, 390, 383, 392,
+ 394, 393, 396, 386, 86, 86, 86, 86, 399, 170,
+
+ 86, 86, 86, 385, 86, 86, 397, 398, 401, 387,
+ 388, 389, 391, 86, 390, 383, 392, 394, 393, 400,
+ 386, 86, 404, 402, 86, 403, 406, 407, 86, 86,
+ 86, 86, 86, 397, 398, 401, 408, 405, 86, 86,
+ 409, 86, 412, 415, 411, 414, 400, 413, 3523, 404,
+ 402, 86, 403, 86, 407, 86, 86, 416, 86, 417,
+ 418, 86, 419, 408, 405, 420, 86, 409, 86, 412,
+ 415, 411, 414, 86, 413, 421, 422, 424, 86, 423,
+ 86, 86, 86, 428, 416, 427, 417, 418, 86, 419,
+ 425, 429, 430, 432, 433, 434, 3523, 86, 3523, 436,
+
+ 86, 86, 421, 86, 86, 86, 423, 426, 86, 86,
+ 428, 86, 427, 86, 435, 437, 431, 425, 438, 3523,
+ 432, 433, 434, 86, 86, 86, 436, 86, 86, 439,
+ 440, 441, 3523, 442, 426, 443, 446, 444, 86, 86,
+ 86, 435, 437, 431, 86, 438, 447, 448, 456, 3523,
+ 449, 86, 86, 3523, 445, 490, 439, 440, 441, 86,
+ 442, 86, 443, 446, 444, 86, 86, 457, 471, 464,
+ 3523, 86, 3523, 3523, 448, 456, 86, 449, 86, 458,
+ 463, 445, 450, 86, 459, 451, 460, 86, 465, 3523,
+ 452, 453, 454, 455, 457, 86, 464, 466, 467, 461,
+
+ 86, 86, 462, 86, 86, 468, 458, 463, 86, 450,
+ 469, 459, 451, 460, 470, 465, 474, 452, 453, 454,
+ 455, 478, 86, 475, 466, 467, 461, 3523, 86, 462,
+ 472, 479, 480, 473, 481, 86, 482, 86, 86, 86,
+ 86, 470, 483, 474, 476, 477, 3523, 3523, 478, 86,
+ 475, 485, 484, 489, 86, 486, 86, 472, 479, 86,
+ 473, 481, 86, 482, 86, 86, 487, 495, 86, 483,
+ 86, 476, 477, 86, 86, 491, 488, 492, 485, 484,
+ 489, 494, 486, 86, 496, 497, 493, 3523, 86, 86,
+ 509, 3523, 498, 487, 495, 3523, 502, 500, 499, 501,
+
+ 507, 86, 491, 488, 492, 510, 3523, 86, 494, 86,
+ 508, 3523, 497, 493, 86, 503, 86, 525, 86, 498,
+ 3523, 86, 86, 502, 500, 499, 501, 507, 504, 511,
+ 529, 505, 86, 506, 3523, 526, 86, 508, 524, 86,
+ 527, 86, 503, 86, 525, 86, 3523, 528, 530, 3523,
+ 542, 86, 86, 532, 3523, 504, 511, 529, 505, 86,
+ 506, 512, 526, 513, 531, 524, 86, 527, 86, 514,
+ 541, 543, 86, 515, 528, 530, 544, 542, 516, 3523,
+ 532, 517, 86, 547, 3523, 545, 548, 86, 512, 170,
+ 513, 531, 546, 551, 86, 549, 514, 541, 550, 3523,
+
+ 515, 86, 552, 86, 3523, 516, 86, 86, 517, 518,
+ 547, 519, 545, 548, 553, 86, 86, 555, 563, 546,
+ 551, 554, 549, 565, 520, 550, 560, 521, 86, 522,
+ 86, 523, 3523, 86, 86, 86, 518, 562, 519, 561,
+ 86, 553, 570, 556, 555, 563, 86, 3523, 554, 86,
+ 564, 520, 557, 560, 521, 86, 522, 3523, 523, 533,
+ 534, 567, 86, 558, 562, 566, 561, 568, 86, 535,
+ 536, 537, 538, 539, 86, 86, 540, 564, 572, 557,
+ 569, 559, 86, 3523, 86, 86, 533, 534, 567, 86,
+ 558, 86, 566, 86, 568, 573, 535, 536, 537, 538,
+
+ 539, 577, 571, 540, 86, 572, 576, 569, 559, 574,
+ 575, 3523, 86, 86, 578, 580, 584, 86, 579, 581,
+ 582, 3523, 573, 3523, 587, 86, 3523, 588, 577, 571,
+ 3523, 86, 3523, 576, 585, 86, 589, 583, 86, 86,
+ 86, 578, 580, 584, 86, 579, 581, 582, 86, 586,
+ 86, 587, 592, 591, 588, 590, 603, 86, 593, 594,
+ 604, 585, 86, 589, 583, 86, 86, 605, 606, 609,
+ 595, 608, 596, 3523, 607, 86, 586, 86, 86, 592,
+ 591, 3523, 590, 610, 611, 593, 594, 604, 86, 86,
+ 612, 86, 86, 613, 605, 606, 609, 595, 614, 596,
+
+ 597, 607, 615, 86, 86, 86, 617, 86, 598, 599,
+ 610, 611, 600, 601, 86, 86, 602, 612, 616, 618,
+ 613, 620, 86, 619, 621, 614, 622, 597, 86, 615,
+ 623, 656, 86, 86, 741, 598, 599, 86, 624, 600,
+ 601, 86, 86, 602, 86, 616, 618, 86, 620, 86,
+ 619, 625, 626, 622, 627, 629, 86, 623, 631, 630,
+ 632, 86, 628, 86, 633, 624, 86, 86, 634, 635,
+ 86, 3523, 638, 86, 86, 86, 637, 3523, 625, 626,
+ 86, 627, 629, 636, 658, 631, 630, 632, 86, 628,
+ 86, 633, 86, 640, 86, 634, 635, 642, 86, 638,
+
+ 639, 643, 86, 637, 641, 3523, 86, 86, 645, 86,
+ 636, 644, 647, 655, 86, 646, 86, 650, 86, 86,
+ 640, 648, 649, 86, 642, 653, 86, 639, 643, 86,
+ 86, 641, 86, 86, 86, 645, 659, 657, 644, 647,
+ 655, 663, 646, 86, 650, 651, 654, 652, 648, 649,
+ 666, 3523, 653, 86, 86, 86, 660, 661, 86, 665,
+ 662, 668, 664, 659, 657, 86, 671, 669, 663, 86,
+ 667, 86, 651, 654, 652, 86, 86, 86, 672, 86,
+ 675, 3523, 86, 660, 661, 86, 665, 662, 668, 664,
+ 670, 673, 674, 671, 676, 679, 86, 667, 86, 86,
+
+ 86, 677, 678, 86, 680, 672, 86, 675, 690, 681,
+ 829, 830, 86, 86, 691, 86, 86, 670, 673, 674,
+ 86, 676, 679, 86, 86, 3523, 692, 695, 677, 678,
+ 3523, 680, 694, 700, 693, 690, 681, 682, 86, 86,
+ 86, 691, 683, 697, 684, 86, 3523, 696, 3523, 86,
+ 685, 701, 686, 692, 695, 687, 688, 86, 86, 694,
+ 700, 693, 689, 86, 682, 705, 86, 704, 698, 683,
+ 697, 684, 699, 86, 696, 706, 707, 685, 701, 686,
+ 708, 702, 687, 688, 703, 86, 709, 3523, 86, 689,
+ 86, 86, 86, 712, 704, 698, 710, 86, 711, 699,
+
+ 86, 714, 706, 707, 713, 86, 86, 708, 702, 715,
+ 86, 703, 717, 709, 716, 3523, 718, 720, 719, 86,
+ 712, 86, 86, 710, 86, 711, 86, 86, 714, 86,
+ 721, 713, 722, 725, 729, 724, 715, 726, 723, 717,
+ 727, 716, 86, 718, 720, 719, 86, 86, 728, 731,
+ 86, 736, 86, 730, 86, 86, 3523, 721, 742, 722,
+ 725, 86, 724, 86, 726, 723, 86, 727, 86, 732,
+ 733, 170, 734, 735, 86, 728, 731, 86, 736, 737,
+ 730, 746, 86, 86, 86, 738, 739, 743, 740, 86,
+ 86, 744, 748, 86, 745, 749, 732, 733, 747, 734,
+
+ 735, 3523, 86, 750, 86, 86, 737, 86, 746, 86,
+ 86, 86, 738, 739, 743, 740, 758, 86, 754, 748,
+ 759, 745, 749, 86, 751, 747, 757, 86, 755, 86,
+ 750, 752, 760, 756, 753, 761, 762, 763, 3523, 764,
+ 86, 767, 86, 86, 765, 754, 766, 86, 768, 3523,
+ 3523, 751, 86, 757, 769, 771, 86, 770, 752, 772,
+ 86, 753, 86, 86, 86, 86, 773, 776, 767, 86,
+ 775, 86, 86, 766, 86, 768, 86, 777, 86, 779,
+ 778, 769, 771, 86, 770, 774, 772, 86, 86, 86,
+ 86, 780, 781, 773, 776, 782, 3523, 775, 783, 784,
+
+ 86, 786, 86, 790, 785, 787, 779, 778, 86, 86,
+ 86, 86, 774, 86, 86, 791, 788, 792, 780, 781,
+ 3523, 805, 782, 86, 86, 783, 784, 86, 786, 789,
+ 86, 785, 787, 798, 3523, 86, 86, 86, 797, 801,
+ 793, 799, 791, 788, 792, 794, 800, 86, 795, 796,
+ 86, 804, 802, 86, 826, 3523, 789, 86, 803, 86,
+ 798, 86, 806, 86, 86, 797, 801, 793, 799, 807,
+ 810, 86, 794, 800, 86, 795, 796, 808, 804, 802,
+ 86, 811, 814, 813, 812, 803, 86, 815, 816, 806,
+ 817, 86, 86, 86, 86, 819, 807, 810, 820, 809,
+
+ 86, 3523, 86, 838, 808, 86, 86, 86, 811, 814,
+ 813, 812, 86, 818, 815, 816, 86, 817, 822, 821,
+ 86, 823, 86, 824, 86, 820, 809, 86, 825, 828,
+ 827, 3523, 86, 833, 831, 86, 834, 832, 840, 835,
+ 818, 86, 86, 86, 841, 822, 821, 836, 823, 86,
+ 824, 86, 86, 86, 837, 825, 828, 827, 86, 86,
+ 833, 831, 86, 834, 832, 839, 835, 843, 86, 86,
+ 86, 841, 844, 842, 836, 86, 846, 845, 3523, 847,
+ 851, 837, 915, 848, 853, 86, 854, 86, 852, 86,
+ 86, 856, 839, 86, 843, 860, 86, 849, 850, 857,
+
+ 842, 3523, 86, 846, 86, 86, 847, 855, 86, 915,
+ 848, 853, 86, 854, 86, 852, 858, 86, 856, 86,
+ 861, 868, 862, 864, 849, 850, 857, 86, 865, 3523,
+ 866, 859, 863, 869, 855, 86, 867, 870, 86, 876,
+ 86, 86, 871, 858, 86, 872, 86, 861, 868, 862,
+ 878, 86, 873, 877, 86, 86, 86, 866, 859, 863,
+ 869, 86, 86, 867, 870, 874, 879, 875, 86, 871,
+ 880, 86, 872, 86, 86, 881, 86, 878, 86, 873,
+ 877, 882, 86, 886, 86, 889, 883, 885, 3523, 86,
+ 888, 887, 874, 879, 875, 884, 890, 880, 86, 86,
+
+ 86, 891, 881, 86, 86, 3523, 893, 86, 882, 895,
+ 86, 892, 889, 883, 885, 86, 894, 888, 887, 86,
+ 86, 896, 884, 890, 899, 86, 897, 898, 891, 86,
+ 86, 901, 86, 893, 900, 86, 895, 902, 892, 903,
+ 3523, 905, 904, 894, 86, 908, 3523, 907, 896, 86,
+ 924, 899, 3523, 897, 898, 86, 86, 906, 901, 909,
+ 86, 900, 86, 86, 902, 912, 903, 86, 905, 904,
+ 86, 910, 908, 86, 907, 911, 914, 913, 916, 86,
+ 921, 918, 86, 920, 906, 86, 909, 917, 922, 86,
+ 86, 919, 912, 86, 925, 926, 86, 923, 910, 86,
+
+ 86, 86, 911, 914, 913, 916, 86, 921, 918, 86,
+ 920, 86, 86, 927, 917, 922, 170, 928, 919, 86,
+ 929, 925, 926, 930, 923, 932, 931, 933, 3523, 934,
+ 86, 86, 936, 938, 939, 86, 86, 935, 86, 86,
+ 927, 937, 86, 940, 928, 946, 942, 929, 3523, 3523,
+ 930, 86, 932, 931, 86, 86, 934, 943, 941, 86,
+ 938, 939, 945, 86, 935, 86, 3523, 947, 937, 86,
+ 948, 86, 86, 942, 944, 86, 86, 86, 949, 950,
+ 959, 86, 961, 960, 943, 941, 86, 86, 951, 945,
+ 86, 962, 86, 86, 947, 86, 3523, 948, 966, 3523,
+
+ 86, 944, 964, 963, 3523, 949, 950, 959, 970, 961,
+ 960, 965, 86, 967, 3523, 951, 952, 86, 962, 953,
+ 86, 86, 86, 954, 86, 966, 955, 3523, 968, 964,
+ 963, 969, 971, 956, 957, 970, 958, 972, 965, 86,
+ 967, 86, 973, 952, 86, 86, 953, 86, 3523, 3523,
+ 954, 3523, 3523, 955, 86, 968, 984, 982, 969, 971,
+ 956, 957, 981, 958, 972, 86, 3523, 983, 985, 86,
+ 993, 3523, 86, 86, 86, 974, 975, 986, 976, 86,
+ 86, 977, 990, 984, 982, 989, 978, 3523, 991, 981,
+ 86, 86, 979, 980, 983, 985, 997, 993, 987, 992,
+
+ 994, 86, 974, 975, 986, 976, 998, 86, 977, 990,
+ 86, 86, 989, 978, 988, 991, 86, 995, 999, 979,
+ 980, 86, 996, 997, 86, 987, 992, 994, 1000, 1002,
+ 86, 1001, 86, 998, 1005, 1003, 3523, 3523, 1004, 1006,
+ 1010, 988, 3523, 3523, 1008, 999, 1009, 86, 1007, 86,
+ 86, 86, 86, 1012, 3523, 1000, 1002, 86, 1001, 86,
+ 86, 86, 1003, 86, 86, 1004, 1006, 1010, 1011, 86,
+ 1013, 1008, 86, 1009, 1014, 1007, 86, 1015, 3523, 1016,
+ 1012, 1020, 1017, 1018, 1019, 1021, 86, 1022, 1023, 86,
+ 86, 86, 1026, 1024, 1025, 1011, 86, 1013, 86, 1028,
+
+ 1027, 1014, 1030, 1029, 1015, 86, 1016, 86, 86, 1017,
+ 1018, 1019, 1021, 86, 86, 1031, 86, 1032, 1033, 1034,
+ 86, 1025, 1035, 1037, 86, 86, 1038, 1027, 1036, 1039,
+ 1029, 86, 86, 3523, 86, 3523, 3523, 86, 86, 86,
+ 1040, 1044, 1031, 1045, 1032, 1033, 86, 86, 86, 86,
+ 1037, 1042, 86, 1038, 1041, 1036, 1039, 1043, 1046, 1047,
+ 86, 86, 86, 86, 1048, 86, 1049, 1040, 86, 3523,
+ 1045, 1050, 1051, 1052, 86, 1053, 86, 86, 1042, 1055,
+ 1065, 1041, 1056, 1054, 1043, 1046, 86, 3523, 86, 86,
+ 86, 1063, 1057, 1049, 1059, 3523, 86, 86, 1050, 1051,
+
+ 1052, 86, 1053, 86, 86, 86, 1055, 1065, 1060, 1056,
+ 1054, 1058, 86, 86, 1064, 1061, 1066, 86, 1063, 1057,
+ 1062, 1059, 86, 1068, 1067, 1069, 86, 86, 1071, 1072,
+ 1073, 3523, 86, 1070, 86, 1060, 86, 1074, 1058, 1075,
+ 3523, 1064, 1081, 1066, 1085, 86, 86, 86, 1082, 86,
+ 1068, 1067, 1069, 86, 1076, 1071, 86, 1073, 1077, 86,
+ 1070, 86, 1078, 1079, 1074, 86, 1075, 86, 1080, 1081,
+ 86, 86, 1084, 1083, 1086, 1082, 86, 1088, 1087, 1089,
+ 86, 1076, 86, 1090, 1092, 1077, 86, 86, 86, 1078,
+ 1079, 1091, 86, 86, 1093, 1080, 86, 1094, 1095, 1084,
+
+ 1083, 1086, 1097, 86, 1088, 1087, 1089, 86, 1096, 86,
+ 1090, 1092, 86, 1098, 1100, 1099, 86, 1105, 1091, 86,
+ 1101, 1093, 86, 1102, 1094, 86, 1103, 86, 86, 1097,
+ 1104, 86, 1106, 86, 86, 1096, 1108, 86, 1107, 1109,
+ 1098, 1100, 1099, 3523, 1111, 1112, 1113, 1101, 1110, 86,
+ 1102, 86, 86, 1103, 1114, 86, 1117, 1104, 1120, 1115,
+ 1121, 1119, 86, 3523, 86, 1107, 1109, 1116, 86, 86,
+ 1124, 1122, 1125, 1113, 86, 1110, 86, 86, 86, 1118,
+ 1123, 1114, 1127, 1117, 86, 86, 1115, 86, 1119, 86,
+ 86, 1129, 86, 1126, 1116, 86, 1128, 1124, 1122, 1135,
+
+ 86, 1130, 3523, 1133, 86, 86, 1118, 1123, 1134, 86,
+ 1136, 86, 1137, 86, 1131, 3523, 1132, 1138, 1129, 1143,
+ 1126, 1141, 86, 1128, 1139, 86, 1135, 1140, 1130, 86,
+ 1153, 86, 86, 86, 1156, 170, 1144, 1136, 86, 1137,
+ 1145, 1131, 1142, 1132, 1138, 86, 1143, 86, 1141, 86,
+ 86, 1139, 1146, 1180, 1140, 3523, 86, 1153, 86, 3523,
+ 1154, 86, 1155, 1144, 1157, 1159, 86, 1145, 1163, 1142,
+ 3523, 3523, 1158, 1164, 86, 1161, 3523, 86, 1165, 1146,
+ 1147, 1160, 1148, 86, 1182, 86, 1149, 1154, 1150, 1155,
+ 1162, 1157, 1159, 1151, 86, 86, 86, 86, 1152, 1158,
+
+ 86, 1166, 1161, 86, 86, 1165, 1167, 1147, 1160, 1148,
+ 1169, 86, 1172, 1149, 86, 1150, 1170, 1162, 1168, 1173,
+ 1151, 1174, 86, 1176, 1175, 1152, 1171, 86, 1166, 86,
+ 86, 1177, 1179, 1167, 86, 1178, 86, 1169, 86, 1172,
+ 1181, 86, 1184, 1170, 1196, 1168, 1173, 3523, 1174, 86,
+ 1176, 1175, 1185, 1171, 86, 1186, 86, 86, 1177, 1179,
+ 1187, 3523, 1178, 86, 1197, 1195, 86, 1200, 3523, 86,
+ 1198, 1196, 86, 1199, 86, 3523, 3523, 86, 1204, 1185,
+ 86, 3523, 1186, 1201, 1207, 86, 86, 1187, 1188, 86,
+ 1203, 1197, 1195, 1189, 1200, 1190, 1205, 1198, 1202, 86,
+
+ 1199, 1191, 86, 86, 86, 1204, 1192, 1193, 1206, 86,
+ 1201, 1209, 1214, 1194, 86, 1188, 86, 1203, 1210, 86,
+ 1189, 1208, 1190, 1205, 3523, 1202, 86, 86, 1191, 1215,
+ 1211, 1217, 3523, 1192, 1193, 1206, 3523, 1212, 1209, 86,
+ 1194, 86, 1213, 86, 1218, 1210, 86, 1216, 1208, 1222,
+ 1219, 86, 86, 1220, 86, 3523, 1215, 1211, 86, 1221,
+ 1223, 1225, 1224, 86, 1212, 1226, 1228, 1227, 86, 1213,
+ 86, 1218, 1229, 86, 1216, 86, 1230, 1219, 86, 86,
+ 1220, 86, 86, 86, 86, 1231, 1221, 1223, 1225, 1224,
+ 86, 1233, 1226, 1232, 1227, 1234, 1235, 1236, 86, 1229,
+
+ 86, 1237, 86, 1230, 86, 1238, 1239, 86, 1240, 3523,
+ 1241, 86, 1231, 3523, 1242, 86, 86, 1244, 1233, 86,
+ 1232, 86, 1234, 1235, 1236, 3523, 86, 86, 1237, 1243,
+ 1245, 1248, 1238, 1239, 1246, 1252, 86, 1241, 86, 86,
+ 86, 1242, 1247, 86, 1244, 1249, 1250, 86, 1251, 1254,
+ 1253, 86, 1255, 86, 3523, 1259, 1243, 1245, 1248, 1257,
+ 1256, 1246, 1252, 3523, 3523, 1258, 86, 86, 86, 1247,
+ 86, 86, 1249, 1250, 1264, 1251, 86, 1253, 86, 86,
+ 1260, 86, 1259, 1265, 86, 1261, 1257, 1256, 1262, 1267,
+ 1266, 1263, 1258, 1268, 1269, 1270, 86, 86, 86, 1271,
+
+ 86, 1264, 86, 1273, 3523, 1275, 1272, 86, 86, 3523,
+ 1265, 1274, 86, 86, 86, 1262, 1267, 1266, 1263, 1277,
+ 1268, 1269, 1270, 86, 1276, 1279, 1280, 86, 1278, 1281,
+ 1285, 86, 1275, 1272, 86, 86, 1282, 86, 1274, 1283,
+ 86, 1286, 1284, 86, 1288, 86, 1277, 86, 86, 1287,
+ 1289, 1276, 1279, 1280, 86, 1278, 1281, 1285, 1290, 1291,
+ 86, 86, 86, 1282, 86, 86, 1283, 1293, 1286, 1284,
+ 1292, 1288, 1294, 1296, 1295, 3523, 1287, 86, 1298, 86,
+ 1297, 86, 86, 86, 1303, 86, 1291, 86, 1300, 1299,
+ 1301, 86, 1302, 1305, 1293, 1307, 1304, 1292, 86, 1294,
+
+ 1296, 1295, 86, 86, 1306, 1298, 86, 1297, 1308, 1313,
+ 1309, 1303, 1311, 3523, 1310, 1314, 1299, 3523, 86, 86,
+ 86, 86, 86, 1304, 86, 86, 86, 86, 1312, 1315,
+ 86, 1306, 1317, 86, 1316, 1308, 86, 1309, 1318, 1319,
+ 86, 1310, 1314, 86, 86, 1321, 1324, 86, 1320, 1322,
+ 86, 1325, 1326, 1323, 86, 1312, 1315, 3523, 86, 1317,
+ 1328, 1316, 86, 86, 86, 1318, 1319, 86, 86, 1327,
+ 1329, 1330, 1321, 1324, 1332, 1320, 1322, 1331, 1340, 86,
+ 1323, 86, 86, 86, 86, 1333, 1335, 1328, 1336, 86,
+ 86, 1337, 1342, 3523, 86, 86, 1327, 86, 1330, 86,
+
+ 1338, 1332, 86, 1339, 1331, 86, 86, 1341, 1345, 1343,
+ 1344, 86, 1333, 1335, 86, 1336, 1346, 170, 1337, 1342,
+ 1348, 86, 1349, 1347, 1350, 1351, 86, 1338, 86, 1352,
+ 1339, 86, 86, 1353, 1341, 1345, 1343, 1344, 86, 1356,
+ 86, 1355, 86, 1346, 1354, 1357, 1358, 1348, 1360, 1349,
+ 1347, 86, 1351, 3523, 1366, 86, 1359, 3523, 1363, 86,
+ 3523, 86, 1361, 86, 86, 86, 1356, 86, 1355, 86,
+ 86, 1354, 1357, 1358, 86, 1360, 1362, 1367, 86, 1364,
+ 1365, 86, 1369, 1359, 86, 1363, 1368, 1370, 86, 1361,
+ 86, 86, 1371, 1376, 86, 86, 3523, 3523, 1377, 86,
+
+ 1378, 1372, 1379, 1362, 1367, 1381, 1364, 1365, 86, 1369,
+ 1373, 1380, 1374, 1368, 1370, 1375, 86, 1382, 86, 1371,
+ 1376, 1384, 86, 86, 86, 1377, 1383, 1378, 1372, 86,
+ 86, 86, 1381, 1385, 86, 1386, 1389, 1373, 1380, 1374,
+ 1388, 86, 1375, 1390, 1382, 1391, 1387, 3523, 1384, 1393,
+ 3523, 86, 1398, 1383, 86, 86, 86, 86, 86, 1394,
+ 1385, 86, 1386, 1389, 1396, 1395, 1392, 1388, 1397, 1413,
+ 1390, 86, 1391, 1387, 86, 86, 86, 1400, 1399, 1398,
+ 1402, 86, 1401, 3523, 3523, 1407, 1394, 86, 86, 86,
+ 86, 1396, 1395, 1392, 86, 1397, 86, 1403, 1405, 1406,
+
+ 86, 86, 1409, 1408, 1400, 1399, 1404, 1402, 86, 1401,
+ 86, 86, 1407, 1410, 1411, 1412, 1414, 3523, 1416, 86,
+ 1417, 86, 86, 86, 1403, 1405, 1406, 86, 1509, 1409,
+ 1408, 1415, 86, 1404, 1419, 86, 86, 1421, 86, 86,
+ 1410, 1411, 1412, 1414, 1418, 1416, 1420, 1417, 1422, 86,
+ 1423, 1428, 86, 1425, 86, 86, 1424, 1426, 1415, 1427,
+ 86, 1419, 1432, 86, 1421, 1430, 1431, 1429, 1448, 86,
+ 86, 1418, 86, 1420, 86, 1422, 86, 86, 1428, 1435,
+ 3523, 1438, 86, 1424, 1426, 86, 1427, 86, 86, 1432,
+ 1433, 1436, 1430, 1431, 1429, 1434, 1437, 3523, 1446, 1447,
+
+ 86, 3523, 3523, 1449, 86, 1452, 1435, 86, 1438, 3523,
+ 86, 1450, 86, 1453, 1456, 3523, 1451, 86, 1436, 3523,
+ 86, 1455, 86, 1437, 1439, 1446, 1447, 1454, 1440, 86,
+ 1449, 1441, 1442, 86, 86, 86, 1443, 86, 1450, 1457,
+ 1453, 1456, 1444, 1451, 1461, 1460, 1445, 86, 1455, 86,
+ 86, 1439, 86, 86, 1454, 1440, 1462, 3523, 1441, 1442,
+ 1458, 1468, 1459, 1443, 1463, 86, 1457, 1464, 1465, 1444,
+ 1466, 1461, 1460, 1445, 86, 1469, 1467, 1470, 1471, 1479,
+ 1481, 1482, 86, 86, 86, 86, 1472, 1458, 86, 1459,
+ 86, 1463, 86, 86, 1464, 1465, 3523, 1466, 3523, 86,
+
+ 86, 86, 1478, 1467, 1470, 1471, 1479, 86, 1480, 86,
+ 1483, 3523, 1487, 1472, 1473, 1484, 1485, 1488, 1486, 1474,
+ 3523, 1475, 1489, 1476, 86, 1477, 86, 86, 86, 1478,
+ 86, 1491, 86, 1490, 86, 1480, 86, 1483, 86, 1487,
+ 1492, 1473, 1484, 1485, 1493, 1486, 1474, 1494, 1475, 86,
+ 1476, 86, 1477, 1495, 1498, 1496, 1497, 86, 1491, 3523,
+ 1490, 86, 86, 86, 1499, 86, 1500, 1492, 1501, 86,
+ 1502, 1493, 1511, 3523, 1494, 1503, 1504, 1507, 1505, 86,
+ 1495, 86, 1496, 1497, 1508, 86, 86, 1506, 86, 1510,
+ 86, 1499, 86, 1500, 86, 1501, 86, 1502, 86, 86,
+
+ 1512, 86, 1503, 1504, 1507, 1505, 86, 1513, 1514, 1515,
+ 1516, 1508, 1517, 1518, 1506, 1519, 1510, 86, 1520, 1521,
+ 86, 1525, 3523, 1522, 1530, 86, 1523, 1512, 86, 86,
+ 86, 86, 86, 1528, 1513, 1514, 1515, 1516, 1533, 86,
+ 1518, 86, 86, 1524, 86, 1520, 1521, 1526, 86, 86,
+ 1522, 1527, 1529, 1523, 86, 1531, 86, 86, 1532, 86,
+ 1528, 86, 1534, 86, 1535, 1533, 1542, 3523, 1536, 3523,
+ 1524, 86, 1537, 1538, 1526, 1539, 86, 86, 1527, 1529,
+ 86, 1544, 1531, 1541, 1540, 1532, 86, 1543, 86, 1534,
+ 86, 1535, 1546, 1542, 86, 1536, 1545, 86, 1550, 1537,
+
+ 1538, 86, 1539, 86, 1547, 86, 1548, 86, 1544, 86,
+ 1541, 1540, 1551, 1549, 1543, 1552, 1553, 1554, 86, 1546,
+ 1556, 1555, 3523, 1545, 1558, 86, 86, 86, 86, 1557,
+ 86, 1547, 1560, 1548, 1559, 1562, 1566, 86, 86, 86,
+ 1549, 86, 1552, 1553, 86, 86, 1561, 1556, 1555, 86,
+ 1564, 86, 86, 1563, 86, 86, 1557, 86, 1567, 1560,
+ 1565, 1559, 1562, 1569, 86, 170, 1570, 1568, 86, 1572,
+ 1574, 1573, 1571, 1561, 1576, 3523, 86, 1564, 86, 86,
+ 1563, 1577, 3523, 86, 1578, 86, 1582, 1565, 86, 1575,
+ 86, 86, 1581, 1570, 1568, 86, 1572, 1574, 1573, 1571,
+
+ 1580, 1576, 86, 1579, 1584, 86, 1583, 86, 1577, 86,
+ 86, 1578, 1585, 86, 86, 1588, 1575, 1586, 1589, 1581,
+ 86, 1590, 1587, 1592, 86, 1591, 86, 1580, 1600, 1593,
+ 1579, 1584, 1594, 1583, 1599, 86, 86, 1597, 86, 1585,
+ 86, 86, 1588, 1595, 1598, 1589, 1596, 86, 1590, 86,
+ 1592, 1601, 1591, 1603, 1605, 86, 1593, 3523, 1604, 1594,
+ 86, 1599, 86, 1602, 1597, 86, 1606, 86, 1607, 86,
+ 1595, 1598, 1608, 1596, 86, 1609, 1611, 86, 1601, 86,
+ 1610, 1605, 1612, 86, 1613, 86, 1617, 1614, 1621, 86,
+ 1602, 86, 1615, 1606, 86, 1607, 1616, 86, 1618, 1608,
+
+ 86, 86, 1609, 1611, 86, 86, 1619, 1610, 1620, 1612,
+ 3523, 1613, 86, 1617, 1614, 86, 86, 1622, 1623, 1615,
+ 86, 86, 1624, 1616, 1625, 1618, 1626, 1627, 1628, 86,
+ 86, 1635, 86, 1619, 1629, 1620, 86, 86, 86, 86,
+ 1630, 1631, 1633, 1632, 1622, 1623, 1634, 1636, 86, 1624,
+ 1639, 1625, 86, 1626, 1627, 1628, 86, 86, 1635, 86,
+ 86, 1629, 1637, 86, 86, 1638, 1640, 1630, 1631, 1633,
+ 1632, 1641, 86, 1634, 1636, 1642, 86, 1639, 1643, 1644,
+ 86, 1647, 1646, 1649, 1650, 3523, 1645, 86, 86, 1637,
+ 1648, 1651, 1638, 86, 1652, 1654, 3523, 3523, 86, 1653,
+
+ 1656, 1655, 1642, 86, 86, 1643, 86, 86, 1647, 1646,
+ 1657, 1661, 86, 1645, 1658, 86, 86, 1648, 86, 86,
+ 86, 1652, 86, 86, 86, 86, 1653, 1656, 1655, 86,
+ 1659, 86, 1660, 3523, 1662, 1663, 1664, 1657, 1661, 1666,
+ 3523, 1658, 86, 86, 86, 1665, 1667, 3523, 1668, 1673,
+ 3523, 1670, 86, 1669, 86, 86, 1671, 1659, 1672, 1660,
+ 86, 1662, 1663, 1664, 1676, 86, 1666, 86, 1677, 1674,
+ 1675, 1678, 1665, 1667, 1679, 86, 1673, 86, 86, 86,
+ 86, 86, 86, 86, 1680, 1672, 1681, 1682, 1684, 86,
+ 86, 1676, 1683, 86, 1685, 1677, 1674, 1675, 1678, 86,
+
+ 1686, 1679, 1687, 1688, 1689, 1690, 3523, 3523, 86, 86,
+ 1696, 1680, 86, 86, 1682, 1684, 1691, 1692, 86, 1683,
+ 1693, 1694, 86, 86, 86, 86, 86, 1686, 86, 1687,
+ 1695, 1689, 1690, 1697, 86, 86, 86, 1696, 1698, 1701,
+ 1702, 1699, 1700, 1691, 1692, 1703, 3523, 1693, 1694, 86,
+ 86, 1704, 1705, 1707, 86, 1712, 1706, 1695, 3523, 86,
+ 1697, 3523, 86, 1708, 86, 1698, 1701, 86, 1699, 1700,
+ 86, 86, 86, 86, 1713, 86, 1714, 86, 1704, 1705,
+ 1707, 1709, 1712, 1706, 1715, 1710, 1716, 1717, 86, 1719,
+ 1708, 86, 1720, 1718, 3523, 1721, 86, 86, 1711, 1729,
+
+ 1723, 1713, 1722, 1714, 86, 1724, 86, 1726, 1709, 86,
+ 1725, 1715, 1710, 1716, 86, 86, 86, 86, 1727, 1720,
+ 1718, 86, 1721, 86, 86, 1711, 1728, 1723, 86, 1722,
+ 1730, 86, 1724, 86, 1726, 1731, 86, 1725, 1733, 1735,
+ 1732, 3523, 1734, 1736, 86, 1727, 86, 1737, 1738, 1739,
+ 86, 3523, 1740, 1728, 1743, 1741, 3523, 86, 1744, 1746,
+ 86, 3523, 1731, 86, 86, 1733, 86, 1732, 86, 1734,
+ 1736, 86, 86, 1742, 86, 1738, 86, 86, 86, 1740,
+ 1745, 1743, 1741, 1747, 86, 1744, 1746, 86, 1748, 1749,
+ 86, 1750, 1753, 1755, 1751, 1752, 3523, 86, 1754, 1756,
+
+ 1742, 86, 86, 1760, 1758, 86, 86, 1745, 86, 3523,
+ 1747, 86, 1765, 3523, 86, 1748, 1749, 86, 1750, 1753,
+ 1755, 1751, 1752, 1757, 86, 1754, 1756, 1759, 1761, 86,
+ 1760, 1758, 1764, 1762, 86, 86, 1763, 1770, 1766, 86,
+ 1767, 86, 86, 1768, 86, 86, 1769, 86, 1772, 1773,
+ 1757, 86, 1771, 1775, 1759, 1761, 1774, 86, 86, 1764,
+ 1762, 86, 1776, 1763, 1770, 1766, 1779, 1767, 86, 86,
+ 1768, 86, 1778, 1769, 1777, 1772, 1773, 170, 86, 1771,
+ 86, 1780, 1781, 1774, 1782, 1783, 86, 1784, 86, 1776,
+ 86, 1786, 86, 1779, 86, 86, 1785, 1787, 86, 1778,
+
+ 86, 1777, 1790, 1788, 1791, 1792, 1789, 1796, 1780, 1781,
+ 86, 1782, 1783, 86, 1784, 1794, 1795, 86, 1786, 86,
+ 1798, 1793, 86, 1785, 1787, 3523, 1800, 86, 86, 86,
+ 1788, 1791, 1792, 1789, 1797, 1802, 1799, 1801, 86, 86,
+ 86, 86, 1794, 1795, 1803, 86, 1805, 1804, 1793, 86,
+ 86, 1806, 86, 86, 1807, 1810, 86, 1809, 3523, 1808,
+ 1813, 1797, 1802, 1799, 1801, 1811, 86, 86, 86, 86,
+ 1818, 1803, 86, 1805, 1804, 86, 1812, 86, 1806, 86,
+ 1822, 1807, 1810, 1814, 1809, 86, 1808, 1813, 1820, 1819,
+ 86, 86, 1811, 1815, 1825, 1826, 1816, 1823, 86, 1824,
+
+ 1827, 86, 86, 1812, 1821, 1828, 1829, 1822, 1817, 1832,
+ 1814, 86, 86, 1830, 3523, 1820, 1819, 86, 86, 86,
+ 1815, 1825, 86, 1816, 1823, 1831, 1824, 1833, 86, 1834,
+ 1836, 1821, 86, 1829, 1838, 1817, 1835, 86, 86, 86,
+ 1830, 86, 1839, 86, 1840, 86, 1837, 1841, 1842, 86,
+ 1843, 86, 1831, 86, 1833, 3523, 1834, 1836, 86, 1845,
+ 1844, 1838, 1846, 1835, 86, 1849, 1847, 1852, 1848, 3523,
+ 86, 1851, 86, 1837, 86, 1842, 86, 86, 86, 86,
+ 86, 86, 86, 1850, 1853, 1857, 1845, 1844, 86, 86,
+ 1854, 86, 1849, 1847, 1852, 1848, 1855, 86, 1851, 1856,
+
+ 1858, 86, 1860, 86, 1861, 86, 1859, 1863, 86, 1862,
+ 1850, 1853, 1857, 1864, 86, 1870, 3523, 1854, 3523, 86,
+ 3523, 86, 86, 1855, 86, 86, 1856, 1858, 1865, 1860,
+ 1866, 1861, 1867, 1859, 1863, 86, 1862, 1868, 1869, 86,
+ 1871, 86, 86, 1873, 86, 86, 1872, 86, 1874, 1875,
+ 86, 1877, 1881, 1876, 86, 1865, 3523, 1866, 86, 1867,
+ 1878, 86, 3523, 1879, 1868, 1869, 86, 1871, 86, 86,
+ 1873, 1880, 86, 1872, 86, 1874, 1875, 1884, 1877, 1881,
+ 1876, 86, 1882, 86, 1885, 1883, 1888, 1878, 86, 1886,
+ 1879, 1887, 1889, 86, 1890, 1894, 86, 1892, 1880, 1891,
+
+ 86, 1893, 3523, 1895, 1884, 1897, 86, 1896, 1907, 1882,
+ 86, 1885, 1883, 1888, 86, 86, 1886, 86, 1887, 86,
+ 1898, 86, 86, 1899, 1892, 86, 1891, 86, 1893, 1900,
+ 1895, 1901, 1897, 1902, 1896, 1903, 1904, 86, 1908, 1905,
+ 86, 1906, 86, 86, 86, 86, 1910, 1898, 3523, 1909,
+ 1899, 86, 1912, 86, 86, 3523, 1900, 1911, 1901, 86,
+ 1902, 86, 1903, 1904, 1913, 86, 1905, 1914, 1906, 86,
+ 1915, 86, 1918, 1910, 1917, 1916, 1909, 86, 86, 1912,
+ 1919, 1920, 86, 1921, 1911, 1923, 1922, 86, 3523, 1924,
+ 86, 1913, 1925, 1929, 1914, 1930, 86, 86, 3523, 1918,
+
+ 3523, 1917, 86, 86, 86, 3523, 1926, 1919, 1920, 86,
+ 1921, 86, 1923, 1922, 1927, 86, 1924, 1928, 86, 1925,
+ 1929, 1931, 1930, 1933, 1935, 1932, 1936, 86, 1934, 1939,
+ 1937, 3523, 86, 1926, 86, 86, 1938, 86, 86, 1941,
+ 1940, 1927, 1942, 1943, 1928, 1945, 1944, 1949, 1931, 86,
+ 3523, 1935, 1932, 1936, 1946, 86, 1953, 1937, 86, 86,
+ 3523, 86, 1947, 1938, 1950, 86, 86, 1940, 1954, 86,
+ 1943, 1948, 1955, 1944, 86, 86, 1951, 86, 86, 86,
+ 86, 1946, 1952, 1958, 86, 1956, 1957, 86, 86, 1947,
+ 1960, 1950, 1959, 86, 86, 1954, 3523, 1961, 1948, 1955,
+
+ 86, 1963, 86, 1951, 1962, 1964, 1966, 1965, 86, 1952,
+ 1958, 86, 1956, 1957, 86, 86, 1968, 1960, 86, 1959,
+ 86, 1969, 86, 1970, 1961, 1971, 1977, 1967, 1963, 1972,
+ 1973, 1962, 1964, 86, 1965, 1974, 86, 86, 1975, 86,
+ 1978, 1976, 1980, 86, 1981, 86, 3523, 1983, 86, 1979,
+ 1970, 86, 86, 86, 1967, 86, 1972, 1973, 86, 1982,
+ 86, 1984, 1974, 1986, 1988, 86, 86, 1978, 1976, 1980,
+ 86, 86, 1985, 1987, 1983, 1991, 1979, 1989, 1990, 86,
+ 3523, 86, 86, 86, 1992, 86, 1982, 1995, 1984, 1994,
+ 1986, 1988, 1993, 86, 86, 86, 1999, 1997, 1996, 1985,
+
+ 1987, 86, 1991, 3523, 1989, 1990, 86, 170, 86, 1998,
+ 2001, 1992, 86, 2000, 86, 2005, 1994, 86, 2002, 1993,
+ 2003, 2004, 86, 86, 1997, 1996, 86, 2006, 2007, 86,
+ 86, 2009, 3523, 86, 2010, 86, 1998, 2001, 2011, 2012,
+ 2000, 2008, 2005, 86, 3523, 2002, 2014, 2003, 2004, 2013,
+ 86, 2015, 86, 2016, 2017, 2007, 3523, 2018, 2009, 86,
+ 3523, 86, 86, 2019, 86, 2011, 86, 2020, 2008, 86,
+ 2021, 86, 3523, 2014, 86, 86, 2013, 2022, 2024, 2023,
+ 86, 2017, 86, 86, 2018, 2025, 86, 86, 86, 2028,
+ 2019, 2026, 2029, 2027, 2020, 2032, 3523, 2021, 2037, 2035,
+
+ 86, 86, 86, 2036, 2022, 2024, 2023, 86, 86, 86,
+ 2030, 2038, 2025, 3523, 86, 86, 2028, 2033, 2026, 2029,
+ 2027, 86, 2032, 2031, 2034, 86, 2035, 2039, 86, 2043,
+ 2036, 3523, 2040, 86, 2041, 2042, 86, 2030, 2044, 86,
+ 86, 2047, 86, 86, 2033, 2045, 86, 2046, 2048, 2049,
+ 2031, 2034, 2051, 2050, 2039, 2052, 2043, 2058, 86, 2040,
+ 86, 2041, 2042, 86, 2053, 2044, 2056, 86, 2047, 2057,
+ 86, 2054, 2045, 2059, 2046, 86, 86, 86, 2055, 86,
+ 2050, 86, 2052, 2060, 86, 2061, 2062, 2063, 3523, 86,
+ 2066, 2053, 86, 86, 86, 2065, 2057, 86, 2054, 2064,
+
+ 2059, 86, 2068, 2067, 2069, 2055, 2072, 2071, 2070, 86,
+ 86, 3523, 2061, 86, 2063, 86, 2073, 86, 86, 86,
+ 86, 2074, 2065, 2075, 86, 2076, 2064, 2084, 86, 2068,
+ 2067, 86, 3523, 2072, 2071, 2070, 3523, 2081, 86, 2077,
+ 2078, 2079, 2082, 2073, 86, 86, 2080, 86, 2074, 2083,
+ 2075, 86, 2088, 2085, 86, 2091, 86, 86, 2086, 86,
+ 86, 2090, 2089, 2087, 2081, 86, 2077, 2078, 2079, 2082,
+ 2093, 86, 2092, 2080, 86, 3523, 2083, 2094, 2095, 2088,
+ 2085, 2096, 2091, 2097, 86, 86, 86, 86, 2090, 2089,
+ 86, 2098, 86, 2099, 2100, 86, 2102, 2103, 2101, 2092,
+
+ 2104, 86, 86, 86, 2094, 2095, 2105, 86, 2096, 2106,
+ 86, 86, 2107, 2108, 2110, 2112, 3523, 2111, 2098, 86,
+ 2099, 2100, 86, 2102, 86, 2101, 2109, 2104, 86, 2113,
+ 86, 86, 86, 86, 2115, 86, 2106, 2114, 2122, 2107,
+ 2108, 2116, 86, 2118, 2111, 3523, 86, 2117, 86, 86,
+ 2119, 86, 2120, 2109, 86, 2121, 2113, 2123, 2125, 86,
+ 86, 2115, 2126, 86, 2114, 2122, 2124, 3523, 2116, 86,
+ 2118, 2127, 2128, 86, 2117, 2129, 2130, 2119, 86, 2120,
+ 86, 2133, 2131, 2132, 2134, 2125, 2137, 86, 86, 86,
+ 2135, 2136, 86, 2124, 86, 86, 86, 2139, 2127, 2128,
+
+ 2140, 86, 2141, 86, 86, 86, 2144, 86, 2133, 2131,
+ 2132, 2134, 2149, 2137, 2142, 86, 2143, 2135, 2136, 2138,
+ 86, 86, 2145, 86, 2139, 2148, 2147, 2150, 86, 86,
+ 2146, 86, 86, 2144, 86, 86, 2151, 86, 2153, 86,
+ 2154, 2142, 2152, 2143, 2156, 2169, 2138, 86, 86, 2145,
+ 86, 2155, 2148, 2147, 2150, 2157, 2158, 2146, 2161, 2159,
+ 2163, 86, 86, 2151, 2160, 2153, 86, 2154, 2162, 2152,
+ 2165, 2156, 86, 86, 86, 86, 2164, 86, 2155, 86,
+ 2172, 2166, 86, 2158, 86, 86, 2159, 2163, 86, 2167,
+ 2170, 2160, 86, 2168, 2171, 2162, 86, 2165, 2173, 86,
+
+ 86, 2174, 86, 2164, 2175, 3523, 86, 2172, 2166, 2176,
+ 2178, 2177, 86, 2181, 2182, 2179, 2167, 2170, 2183, 2185,
+ 2168, 2171, 2192, 2184, 2186, 2173, 86, 2180, 86, 86,
+ 86, 2175, 86, 2188, 86, 2190, 2176, 2178, 2177, 2194,
+ 86, 86, 2179, 2187, 86, 86, 2189, 2191, 2193, 2192,
+ 86, 86, 2199, 2196, 2180, 86, 86, 2195, 2198, 86,
+ 2188, 86, 86, 86, 2197, 86, 2194, 86, 2200, 86,
+ 2187, 2201, 2202, 2189, 2191, 2193, 86, 2203, 86, 86,
+ 2205, 2204, 2207, 2206, 2195, 86, 2208, 2209, 86, 2210,
+ 86, 2197, 86, 2211, 170, 2200, 86, 2212, 2201, 2202,
+
+ 86, 2213, 3523, 2214, 2203, 86, 86, 2205, 2204, 2207,
+ 2206, 2215, 86, 2208, 86, 2216, 86, 2217, 2223, 2218,
+ 2211, 2219, 86, 2220, 2224, 86, 2221, 2229, 2213, 86,
+ 2214, 2228, 86, 86, 2226, 2227, 86, 2222, 2215, 86,
+ 86, 86, 2216, 86, 2217, 2223, 2218, 2225, 2219, 86,
+ 2220, 86, 86, 2221, 86, 86, 86, 86, 2228, 2230,
+ 2231, 2226, 2227, 2232, 2222, 86, 86, 2233, 2234, 2236,
+ 2235, 2237, 86, 2239, 2225, 86, 2240, 2245, 86, 2243,
+ 86, 2238, 86, 2246, 86, 2241, 2230, 2231, 86, 86,
+ 2232, 86, 86, 3523, 2233, 2234, 2242, 2235, 2237, 86,
+
+ 2239, 86, 2244, 2240, 2245, 2250, 2243, 2247, 2238, 86,
+ 2246, 86, 2241, 2248, 2252, 2249, 2251, 3523, 2258, 3523,
+ 86, 86, 2253, 2242, 2254, 86, 2255, 86, 86, 2244,
+ 86, 86, 2250, 2256, 2247, 86, 2257, 86, 2259, 2261,
+ 2248, 86, 2249, 2251, 86, 2258, 86, 2260, 86, 2253,
+ 2262, 2254, 2263, 2255, 2264, 2266, 2270, 86, 2267, 2265,
+ 2256, 86, 2269, 2257, 2268, 86, 2261, 2271, 86, 2275,
+ 86, 2273, 2272, 3523, 2260, 86, 86, 2262, 86, 2263,
+ 86, 86, 86, 86, 86, 2267, 2265, 2276, 86, 2269,
+ 2274, 2268, 86, 2278, 2271, 86, 2275, 86, 2273, 2272,
+
+ 2277, 2279, 3523, 2280, 2281, 86, 86, 2289, 86, 2282,
+ 86, 2283, 2284, 3523, 2276, 86, 86, 2274, 2292, 86,
+ 2278, 3523, 2286, 86, 2293, 2285, 2290, 2277, 2279, 86,
+ 2280, 2281, 2288, 86, 86, 86, 2282, 2287, 2283, 2284,
+ 2295, 86, 86, 2291, 2296, 2292, 86, 86, 2294, 2286,
+ 86, 2293, 2285, 2290, 2297, 86, 2298, 2299, 2300, 2288,
+ 3523, 2302, 86, 86, 2287, 2301, 2304, 2295, 2306, 86,
+ 2291, 2296, 2303, 3523, 86, 2294, 86, 86, 86, 86,
+ 2307, 2297, 2305, 2298, 2299, 2300, 2309, 86, 2302, 2308,
+ 86, 86, 2301, 2304, 2310, 86, 2311, 2312, 2313, 2303,
+
+ 86, 2315, 86, 2316, 2314, 86, 2318, 2307, 2317, 2305,
+ 86, 3523, 86, 86, 2319, 86, 2308, 2321, 86, 2320,
+ 86, 2310, 86, 2311, 2312, 2313, 86, 2326, 2315, 2322,
+ 2316, 2314, 86, 86, 2323, 2317, 86, 2324, 86, 2325,
+ 86, 2319, 2327, 2329, 2321, 2328, 2320, 86, 2331, 2333,
+ 2330, 2332, 3523, 3523, 2326, 86, 86, 86, 2334, 2337,
+ 2335, 86, 2339, 3523, 2324, 2340, 2325, 86, 2336, 86,
+ 2329, 86, 2328, 86, 86, 2338, 2333, 2330, 2332, 86,
+ 86, 2341, 2342, 2359, 2343, 2334, 86, 2335, 86, 2339,
+ 86, 86, 2340, 86, 2344, 2336, 2348, 2345, 2346, 86,
+
+ 2347, 2349, 2338, 2350, 86, 2352, 86, 2353, 2341, 2342,
+ 86, 2343, 86, 2351, 2354, 2355, 3523, 2358, 86, 2356,
+ 86, 2344, 86, 86, 2345, 2346, 3523, 2347, 86, 3523,
+ 2350, 86, 2352, 86, 2353, 86, 86, 86, 2357, 2360,
+ 2351, 2354, 2355, 2361, 2358, 86, 2356, 2362, 86, 2363,
+ 2365, 2364, 86, 86, 2368, 2366, 86, 2367, 2369, 3523,
+ 86, 2370, 2373, 86, 2371, 2357, 2360, 86, 86, 86,
+ 2361, 2372, 3523, 86, 2362, 2382, 2363, 2365, 2364, 86,
+ 86, 2368, 2366, 2374, 2367, 2369, 86, 2376, 2370, 2373,
+ 2377, 2371, 2379, 86, 86, 2378, 2375, 2380, 2372, 86,
+
+ 2381, 86, 86, 2383, 86, 2384, 2385, 86, 86, 2388,
+ 2374, 2387, 2386, 2391, 2376, 86, 2395, 2377, 86, 2379,
+ 86, 86, 2378, 2375, 2380, 2396, 2389, 2381, 2397, 2390,
+ 2383, 86, 86, 2385, 86, 2398, 2388, 86, 2387, 2386,
+ 86, 2392, 2393, 2399, 2400, 86, 170, 2394, 86, 3523,
+ 86, 2401, 86, 2389, 86, 2397, 2390, 86, 2405, 2409,
+ 2406, 2404, 2398, 2408, 3523, 2402, 2407, 2410, 2392, 2411,
+ 2399, 86, 86, 2412, 86, 2413, 2403, 86, 2401, 86,
+ 2414, 86, 2415, 3523, 2417, 86, 86, 2406, 2404, 86,
+ 2408, 86, 2402, 2407, 2410, 86, 2411, 86, 2420, 2416,
+
+ 86, 2418, 2413, 2403, 2422, 86, 86, 86, 86, 2415,
+ 2421, 2417, 86, 2419, 86, 86, 86, 2423, 2424, 2425,
+ 86, 2427, 2426, 2429, 2430, 2420, 2416, 86, 2418, 86,
+ 86, 2422, 2432, 2428, 2433, 86, 2440, 2421, 86, 86,
+ 2419, 2431, 2435, 86, 2423, 2424, 2425, 86, 2427, 2426,
+ 86, 2430, 2437, 86, 86, 2434, 2438, 86, 2436, 2432,
+ 2428, 2433, 2439, 86, 86, 2441, 86, 2442, 2431, 2435,
+ 86, 86, 2443, 2444, 86, 86, 2451, 3523, 2449, 2437,
+ 86, 86, 2434, 2438, 86, 2436, 2445, 2447, 2446, 2439,
+ 86, 86, 2441, 86, 2442, 86, 2448, 2450, 2452, 2443,
+
+ 2444, 2455, 86, 86, 2453, 2449, 2454, 2456, 86, 2457,
+ 86, 2458, 3523, 2445, 2447, 2446, 86, 2459, 86, 86,
+ 2464, 2460, 86, 2448, 2450, 2452, 2461, 2463, 2455, 2462,
+ 2465, 2453, 86, 2454, 2456, 2466, 2457, 2467, 86, 86,
+ 86, 86, 86, 2468, 2459, 86, 86, 2464, 2460, 2469,
+ 3523, 2470, 2473, 2461, 2463, 86, 2462, 86, 2474, 2475,
+ 86, 3523, 2466, 86, 86, 2471, 2476, 2477, 2472, 2479,
+ 2468, 2480, 2481, 2478, 86, 2483, 2469, 86, 2470, 86,
+ 86, 86, 2482, 86, 86, 86, 2475, 2485, 86, 2486,
+ 86, 2487, 2471, 2476, 2477, 2472, 2479, 2484, 86, 86,
+
+ 2478, 86, 86, 2488, 2489, 2491, 86, 2490, 2496, 2482,
+ 3523, 2492, 2493, 86, 86, 2495, 2486, 2498, 2487, 2494,
+ 86, 86, 3523, 86, 2484, 86, 2500, 86, 2497, 2501,
+ 86, 86, 2491, 2502, 2490, 86, 86, 86, 2492, 2493,
+ 2499, 2505, 2495, 2503, 86, 3523, 2494, 2508, 86, 86,
+ 86, 2506, 2507, 2500, 2509, 2497, 2501, 86, 2504, 86,
+ 2502, 2511, 2516, 2510, 86, 2514, 86, 2499, 86, 86,
+ 2503, 86, 86, 2512, 2508, 2515, 2517, 86, 2506, 2507,
+ 86, 2509, 2513, 2518, 86, 2504, 86, 2519, 86, 86,
+ 2510, 2521, 2514, 2523, 2520, 2524, 3523, 2522, 86, 86,
+
+ 2512, 2528, 2515, 2517, 86, 86, 86, 2525, 86, 2513,
+ 2518, 2527, 86, 86, 2519, 2529, 86, 2526, 86, 2534,
+ 2523, 2520, 2524, 2530, 2522, 2535, 86, 86, 2528, 2539,
+ 2531, 2536, 3523, 86, 2525, 2542, 86, 2537, 2527, 2538,
+ 86, 86, 2529, 86, 2526, 2532, 2541, 2533, 86, 2540,
+ 2530, 86, 2535, 86, 86, 86, 2539, 2531, 2536, 86,
+ 2543, 2544, 2542, 2545, 2537, 2546, 2538, 2547, 86, 2548,
+ 2555, 2551, 2532, 2541, 2533, 2549, 2540, 86, 2552, 2550,
+ 2556, 86, 86, 86, 86, 86, 2553, 2543, 2544, 3523,
+ 2545, 86, 2546, 2554, 2557, 86, 2558, 2555, 2559, 86,
+
+ 86, 86, 2549, 86, 86, 2552, 2550, 2556, 86, 2560,
+ 2562, 2561, 86, 2553, 86, 2563, 86, 2564, 2569, 2565,
+ 2554, 2557, 2566, 2558, 86, 2559, 86, 86, 2568, 86,
+ 2567, 2574, 3523, 2570, 2572, 3523, 2560, 2573, 2561, 3523,
+ 86, 2571, 86, 2579, 2564, 3523, 2565, 86, 86, 2566,
+ 86, 2577, 86, 170, 86, 2568, 2581, 2567, 2574, 86,
+ 2570, 2572, 86, 86, 2573, 2575, 2578, 2576, 2571, 2580,
+ 86, 2582, 86, 2583, 86, 2584, 2585, 86, 2577, 2587,
+ 2586, 86, 2588, 2581, 86, 2590, 86, 86, 2591, 86,
+ 2589, 86, 2575, 2578, 2576, 2592, 2580, 2593, 2582, 2595,
+
+ 2583, 86, 2584, 2585, 86, 86, 2587, 2586, 2594, 2588,
+ 2596, 2597, 86, 2598, 86, 2591, 2605, 2589, 2600, 2599,
+ 2602, 86, 86, 2604, 2593, 3523, 2601, 2609, 2603, 86,
+ 86, 86, 86, 86, 2607, 2594, 86, 2608, 2597, 2606,
+ 86, 86, 86, 2610, 86, 2600, 2599, 2602, 86, 86,
+ 2604, 86, 86, 2601, 2609, 2603, 86, 2611, 2612, 2613,
+ 86, 2607, 2614, 2616, 2608, 2615, 2606, 2617, 2619, 86,
+ 86, 2618, 3523, 2620, 2622, 86, 86, 86, 2626, 86,
+ 86, 86, 2623, 3523, 2611, 2612, 2613, 86, 86, 2614,
+ 86, 2625, 2615, 86, 2617, 2619, 2621, 2624, 2618, 2627,
+
+ 2620, 2622, 2628, 86, 86, 86, 2629, 3523, 2630, 2623,
+ 86, 2631, 2632, 86, 2634, 86, 86, 2635, 2625, 86,
+ 86, 2633, 2638, 2621, 2624, 2636, 2627, 86, 86, 2628,
+ 2639, 2637, 86, 2629, 86, 2630, 86, 2640, 2631, 2632,
+ 2643, 86, 2641, 2642, 2635, 2645, 86, 2644, 2633, 86,
+ 2646, 2648, 2636, 86, 86, 2647, 86, 2639, 2637, 2650,
+ 86, 2651, 86, 2652, 2640, 2649, 86, 2643, 2654, 2641,
+ 2642, 86, 2645, 2661, 2644, 2653, 86, 2646, 86, 86,
+ 86, 86, 2647, 86, 86, 2655, 86, 2656, 2651, 2659,
+ 86, 2658, 2649, 2657, 86, 2654, 86, 86, 2662, 2660,
+
+ 86, 2663, 2653, 2664, 2675, 2665, 3523, 2668, 2666, 86,
+ 86, 86, 2655, 2670, 2656, 2669, 2659, 2667, 2658, 86,
+ 2657, 86, 86, 86, 2671, 86, 2660, 2673, 2672, 86,
+ 2664, 86, 2665, 86, 2668, 2666, 86, 86, 2674, 86,
+ 2670, 2676, 2669, 86, 2667, 2677, 2678, 2679, 2683, 2681,
+ 86, 2671, 2680, 2685, 86, 2672, 86, 86, 86, 2682,
+ 86, 2684, 86, 2686, 3523, 2674, 2688, 2687, 2676, 2689,
+ 3523, 86, 2677, 86, 2679, 86, 2681, 2691, 2692, 2680,
+ 2685, 86, 86, 86, 2690, 86, 2682, 2695, 2684, 86,
+ 2686, 86, 86, 2688, 2687, 2693, 2689, 86, 2696, 2694,
+
+ 86, 2697, 86, 2698, 2691, 2692, 86, 2699, 2700, 86,
+ 2701, 2690, 3523, 2703, 2695, 2704, 2702, 3523, 2705, 86,
+ 2707, 2706, 2693, 86, 3523, 86, 2694, 86, 86, 3523,
+ 86, 2708, 2712, 3523, 86, 2700, 86, 2701, 86, 86,
+ 2703, 86, 2704, 2702, 86, 2705, 86, 2707, 2706, 2709,
+ 2711, 2710, 2713, 2714, 2715, 2716, 86, 86, 2708, 86,
+ 86, 86, 2720, 2724, 2718, 2721, 2722, 2723, 2717, 86,
+ 2719, 86, 2726, 86, 86, 3523, 2709, 2711, 2710, 2713,
+ 86, 86, 2716, 86, 86, 86, 2725, 86, 2729, 2720,
+ 86, 2718, 2721, 2722, 2723, 2717, 2728, 2719, 2731, 86,
+
+ 2727, 86, 86, 86, 86, 2730, 2733, 2732, 86, 2734,
+ 2736, 86, 86, 2725, 2735, 2729, 2740, 2737, 2738, 3523,
+ 3523, 86, 2742, 2728, 170, 2731, 2739, 2727, 86, 86,
+ 86, 86, 2730, 2733, 2732, 86, 2734, 2736, 2741, 2743,
+ 86, 2735, 86, 2740, 2737, 2738, 86, 2744, 2745, 2742,
+ 2746, 2747, 86, 2739, 2748, 3523, 2749, 3523, 2750, 2751,
+ 2752, 2754, 3523, 2753, 3523, 2741, 2743, 3523, 86, 86,
+ 86, 86, 2755, 86, 2744, 2745, 86, 86, 86, 86,
+ 86, 2748, 86, 2749, 86, 2750, 2751, 2752, 2754, 2756,
+ 2753, 2757, 2759, 2758, 2760, 3523, 86, 2761, 86, 2755,
+
+ 86, 86, 2762, 2763, 2764, 3523, 2765, 2766, 2769, 86,
+ 86, 2770, 86, 86, 2767, 2772, 2756, 3523, 2757, 2759,
+ 2758, 2760, 86, 2768, 2761, 2771, 86, 86, 86, 2762,
+ 2763, 2764, 86, 2765, 86, 2769, 2773, 2774, 86, 2775,
+ 2776, 2767, 86, 86, 2777, 86, 86, 2781, 86, 2778,
+ 2768, 2783, 2771, 2779, 2780, 86, 86, 2782, 86, 2784,
+ 86, 2785, 86, 2773, 2774, 86, 2775, 2776, 86, 2787,
+ 2786, 2777, 2788, 2789, 2781, 2790, 2778, 86, 86, 86,
+ 2779, 2780, 2791, 2792, 2782, 2793, 86, 3523, 2785, 2794,
+ 86, 86, 2795, 86, 2796, 86, 2787, 2786, 2797, 86,
+
+ 86, 86, 86, 2799, 2798, 86, 2800, 86, 2802, 2791,
+ 2792, 2801, 2793, 3523, 86, 2803, 2794, 3523, 3523, 2795,
+ 2807, 2796, 2804, 86, 2805, 2797, 86, 86, 86, 2806,
+ 2799, 2798, 86, 86, 3523, 86, 86, 2808, 2801, 2809,
+ 86, 2810, 2803, 2812, 86, 2811, 2813, 2807, 86, 2804,
+ 86, 2805, 2814, 86, 2815, 86, 2806, 2816, 2817, 86,
+ 2818, 86, 2819, 2820, 2808, 2821, 2809, 86, 2810, 86,
+ 2812, 2822, 2811, 2813, 2823, 86, 86, 2824, 86, 2814,
+ 2825, 86, 2829, 86, 2816, 2817, 2827, 86, 86, 2819,
+ 2820, 2826, 2821, 86, 86, 2828, 2830, 86, 2822, 2831,
+
+ 2833, 2823, 86, 86, 86, 2832, 2834, 2825, 2835, 86,
+ 3523, 86, 2836, 2827, 86, 2839, 2841, 86, 2826, 2837,
+ 2838, 2844, 2828, 2830, 2842, 3523, 2831, 86, 86, 2840,
+ 86, 86, 2832, 2834, 86, 86, 86, 86, 2845, 2836,
+ 2843, 2846, 2839, 86, 2847, 86, 2837, 2838, 86, 2851,
+ 86, 2842, 86, 2852, 2848, 86, 2840, 2849, 86, 2850,
+ 86, 2853, 2854, 2855, 3523, 2845, 2857, 2843, 2846, 2856,
+ 2858, 2847, 86, 86, 3523, 86, 86, 86, 2864, 86,
+ 2852, 2848, 2859, 2862, 2849, 86, 2850, 2860, 2853, 86,
+ 2855, 86, 86, 2857, 2861, 86, 2856, 2858, 2865, 2863,
+
+ 86, 86, 86, 2866, 2867, 2864, 2868, 2869, 2870, 2859,
+ 2862, 86, 86, 2871, 2860, 86, 86, 2872, 2874, 2873,
+ 86, 2861, 2876, 2875, 3523, 2865, 2863, 86, 2881, 86,
+ 2866, 86, 86, 86, 2869, 2870, 2877, 86, 2878, 2879,
+ 170, 86, 3523, 2882, 2872, 2874, 2873, 2880, 2883, 2884,
+ 2875, 86, 2886, 2885, 86, 86, 2888, 2887, 86, 2889,
+ 2890, 2891, 86, 2877, 86, 2878, 2879, 2892, 2898, 86,
+ 86, 2894, 2896, 86, 2880, 2883, 86, 86, 86, 2893,
+ 2885, 86, 2897, 2888, 86, 2895, 2889, 2890, 86, 86,
+ 86, 86, 2899, 86, 2892, 2900, 2901, 86, 2894, 2896,
+
+ 86, 86, 3523, 2904, 2903, 2902, 2893, 2906, 3523, 2897,
+ 3523, 86, 2895, 2905, 2907, 2908, 3523, 86, 3523, 2910,
+ 2911, 2912, 2900, 2901, 86, 86, 86, 86, 86, 86,
+ 2904, 2903, 2902, 86, 2906, 2909, 86, 86, 86, 86,
+ 2905, 2907, 2908, 2913, 86, 2914, 2910, 2911, 2912, 2915,
+ 2916, 2917, 2918, 2919, 2922, 2923, 3523, 2920, 2921, 86,
+ 2924, 86, 2909, 86, 86, 3523, 86, 2927, 86, 86,
+ 2913, 86, 2914, 86, 2925, 86, 2915, 2916, 2926, 2918,
+ 2919, 86, 2923, 86, 2920, 2921, 2929, 2924, 2928, 2931,
+ 86, 2932, 86, 2930, 86, 2933, 86, 86, 86, 2934,
+
+ 86, 2925, 2935, 2938, 2937, 2926, 2939, 2944, 2936, 3523,
+ 2941, 2942, 86, 2929, 2943, 2928, 2931, 86, 86, 2940,
+ 2930, 86, 2933, 2945, 2951, 86, 2946, 2947, 86, 86,
+ 86, 86, 86, 2939, 86, 2936, 86, 2941, 2942, 86,
+ 86, 2943, 2949, 2948, 2952, 2953, 2940, 86, 2950, 86,
+ 2945, 86, 3523, 2946, 2947, 86, 2954, 86, 2955, 2956,
+ 2957, 2959, 2958, 3523, 3523, 2964, 2962, 86, 86, 2949,
+ 2948, 86, 86, 2960, 2965, 2950, 86, 2966, 2961, 86,
+ 86, 86, 2967, 2954, 86, 2955, 86, 2957, 2959, 2958,
+ 2963, 86, 2964, 2962, 2968, 2971, 2969, 86, 2970, 2972,
+
+ 2973, 86, 2974, 2976, 86, 86, 2975, 86, 86, 86,
+ 86, 2978, 86, 2982, 2983, 2980, 2977, 2963, 86, 2985,
+ 2979, 2968, 86, 2969, 86, 2970, 2972, 2973, 86, 86,
+ 86, 2981, 86, 2975, 86, 2986, 2984, 2993, 86, 2992,
+ 3523, 86, 2980, 2977, 86, 86, 2989, 2979, 2987, 2990,
+ 86, 86, 2995, 2988, 2991, 2996, 86, 86, 2981, 86,
+ 86, 86, 2986, 2984, 2997, 2994, 2992, 86, 2998, 86,
+ 2999, 3523, 3000, 2989, 86, 86, 2990, 3001, 3005, 2995,
+ 86, 2991, 86, 3002, 3006, 3009, 86, 86, 3003, 3004,
+ 3077, 2997, 2994, 86, 86, 2998, 3007, 2999, 86, 3000,
+
+ 86, 86, 3021, 86, 3001, 3005, 3008, 3010, 3523, 86,
+ 3002, 3006, 86, 3011, 3013, 3003, 3004, 3014, 3523, 86,
+ 86, 3012, 86, 3007, 3015, 86, 3016, 86, 3020, 86,
+ 3018, 3017, 3028, 3008, 3010, 3019, 86, 86, 3022, 3027,
+ 3011, 3013, 3023, 86, 3014, 3024, 3523, 3025, 3012, 3026,
+ 86, 3015, 3523, 3029, 86, 3020, 3030, 86, 86, 3028,
+ 86, 3038, 86, 3523, 86, 3022, 3027, 3032, 86, 3023,
+ 3033, 86, 3024, 86, 3025, 86, 3026, 3031, 86, 3034,
+ 3029, 3035, 3039, 3030, 3036, 3037, 3040, 3041, 86, 86,
+ 86, 86, 86, 3042, 3032, 3043, 86, 3033, 3044, 86,
+
+ 3046, 86, 3045, 3047, 3031, 3048, 3034, 3523, 3035, 86,
+ 86, 3036, 3037, 3040, 3041, 86, 3049, 3050, 3052, 3051,
+ 86, 86, 3043, 86, 86, 86, 3053, 86, 86, 3045,
+ 3047, 3054, 3048, 3055, 86, 86, 3057, 3058, 3063, 3056,
+ 3064, 3062, 3061, 3049, 3050, 86, 3051, 86, 3065, 86,
+ 3059, 86, 86, 86, 86, 3060, 86, 3066, 3054, 86,
+ 3055, 86, 86, 3057, 3058, 3063, 3056, 3064, 3062, 3061,
+ 3067, 3068, 3069, 86, 3070, 86, 3071, 3072, 3073, 3523,
+ 86, 86, 86, 86, 86, 3074, 3076, 3078, 3075, 3079,
+ 3523, 3523, 86, 86, 86, 86, 3080, 3067, 3068, 3069,
+
+ 3081, 86, 86, 3071, 3072, 3073, 86, 86, 3082, 3084,
+ 3083, 3085, 3074, 3076, 3078, 3075, 3079, 3086, 86, 3089,
+ 3096, 3087, 86, 3080, 3088, 86, 3090, 3081, 86, 3091,
+ 86, 86, 3092, 3093, 86, 3082, 3084, 3083, 3085, 3095,
+ 86, 3094, 3097, 3098, 3086, 3099, 86, 86, 3087, 86,
+ 86, 3088, 86, 86, 3100, 3105, 86, 3103, 3101, 3092,
+ 3093, 86, 3107, 86, 86, 86, 3095, 3104, 3094, 3097,
+ 3098, 3102, 86, 86, 3108, 3112, 86, 86, 3106, 86,
+ 86, 3100, 3109, 86, 3103, 3101, 3110, 86, 3111, 86,
+ 3116, 3113, 3115, 3523, 3104, 3114, 3117, 86, 3102, 86,
+
+ 3131, 3108, 3112, 86, 86, 3106, 3118, 86, 86, 3109,
+ 86, 3119, 3120, 3110, 86, 3111, 3121, 86, 3113, 3115,
+ 86, 3122, 3114, 3117, 3125, 86, 3124, 86, 3123, 3128,
+ 3126, 3523, 86, 3118, 86, 86, 86, 86, 3119, 3120,
+ 3127, 3129, 3133, 3121, 3132, 86, 86, 86, 3122, 3134,
+ 86, 3125, 86, 3124, 3135, 3123, 3128, 3126, 3130, 86,
+ 86, 3136, 3137, 3138, 3139, 3141, 86, 3127, 3129, 86,
+ 3142, 3132, 3140, 86, 86, 3143, 86, 3144, 3145, 3148,
+ 3146, 3135, 86, 86, 86, 3130, 86, 86, 86, 3137,
+ 3138, 3139, 3141, 3147, 3151, 86, 3149, 86, 3153, 3140,
+
+ 3150, 86, 3143, 3165, 3144, 86, 3148, 3146, 86, 86,
+ 86, 3152, 3154, 3156, 3155, 3157, 3158, 3159, 86, 86,
+ 3147, 86, 3164, 3149, 86, 3166, 3160, 3150, 86, 86,
+ 86, 3162, 3163, 86, 86, 86, 3167, 3169, 3152, 3154,
+ 86, 3155, 86, 3158, 3159, 3161, 3171, 86, 3168, 3164,
+ 86, 86, 3166, 86, 3170, 86, 3172, 3177, 3162, 3163,
+ 3173, 3174, 3175, 3167, 86, 3176, 86, 3178, 3179, 86,
+ 86, 3181, 3161, 3171, 3182, 3168, 86, 3523, 3185, 3523,
+ 86, 3170, 3183, 3172, 86, 3188, 86, 3173, 3174, 3175,
+ 3180, 86, 3189, 86, 3178, 3184, 3193, 86, 3181, 86,
+
+ 86, 86, 3190, 86, 86, 3186, 3187, 86, 3197, 3183,
+ 86, 86, 86, 3192, 3191, 86, 86, 3180, 3194, 3189,
+ 3195, 3196, 3184, 86, 3198, 3199, 86, 86, 3200, 3190,
+ 3201, 86, 3186, 3187, 3202, 86, 3203, 3204, 3205, 86,
+ 3192, 3191, 3206, 86, 3207, 3194, 3209, 3195, 3196, 3211,
+ 86, 86, 86, 3208, 86, 3200, 86, 3201, 86, 3210,
+ 3212, 3202, 3213, 86, 86, 86, 3215, 86, 86, 86,
+ 3214, 3207, 3216, 3218, 86, 86, 86, 86, 86, 3217,
+ 3208, 86, 3219, 86, 3220, 3221, 3210, 3212, 3222, 3213,
+ 3223, 3224, 86, 3215, 3225, 86, 3226, 3214, 86, 3216,
+
+ 86, 3235, 3229, 3227, 3231, 86, 3217, 3230, 86, 3219,
+ 86, 3220, 3221, 86, 3228, 3222, 3232, 3223, 86, 3234,
+ 3233, 86, 86, 3236, 86, 3237, 3238, 3239, 86, 3229,
+ 3227, 86, 86, 86, 3230, 3240, 3523, 3241, 86, 3244,
+ 3523, 3228, 86, 86, 86, 3245, 3234, 3233, 3242, 86,
+ 3236, 3523, 3237, 86, 3239, 86, 3243, 3246, 86, 86,
+ 86, 86, 3240, 86, 3241, 3248, 3244, 3247, 3252, 3249,
+ 3250, 3251, 3245, 86, 3523, 3242, 86, 86, 86, 86,
+ 86, 3253, 3254, 3243, 3246, 3256, 86, 3255, 3257, 3259,
+ 3264, 86, 3248, 86, 3247, 3252, 3249, 3250, 3251, 3258,
+
+ 3260, 3262, 3263, 3265, 3261, 3267, 86, 86, 3253, 3254,
+ 86, 86, 3256, 3266, 3255, 3257, 86, 86, 3270, 3268,
+ 3271, 86, 86, 3272, 3273, 86, 3258, 3260, 3262, 3263,
+ 86, 3261, 86, 3276, 3269, 3279, 86, 3274, 3275, 3523,
+ 3266, 86, 86, 3277, 3278, 86, 3268, 86, 3280, 3281,
+ 3282, 3284, 86, 3523, 3283, 3288, 3523, 3290, 86, 86,
+ 86, 3269, 3279, 86, 86, 3287, 86, 86, 3291, 3296,
+ 86, 3292, 86, 3285, 3523, 3280, 3281, 86, 3284, 3286,
+ 86, 3283, 86, 3289, 3290, 3293, 86, 86, 86, 3294,
+ 86, 86, 3287, 3295, 86, 3291, 3296, 3297, 3292, 3298,
+
+ 3285, 86, 86, 86, 3299, 3300, 3286, 3301, 3306, 3302,
+ 3289, 3303, 3293, 3307, 3523, 3308, 3294, 86, 3315, 3304,
+ 3295, 86, 3305, 3309, 86, 86, 3298, 3310, 3316, 3311,
+ 86, 3299, 86, 86, 86, 86, 3302, 86, 3303, 86,
+ 86, 3312, 3313, 3314, 3317, 86, 3304, 86, 3318, 3305,
+ 3309, 86, 3319, 3523, 3310, 3320, 3311, 3322, 3321, 3323,
+ 86, 3325, 3326, 86, 86, 86, 3327, 86, 3312, 3313,
+ 3314, 3317, 3324, 3328, 3329, 86, 3330, 3331, 3332, 86,
+ 86, 3335, 3320, 3337, 86, 3321, 86, 3339, 86, 86,
+ 86, 3333, 86, 86, 3334, 3336, 3341, 3343, 86, 3324,
+
+ 86, 86, 3338, 86, 86, 86, 3346, 3340, 86, 86,
+ 3337, 86, 86, 86, 86, 86, 3342, 3344, 3333, 3345,
+ 3348, 3334, 3336, 86, 3343, 3347, 3349, 3350, 86, 3338,
+ 3351, 86, 86, 86, 3340, 86, 3352, 86, 3355, 3353,
+ 3354, 3523, 3356, 3342, 3344, 86, 3345, 86, 86, 3357,
+ 3358, 86, 3347, 3349, 3350, 86, 3359, 3351, 86, 3361,
+ 3362, 3360, 86, 3352, 86, 86, 3353, 3354, 3363, 3356,
+ 86, 86, 86, 3364, 3365, 86, 3357, 3358, 86, 3523,
+ 86, 3366, 3367, 3359, 3368, 86, 3361, 3362, 3360, 3369,
+ 3370, 86, 3371, 3372, 3373, 3363, 3523, 86, 86, 3374,
+
+ 3364, 3365, 3376, 86, 3385, 3523, 86, 3375, 3366, 3367,
+ 3379, 3368, 86, 86, 86, 86, 86, 86, 3380, 86,
+ 3372, 3373, 86, 3377, 3378, 3383, 3374, 86, 3382, 3376,
+ 3381, 3385, 86, 3384, 3375, 3386, 3387, 3379, 86, 86,
+ 86, 86, 86, 86, 3388, 3380, 86, 3389, 3391, 3390,
+ 3377, 3378, 3383, 3392, 86, 3382, 86, 3381, 3394, 86,
+ 3384, 3393, 3386, 3387, 86, 86, 3395, 3396, 3397, 3399,
+ 86, 3388, 3398, 86, 3389, 3391, 3390, 3401, 3403, 86,
+ 3392, 86, 3400, 86, 3402, 86, 3404, 3523, 3393, 86,
+ 3405, 3407, 3408, 3395, 3396, 3397, 86, 3523, 86, 3398,
+
+ 86, 3406, 3409, 3412, 86, 86, 3523, 3416, 86, 3400,
+ 86, 3402, 3413, 86, 86, 86, 3414, 3405, 3407, 3408,
+ 3410, 3411, 86, 3415, 86, 86, 3418, 3419, 3406, 3409,
+ 3417, 86, 3420, 86, 86, 86, 3422, 86, 3421, 3413,
+ 3423, 3425, 3424, 3414, 86, 86, 86, 3410, 3411, 3426,
+ 3415, 86, 86, 86, 86, 3427, 3428, 3417, 3429, 3420,
+ 3430, 3435, 3436, 86, 86, 3421, 3431, 3423, 86, 3424,
+ 3432, 3437, 3433, 3434, 86, 86, 3426, 86, 3438, 86,
+ 86, 3439, 3427, 3428, 86, 86, 3440, 3444, 86, 86,
+ 86, 3449, 86, 3431, 86, 86, 3441, 3432, 3437, 3433,
+
+ 3434, 86, 3442, 86, 3443, 3438, 3445, 3446, 3439, 86,
+ 3447, 3523, 86, 3440, 3444, 86, 3448, 3452, 86, 3450,
+ 86, 3451, 3453, 3441, 86, 86, 86, 3455, 3454, 3442,
+ 86, 3443, 86, 3445, 3446, 3456, 3457, 3447, 86, 3460,
+ 3523, 3461, 3458, 3448, 3452, 3459, 3450, 86, 3451, 86,
+ 86, 3462, 3463, 3464, 3465, 3454, 3467, 3466, 86, 86,
+ 3468, 86, 3456, 3457, 86, 86, 3460, 86, 86, 3458,
+ 3470, 3473, 3459, 86, 86, 3523, 86, 86, 86, 3463,
+ 86, 3465, 3469, 3467, 3466, 3471, 3472, 3468, 3474, 3475,
+ 86, 3478, 3476, 86, 3480, 3477, 3479, 86, 3473, 86,
+
+ 86, 3481, 86, 3482, 86, 3485, 3483, 86, 86, 3469,
+ 3484, 86, 3471, 3472, 3487, 86, 3475, 86, 3478, 3476,
+ 86, 3480, 3477, 3479, 3488, 86, 3486, 86, 3481, 3490,
+ 3482, 86, 3485, 3483, 86, 3489, 3491, 3484, 3492, 3493,
+ 86, 3487, 3494, 3495, 86, 3523, 3498, 3501, 3496, 86,
+ 86, 3488, 3497, 3486, 86, 3499, 3490, 86, 3503, 3523,
+ 3523, 86, 3489, 3491, 3523, 86, 3493, 86, 86, 3494,
+ 86, 3504, 86, 3498, 86, 3496, 3500, 86, 3502, 3497,
+ 86, 3505, 3499, 3506, 86, 3503, 86, 3507, 3508, 86,
+ 3511, 86, 3509, 86, 3510, 3512, 3514, 3523, 3504, 3515,
+
+ 86, 3523, 86, 3500, 3513, 3502, 3517, 3516, 3505, 3521,
+ 3506, 3522, 3519, 86, 3507, 86, 86, 3511, 3518, 3509,
+ 86, 3510, 86, 86, 86, 3523, 86, 86, 86, 3520,
+ 3523, 3513, 3523, 3517, 3516, 3523, 86, 86, 86, 3519,
+ 86, 3523, 3523, 3523, 3523, 3518, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3520, 47, 47, 47,
+ 47, 47, 47, 47, 52, 52, 52, 52, 52, 52,
+ 52, 57, 57, 57, 57, 57, 57, 57, 63, 63,
+ 63, 63, 63, 63, 63, 68, 68, 68, 68, 68,
+ 68, 68, 74, 74, 74, 74, 74, 74, 74, 80,
+
+ 80, 80, 80, 80, 80, 80, 89, 89, 3523, 89,
+ 89, 89, 89, 160, 160, 3523, 3523, 3523, 160, 160,
+ 162, 162, 3523, 3523, 162, 3523, 162, 164, 3523, 3523,
+ 3523, 3523, 3523, 164, 167, 167, 3523, 3523, 3523, 167,
+ 167, 169, 3523, 3523, 3523, 3523, 3523, 169, 171, 171,
+ 3523, 171, 171, 171, 171, 174, 3523, 3523, 3523, 3523,
+ 3523, 174, 177, 177, 3523, 3523, 3523, 177, 177, 90,
+ 90, 3523, 90, 90, 90, 90, 17, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523
} ;
-static const flex_int16_t yy_chk[10028] =
+static const flex_int16_t yy_chk[10144] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2693,13 +2719,13 @@ static const flex_int16_t yy_chk[10028] =
7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
8, 9, 9, 9, 10, 10, 10, 19, 51, 51,
- 1115, 19, 3491, 3, 32, 33, 4, 67, 67, 5,
- 33, 6, 2838, 13, 13, 13, 13, 7, 13, 14,
+ 1122, 19, 3531, 3, 32, 33, 4, 67, 67, 5,
+ 33, 6, 2871, 13, 13, 13, 13, 7, 13, 14,
14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
- 1115, 10, 11, 11, 11, 11, 11, 11, 12, 12,
+ 1122, 10, 11, 11, 11, 11, 11, 11, 12, 12,
12, 12, 12, 12, 16, 16, 16, 34, 28, 84,
84, 13, 11, 45, 293, 25, 25, 14, 12, 34,
- 39, 23, 15, 23, 23, 45, 23, 1127, 28, 177,
+ 39, 23, 15, 23, 23, 45, 23, 1134, 28, 177,
11, 28, 23, 39, 34, 28, 12, 176, 87, 11,
45, 16, 87, 293, 37, 12, 30, 39, 29, 56,
37, 174, 56, 72, 30, 28, 26, 169, 100, 23,
@@ -2723,12 +2749,12 @@ static const flex_int16_t yy_chk[10028] =
38, 43, 73, 38, 73, 73, 95, 73, 111, 97,
38, 43, 38, 38, 104, 43, 43, 38, 95, 104,
79, 38, 79, 79, 58, 79, 111, 38, 219, 86,
- 38, 86, 86, 97, 86, 222, 97, 38, 40, 963,
+ 38, 86, 86, 97, 86, 222, 97, 38, 40, 968,
86, 104, 40, 89, 96, 89, 89, 112, 89, 98,
57, 96, 40, 40, 89, 40, 112, 103, 103, 106,
105, 52, 98, 47, 40, 40, 103, 222, 105, 40,
- 963, 96, 18, 98, 112, 137, 98, 106, 17, 40,
+ 968, 96, 18, 98, 112, 137, 98, 106, 17, 40,
40, 89, 40, 41, 103, 103, 41, 105, 102, 98,
107, 106, 109, 41, 102, 108, 102, 41, 41, 109,
224, 137, 137, 107, 106, 41, 113, 0, 108, 102,
@@ -2775,1016 +2801,1029 @@ static const flex_int16_t yy_chk[10028] =
256, 217, 256, 197, 211, 218, 214, 211, 216, 197,
197, 214, 215, 216, 221, 215, 218, 215, 226, 225,
223, 220, 220, 231, 226, 221, 228, 223, 0, 215,
- 233, 215, 218, 225, 230, 0, 0, 0, 215, 215,
- 234, 0, 215, 232, 215, 226, 221, 223, 228, 239,
- 235, 225, 221, 228, 234, 231, 215, 230, 215, 236,
- 225, 230, 233, 232, 237, 238, 236, 234, 239, 240,
- 232, 235, 241, 244, 238, 242, 239, 235, 243, 238,
-
- 245, 251, 247, 240, 244, 237, 236, 245, 248, 249,
- 243, 237, 238, 242, 241, 253, 240, 248, 246, 241,
- 244, 238, 242, 246, 247, 243, 250, 245, 259, 247,
- 255, 250, 249, 251, 254, 248, 249, 252, 252, 258,
- 257, 254, 260, 261, 262, 264, 252, 253, 257, 0,
- 246, 261, 255, 250, 263, 267, 265, 255, 264, 258,
- 259, 254, 266, 268, 252, 252, 258, 257, 0, 263,
- 261, 269, 264, 270, 260, 271, 262, 270, 267, 272,
- 274, 263, 265, 265, 273, 0, 275, 267, 269, 266,
- 276, 278, 273, 275, 272, 268, 269, 271, 269, 274,
-
- 270, 279, 271, 280, 277, 267, 272, 274, 277, 282,
- 281, 273, 276, 275, 0, 269, 283, 276, 285, 287,
- 289, 284, 286, 278, 288, 280, 288, 285, 283, 290,
- 280, 277, 281, 279, 284, 286, 291, 281, 287, 292,
- 0, 282, 295, 283, 296, 285, 287, 297, 284, 286,
- 294, 288, 289, 290, 299, 298, 290, 300, 297, 294,
- 303, 291, 304, 291, 305, 292, 292, 298, 295, 295,
- 296, 296, 301, 302, 297, 304, 306, 294, 299, 307,
- 300, 299, 298, 309, 300, 308, 311, 313, 0, 304,
- 301, 302, 303, 310, 313, 312, 305, 314, 315, 301,
-
- 302, 306, 308, 306, 315, 317, 314, 316, 308, 309,
- 309, 307, 308, 318, 313, 310, 320, 319, 311, 312,
- 310, 316, 321, 326, 314, 315, 319, 312, 323, 308,
- 321, 317, 317, 322, 316, 325, 324, 318, 326, 320,
- 318, 327, 322, 320, 319, 324, 312, 328, 0, 321,
- 326, 329, 325, 0, 323, 323, 0, 331, 332, 325,
- 322, 0, 325, 324, 0, 333, 329, 332, 336, 335,
- 340, 328, 0, 327, 328, 331, 339, 0, 329, 325,
- 330, 339, 336, 330, 331, 332, 337, 333, 330, 330,
- 330, 330, 333, 335, 340, 336, 335, 340, 330, 338,
-
- 338, 337, 341, 0, 334, 0, 334, 330, 339, 347,
- 330, 342, 345, 337, 342, 330, 330, 330, 330, 334,
- 343, 342, 334, 348, 338, 346, 338, 338, 334, 341,
- 345, 334, 343, 334, 344, 344, 347, 349, 342, 345,
- 350, 342, 351, 346, 344, 348, 334, 343, 352, 334,
- 348, 354, 346, 353, 351, 0, 357, 361, 355, 354,
- 356, 344, 344, 349, 349, 355, 350, 350, 353, 351,
- 352, 358, 356, 358, 360, 352, 362, 363, 354, 361,
- 353, 360, 358, 364, 361, 355, 370, 356, 357, 364,
- 365, 0, 365, 366, 368, 0, 369, 358, 358, 363,
-
- 358, 360, 0, 371, 363, 364, 366, 393, 362, 358,
- 364, 367, 368, 404, 365, 372, 364, 365, 370, 365,
- 366, 368, 369, 369, 367, 375, 376, 367, 377, 367,
- 371, 378, 375, 379, 382, 367, 386, 372, 367, 393,
- 377, 386, 372, 378, 376, 404, 379, 382, 381, 385,
- 376, 367, 375, 376, 367, 377, 367, 373, 378, 373,
- 379, 382, 389, 0, 381, 373, 384, 385, 386, 373,
- 389, 376, 381, 388, 373, 381, 385, 373, 384, 388,
- 0, 387, 390, 373, 373, 391, 373, 392, 387, 389,
- 409, 381, 373, 384, 390, 392, 373, 394, 394, 395,
-
- 388, 373, 387, 391, 373, 374, 395, 374, 387, 390,
- 397, 399, 391, 444, 392, 387, 396, 398, 399, 397,
- 374, 400, 409, 374, 394, 374, 395, 374, 400, 396,
- 0, 374, 374, 401, 374, 398, 402, 403, 399, 398,
- 444, 0, 397, 396, 398, 401, 397, 374, 400, 403,
- 374, 405, 374, 0, 374, 383, 383, 408, 402, 430,
- 401, 407, 398, 402, 403, 383, 383, 383, 383, 383,
- 408, 410, 383, 410, 406, 411, 407, 405, 405, 0,
- 383, 406, 383, 383, 408, 412, 411, 0, 407, 413,
- 413, 430, 383, 383, 383, 383, 383, 414, 410, 383,
-
- 415, 406, 411, 416, 414, 420, 417, 412, 421, 418,
- 424, 415, 412, 422, 416, 425, 0, 423, 413, 417,
- 419, 419, 424, 421, 414, 423, 425, 415, 420, 435,
- 416, 421, 420, 417, 418, 421, 418, 424, 419, 422,
- 422, 427, 425, 426, 423, 419, 431, 419, 419, 432,
- 421, 437, 426, 0, 427, 428, 428, 433, 438, 434,
- 436, 435, 0, 558, 431, 419, 436, 428, 427, 428,
- 426, 432, 437, 431, 428, 439, 432, 434, 437, 0,
- 433, 438, 428, 428, 433, 438, 434, 436, 441, 440,
- 558, 442, 0, 443, 428, 441, 428, 429, 446, 439,
-
- 445, 0, 439, 447, 0, 429, 429, 443, 449, 429,
- 429, 440, 446, 429, 448, 441, 440, 442, 442, 429,
- 443, 452, 445, 453, 429, 446, 450, 445, 451, 447,
- 447, 449, 429, 429, 451, 449, 429, 429, 450, 454,
- 429, 455, 456, 452, 458, 453, 448, 454, 452, 456,
- 453, 457, 459, 450, 461, 451, 455, 462, 460, 458,
- 457, 463, 0, 466, 464, 454, 454, 465, 455, 456,
- 467, 458, 462, 465, 454, 467, 459, 461, 457, 459,
- 460, 461, 469, 472, 462, 460, 464, 463, 463, 466,
- 466, 464, 471, 473, 465, 474, 475, 467, 471, 476,
-
- 477, 474, 472, 479, 480, 479, 476, 481, 469, 469,
- 472, 473, 479, 480, 481, 477, 482, 483, 475, 471,
- 473, 484, 474, 475, 485, 486, 476, 477, 487, 482,
- 479, 480, 479, 489, 481, 488, 492, 490, 488, 484,
- 495, 487, 494, 482, 493, 0, 491, 486, 484, 483,
- 490, 493, 486, 497, 488, 487, 485, 489, 491, 500,
- 489, 496, 488, 495, 490, 488, 494, 501, 492, 494,
- 503, 493, 495, 491, 496, 497, 498, 499, 0, 502,
- 497, 498, 500, 499, 504, 505, 500, 506, 496, 501,
- 495, 502, 503, 505, 501, 504, 510, 503, 509, 513,
-
- 0, 506, 510, 498, 499, 509, 502, 513, 512, 511,
- 514, 504, 505, 0, 506, 507, 515, 0, 0, 0,
- 507, 511, 507, 510, 519, 509, 513, 515, 507, 516,
- 507, 512, 514, 507, 507, 512, 511, 514, 518, 0,
- 507, 507, 507, 515, 517, 521, 519, 507, 517, 507,
- 518, 519, 516, 0, 525, 507, 516, 507, 522, 520,
- 507, 507, 520, 521, 523, 518, 517, 507, 522, 524,
- 520, 517, 521, 526, 0, 517, 523, 526, 525, 528,
- 524, 525, 529, 0, 529, 527, 520, 530, 532, 520,
- 522, 523, 527, 534, 535, 522, 524, 0, 531, 533,
-
- 526, 537, 535, 532, 546, 528, 528, 0, 541, 529,
- 531, 533, 527, 530, 530, 532, 538, 536, 540, 534,
- 534, 535, 536, 537, 539, 531, 533, 544, 537, 541,
- 540, 543, 539, 545, 538, 541, 546, 547, 549, 552,
- 553, 548, 550, 538, 536, 540, 549, 551, 552, 543,
- 544, 539, 547, 548, 544, 550, 545, 554, 543, 551,
- 545, 555, 557, 553, 547, 549, 552, 553, 548, 550,
- 556, 554, 559, 556, 551, 560, 561, 0, 562, 563,
- 565, 557, 564, 0, 554, 569, 555, 567, 555, 557,
- 560, 566, 565, 562, 570, 564, 569, 556, 572, 570,
-
- 573, 574, 560, 563, 559, 562, 563, 565, 561, 564,
- 568, 567, 569, 566, 567, 571, 575, 568, 566, 576,
- 568, 577, 584, 582, 580, 572, 570, 573, 568, 571,
- 578, 581, 579, 574, 586, 578, 585, 568, 579, 580,
- 583, 584, 571, 575, 568, 582, 576, 568, 583, 584,
- 582, 580, 589, 577, 590, 581, 586, 588, 581, 579,
- 585, 586, 578, 585, 587, 588, 591, 583, 587, 592,
- 595, 593, 594, 591, 596, 589, 597, 0, 601, 589,
- 593, 598, 599, 595, 588, 603, 590, 598, 597, 601,
- 0, 587, 592, 591, 594, 608, 592, 595, 593, 594,
-
- 596, 596, 600, 597, 599, 601, 602, 0, 598, 599,
- 600, 605, 604, 602, 611, 0, 607, 603, 606, 609,
- 610, 608, 608, 606, 605, 607, 606, 606, 609, 600,
- 612, 610, 614, 602, 604, 613, 611, 616, 605, 604,
- 617, 611, 606, 607, 614, 606, 609, 610, 613, 618,
- 606, 0, 612, 606, 606, 619, 0, 612, 617, 614,
- 621, 620, 613, 622, 623, 624, 625, 617, 629, 616,
- 0, 0, 0, 618, 624, 623, 618, 619, 619, 627,
- 626, 630, 619, 620, 621, 622, 625, 621, 620, 628,
- 622, 623, 624, 625, 626, 629, 628, 631, 635, 630,
-
- 633, 627, 634, 632, 619, 631, 627, 626, 630, 632,
- 636, 633, 637, 635, 638, 0, 628, 639, 639, 646,
- 634, 640, 641, 642, 631, 635, 0, 633, 645, 634,
- 632, 644, 642, 637, 643, 647, 645, 648, 638, 637,
- 649, 638, 636, 651, 641, 640, 639, 643, 640, 641,
- 642, 646, 650, 644, 650, 645, 0, 647, 644, 653,
- 654, 643, 647, 652, 649, 651, 655, 649, 652, 648,
- 651, 656, 658, 653, 654, 657, 0, 660, 659, 650,
- 655, 655, 664, 657, 660, 661, 653, 654, 655, 662,
- 658, 663, 667, 655, 0, 652, 668, 667, 665, 658,
-
- 659, 670, 657, 656, 660, 659, 663, 655, 655, 662,
- 666, 661, 661, 665, 664, 663, 662, 669, 663, 669,
- 666, 671, 668, 668, 667, 665, 670, 672, 670, 671,
- 673, 674, 666, 663, 675, 677, 678, 666, 676, 673,
- 674, 0, 677, 675, 669, 0, 676, 666, 671, 679,
- 0, 680, 672, 687, 672, 681, 688, 673, 674, 682,
- 685, 675, 677, 688, 683, 676, 684, 681, 678, 680,
- 0, 682, 679, 683, 684, 685, 679, 686, 680, 689,
- 690, 0, 681, 688, 692, 687, 682, 685, 691, 686,
- 692, 683, 689, 684, 693, 690, 691, 694, 696, 695,
-
- 0, 697, 693, 701, 686, 702, 689, 690, 695, 696,
- 697, 692, 700, 698, 698, 691, 701, 706, 0, 699,
- 694, 693, 698, 704, 694, 696, 695, 699, 697, 703,
- 701, 702, 702, 706, 700, 705, 704, 708, 707, 700,
- 698, 698, 709, 705, 706, 713, 699, 710, 712, 711,
- 704, 707, 703, 709, 0, 710, 703, 714, 715, 708,
- 716, 715, 705, 711, 708, 707, 717, 713, 712, 709,
- 718, 719, 713, 721, 710, 712, 711, 714, 720, 718,
- 723, 722, 716, 724, 714, 715, 721, 716, 717, 725,
- 726, 719, 0, 717, 729, 723, 720, 718, 719, 722,
-
- 721, 727, 733, 732, 740, 720, 728, 723, 722, 732,
- 730, 725, 729, 731, 726, 724, 725, 726, 735, 728,
- 736, 729, 730, 734, 727, 737, 731, 739, 727, 733,
- 732, 734, 741, 728, 742, 739, 740, 730, 743, 741,
- 731, 746, 736, 737, 744, 735, 744, 736, 747, 734,
- 734, 745, 737, 743, 739, 749, 748, 742, 734, 741,
- 745, 742, 751, 0, 749, 743, 750, 747, 750, 751,
- 0, 744, 754, 746, 0, 747, 748, 0, 745, 0,
- 757, 761, 749, 748, 754, 0, 0, 0, 760, 751,
- 757, 764, 0, 750, 752, 763, 0, 752, 772, 754,
-
- 0, 752, 761, 766, 752, 772, 760, 757, 761, 764,
- 767, 752, 752, 769, 752, 760, 763, 768, 764, 752,
- 773, 752, 763, 765, 752, 772, 766, 776, 752, 769,
- 766, 752, 771, 770, 765, 0, 767, 767, 752, 752,
- 769, 752, 770, 768, 768, 771, 775, 778, 779, 776,
- 765, 0, 773, 775, 776, 780, 778, 777, 780, 771,
- 770, 774, 774, 777, 774, 0, 0, 774, 782, 781,
- 0, 779, 774, 775, 778, 779, 784, 0, 774, 774,
- 787, 786, 780, 786, 777, 781, 812, 774, 774, 774,
- 782, 774, 781, 783, 774, 782, 781, 785, 784, 774,
-
- 790, 783, 789, 784, 787, 774, 774, 787, 786, 785,
- 788, 791, 781, 792, 794, 788, 0, 793, 812, 797,
- 783, 795, 789, 791, 785, 796, 790, 790, 798, 789,
- 802, 800, 818, 801, 799, 792, 794, 802, 791, 800,
- 792, 794, 788, 793, 793, 795, 797, 796, 795, 799,
- 804, 803, 796, 798, 805, 798, 801, 802, 800, 803,
- 801, 799, 806, 807, 818, 808, 809, 810, 811, 804,
- 814, 820, 0, 811, 806, 809, 807, 804, 803, 813,
- 805, 805, 810, 815, 822, 817, 821, 823, 815, 806,
- 807, 808, 808, 809, 810, 811, 819, 814, 824, 825,
-
- 826, 813, 827, 820, 819, 828, 813, 817, 821, 830,
- 0, 823, 817, 821, 823, 815, 822, 831, 825, 824,
- 835, 829, 836, 819, 828, 824, 825, 826, 833, 827,
- 829, 830, 828, 832, 837, 834, 830, 831, 838, 833,
- 836, 839, 832, 834, 831, 842, 0, 835, 829, 836,
- 840, 843, 845, 837, 844, 833, 847, 844, 840, 0,
- 832, 837, 834, 842, 846, 838, 848, 851, 850, 843,
- 850, 849, 842, 839, 845, 852, 0, 840, 843, 845,
- 847, 844, 846, 847, 849, 851, 854, 853, 848, 852,
- 876, 846, 853, 848, 851, 850, 855, 856, 849, 857,
-
- 858, 859, 852, 858, 862, 856, 860, 863, 855, 864,
- 859, 0, 854, 854, 860, 864, 865, 857, 0, 853,
- 0, 0, 876, 855, 856, 867, 857, 858, 859, 862,
- 860, 862, 867, 860, 863, 868, 864, 871, 865, 866,
- 870, 860, 868, 865, 869, 866, 872, 870, 874, 869,
- 872, 873, 867, 875, 877, 871, 0, 874, 881, 0,
- 884, 875, 868, 880, 871, 882, 866, 870, 878, 879,
- 885, 869, 877, 872, 873, 874, 880, 879, 873, 881,
- 875, 877, 884, 878, 882, 881, 883, 884, 888, 890,
- 880, 887, 882, 886, 895, 878, 879, 885, 887, 883,
-
- 889, 886, 891, 893, 896, 892, 888, 889, 890, 891,
- 892, 893, 894, 883, 898, 888, 890, 900, 887, 894,
- 886, 897, 899, 901, 900, 902, 895, 889, 0, 891,
- 893, 903, 892, 904, 897, 899, 896, 905, 909, 894,
- 906, 904, 908, 910, 900, 905, 898, 907, 897, 899,
- 912, 913, 905, 907, 903, 901, 911, 902, 903, 912,
- 904, 914, 906, 916, 905, 913, 0, 906, 908, 908,
- 909, 0, 905, 917, 907, 910, 918, 912, 913, 915,
- 911, 919, 917, 911, 920, 921, 915, 922, 925, 920,
- 916, 923, 0, 914, 919, 925, 919, 921, 918, 924,
-
- 917, 927, 926, 918, 924, 919, 915, 930, 919, 927,
- 922, 932, 921, 936, 922, 925, 920, 923, 923, 929,
- 930, 919, 929, 919, 926, 932, 924, 934, 927, 926,
- 933, 0, 937, 934, 930, 938, 939, 933, 932, 936,
- 936, 940, 941, 940, 0, 962, 929, 938, 944, 960,
- 0, 946, 988, 0, 934, 937, 946, 933, 935, 937,
- 935, 942, 938, 939, 935, 941, 935, 943, 940, 941,
- 944, 935, 962, 942, 947, 944, 935, 945, 966, 988,
- 943, 960, 935, 946, 948, 935, 966, 935, 942, 0,
- 945, 935, 947, 935, 943, 949, 950, 948, 935, 951,
-
- 952, 947, 953, 935, 945, 966, 954, 949, 950, 951,
- 955, 948, 956, 957, 958, 952, 955, 961, 949, 954,
- 959, 951, 949, 950, 953, 956, 951, 952, 964, 953,
- 969, 957, 970, 954, 949, 958, 951, 955, 965, 956,
- 957, 958, 959, 965, 967, 969, 974, 959, 971, 961,
- 0, 972, 0, 967, 970, 973, 978, 969, 0, 970,
- 964, 971, 979, 0, 978, 965, 972, 975, 974, 976,
- 979, 967, 968, 974, 977, 971, 981, 968, 972, 968,
- 976, 973, 973, 978, 980, 968, 975, 977, 982, 979,
- 968, 968, 983, 984, 975, 980, 976, 968, 968, 968,
-
- 986, 977, 984, 985, 968, 989, 968, 983, 981, 986,
- 982, 980, 968, 987, 985, 982, 990, 968, 968, 983,
- 984, 992, 987, 990, 968, 993, 0, 986, 989, 994,
- 985, 996, 989, 995, 997, 998, 999, 994, 1004, 0,
- 987, 1001, 0, 990, 999, 996, 1002, 1005, 0, 993,
- 1003, 0, 993, 992, 1007, 995, 994, 998, 996, 1001,
- 995, 1003, 998, 999, 1002, 1005, 997, 1006, 1001, 1009,
- 1004, 1008, 1010, 1002, 1005, 1006, 1007, 1003, 1008, 1010,
- 1011, 1007, 1009, 1012, 1013, 1014, 1016, 1015, 0, 1018,
- 1020, 0, 1034, 0, 1006, 1011, 1009, 1015, 1008, 1010,
-
- 1018, 1012, 1013, 1020, 1022, 1023, 1014, 1011, 1021, 1024,
- 1012, 1013, 1014, 1023, 1015, 1021, 1018, 1020, 1016, 1025,
- 1027, 1026, 1024, 1028, 1034, 1032, 1022, 1031, 1025, 1033,
- 0, 1022, 1023, 1026, 0, 1021, 1024, 1037, 0, 1035,
- 0, 1036, 1027, 1032, 1050, 1028, 1025, 1027, 1026, 1031,
- 1028, 1037, 1032, 1036, 1031, 1033, 1033, 1035, 1039, 1043,
- 1040, 1044, 1046, 1047, 1037, 1040, 1035, 1042, 1036, 1039,
- 1042, 1045, 1047, 1046, 1044, 1049, 1050, 1048, 1045, 1052,
- 0, 1057, 0, 1043, 0, 1039, 1043, 1049, 1044, 1046,
- 1047, 1048, 1040, 1042, 1042, 1053, 1051, 1042, 1045, 1054,
-
- 1055, 1062, 1049, 1051, 1048, 1057, 1058, 1053, 1057, 1059,
- 1060, 1052, 1058, 1055, 1061, 1065, 1063, 1064, 1070, 1062,
- 1071, 1054, 1053, 1051, 1067, 1061, 1054, 1055, 1062, 1068,
- 1065, 1059, 1060, 1058, 1069, 1072, 1059, 1060, 1063, 1064,
- 1068, 1061, 1065, 1063, 1064, 1067, 1074, 1071, 1073, 1076,
- 1070, 1067, 1075, 1072, 1080, 1069, 1068, 1073, 1076, 1077,
- 1079, 1069, 1072, 1081, 1078, 1082, 1083, 1077, 1080, 1085,
- 1074, 1078, 1084, 1074, 1087, 1073, 1076, 0, 1075, 1075,
- 1086, 1080, 1089, 1090, 1079, 1092, 1077, 1079, 1083, 1091,
- 0, 1078, 1090, 1083, 1084, 1081, 1091, 1082, 1093, 1084,
-
- 1094, 1085, 1086, 1095, 1089, 1096, 1087, 1086, 1101, 1089,
- 1090, 1098, 1099, 1097, 1104, 1106, 1091, 1092, 1100, 1098,
- 1093, 1095, 1097, 1096, 1101, 1093, 1102, 1094, 1103, 1104,
- 1095, 1107, 1096, 1110, 1108, 1101, 1099, 1103, 1098, 1099,
- 1097, 1104, 1100, 1105, 1109, 1100, 1108, 1106, 1102, 1111,
- 1114, 1105, 1112, 1102, 1113, 1103, 1117, 1111, 1116, 1114,
- 1110, 1108, 1122, 1107, 1118, 1112, 1109, 1116, 1123, 1113,
- 1105, 1109, 1118, 1119, 1117, 1119, 1111, 1114, 1121, 1112,
- 1124, 1113, 1125, 1117, 1129, 1116, 1121, 1123, 1128, 1122,
- 1126, 1118, 1131, 1130, 1132, 1123, 1129, 1126, 1133, 1134,
-
- 1119, 1128, 1124, 1135, 1125, 1121, 1134, 1124, 1130, 1125,
- 1136, 1129, 1132, 1137, 1131, 1128, 1138, 1126, 0, 1131,
- 1130, 1132, 1139, 1140, 1137, 1133, 1134, 1144, 1141, 1143,
- 0, 1142, 0, 0, 1147, 1135, 1150, 1146, 1138, 1144,
- 1137, 1141, 1136, 1138, 1142, 1140, 1147, 1139, 1154, 1139,
- 1140, 1143, 1145, 1151, 1144, 1141, 1143, 1146, 1142, 1148,
- 1145, 1147, 1152, 1150, 1146, 1153, 1151, 1148, 0, 1154,
- 1158, 1152, 1159, 1156, 1155, 1154, 1161, 1153, 0, 1145,
- 1151, 1155, 1156, 1160, 1156, 0, 1148, 1156, 1162, 1152,
- 1168, 1163, 1153, 1158, 1165, 1156, 1164, 1158, 1159, 1159,
-
- 1156, 1155, 1165, 1161, 1163, 1160, 1167, 1166, 1162, 1156,
- 1160, 1156, 1168, 1170, 1156, 1162, 1166, 1168, 1163, 1169,
- 1164, 1165, 1171, 1164, 1167, 1172, 1173, 1169, 1170, 1174,
- 1176, 0, 1177, 1167, 1166, 0, 1178, 1174, 1172, 1180,
- 1170, 1179, 1173, 0, 1171, 0, 1169, 1181, 1179, 1171,
- 1183, 1182, 1172, 1173, 1177, 1184, 1174, 1176, 1178, 1177,
- 1186, 1180, 1183, 1178, 1185, 1188, 1180, 1184, 1179, 1182,
- 1181, 1187, 1185, 1189, 1181, 1186, 1190, 1183, 1182, 1195,
- 1191, 1192, 1184, 1187, 1190, 1188, 1191, 1186, 1189, 1193,
- 1192, 1185, 1188, 1194, 1196, 1197, 1198, 1199, 1187, 0,
-
- 1189, 1196, 1197, 1190, 1200, 1194, 1204, 1191, 1192, 1199,
- 1193, 1195, 1200, 1201, 1198, 1205, 1193, 1202, 1204, 1206,
- 1194, 1196, 1197, 1198, 1199, 1202, 1206, 1203, 1201, 1203,
- 1208, 1200, 1210, 1204, 1211, 0, 1209, 1215, 1214, 1213,
- 1201, 0, 1212, 1219, 1202, 1210, 1206, 1205, 1209, 1212,
- 1213, 1216, 1215, 1211, 1203, 1218, 1216, 1219, 1220, 1210,
- 1214, 1211, 1208, 1209, 1215, 1214, 1213, 1217, 1218, 1212,
- 1219, 1223, 1224, 1222, 1226, 1217, 1228, 0, 0, 1225,
- 1237, 0, 1218, 1216, 1220, 1220, 0, 1222, 1229, 1223,
- 0, 1227, 1230, 0, 1217, 1221, 1226, 1231, 1223, 1221,
-
- 1222, 1226, 1221, 1221, 1224, 1225, 1225, 1221, 1228, 1227,
- 1229, 1233, 1237, 1221, 1230, 1229, 1243, 1221, 1227, 1230,
- 1235, 1221, 1221, 1231, 1231, 1232, 1221, 1235, 1238, 1221,
- 1221, 1232, 1236, 1234, 1221, 1234, 1239, 1233, 1233, 1240,
- 1221, 1236, 1242, 1239, 1221, 1241, 1238, 1235, 1243, 1244,
- 1246, 1242, 1232, 1245, 0, 1238, 1248, 1234, 1241, 1236,
- 1234, 1240, 1234, 1239, 0, 1254, 1240, 0, 1250, 1242,
- 0, 1249, 1241, 1246, 1252, 1245, 1256, 1246, 1248, 0,
- 1245, 1244, 1247, 1248, 1249, 1256, 1257, 1247, 1254, 1247,
- 1252, 1247, 1254, 1247, 1250, 1250, 1251, 1251, 1249, 1255,
-
- 1247, 1252, 1258, 1256, 1257, 1259, 1261, 1258, 1262, 1247,
- 1260, 1255, 1263, 1257, 1247, 1260, 1247, 1267, 1247, 1264,
- 1247, 1262, 0, 1259, 1268, 1251, 1255, 1264, 1261, 1266,
- 1263, 0, 1259, 1261, 1258, 1262, 1265, 1260, 1269, 1263,
- 1270, 1272, 1266, 1273, 1265, 0, 1264, 1271, 1278, 1267,
- 1268, 1268, 1274, 1270, 1272, 1275, 1266, 1269, 1276, 1277,
- 1276, 1273, 1280, 1265, 1275, 1269, 1279, 1270, 1272, 1271,
- 1273, 1281, 1274, 1283, 1271, 1278, 1285, 1284, 1279, 1274,
- 1287, 1277, 1275, 1286, 1285, 1276, 1277, 1288, 1289, 1280,
- 1290, 1291, 1294, 1279, 1288, 0, 1281, 1283, 1281, 1284,
-
- 1283, 1286, 1292, 1285, 1284, 1293, 1297, 1287, 1292, 1299,
- 1286, 1293, 1296, 1291, 1288, 1289, 1290, 1290, 1291, 1294,
- 1295, 1298, 1296, 1300, 1301, 1303, 1306, 1295, 1298, 1292,
- 1297, 1302, 1293, 1297, 1303, 1305, 1308, 1312, 1306, 1296,
- 0, 1299, 1301, 1307, 1309, 1300, 0, 1295, 1298, 1308,
- 1300, 1301, 1303, 1306, 1310, 1311, 1302, 1313, 1302, 1305,
- 1314, 1312, 1305, 1308, 1312, 1307, 1309, 1315, 1318, 1316,
- 1307, 1309, 1317, 1310, 1321, 1322, 1319, 1311, 1316, 1313,
- 1325, 1310, 1311, 1323, 1313, 0, 1314, 1314, 1318, 1315,
- 1319, 1324, 1327, 1317, 1315, 1318, 1316, 1326, 1328, 1317,
-
- 1327, 1329, 1330, 1319, 1332, 1323, 1321, 1322, 1333, 1330,
- 1323, 1335, 1325, 1324, 1328, 1326, 1334, 1333, 1324, 1327,
- 1336, 1338, 1339, 1335, 1326, 1328, 1332, 1336, 1329, 1330,
- 1337, 1332, 0, 1334, 1337, 1333, 1342, 1340, 1335, 1343,
- 1346, 0, 1344, 1334, 1345, 1343, 1347, 1336, 1349, 1344,
- 0, 1345, 1343, 1338, 1339, 1346, 1348, 1337, 1340, 1347,
- 1351, 1354, 1351, 1350, 1340, 1348, 1343, 1346, 1342, 1344,
- 1350, 1345, 1343, 1347, 1349, 1349, 1352, 1353, 1355, 1356,
- 1361, 1358, 1355, 1348, 1360, 1352, 1359, 1351, 1354, 1358,
- 1350, 1359, 0, 1360, 1362, 1368, 1363, 1367, 1361, 1353,
-
- 1364, 1356, 1371, 1352, 1353, 1355, 1356, 1361, 1358, 1363,
- 1372, 1360, 1364, 1362, 1365, 1367, 1366, 1365, 1359, 1366,
- 1368, 1362, 1368, 1363, 1367, 1374, 1365, 1364, 1375, 1369,
- 1374, 1373, 1392, 1372, 1371, 0, 1375, 1372, 1366, 1376,
- 1376, 1365, 1369, 1366, 1365, 1377, 1366, 1373, 1378, 1379,
- 1380, 1382, 1385, 1381, 1377, 1375, 1369, 1374, 1373, 1380,
- 1381, 1383, 1389, 0, 1392, 1385, 1376, 1388, 1383, 0,
- 1378, 1379, 1377, 1382, 1386, 1378, 1379, 1380, 1382, 1385,
- 1381, 1387, 1390, 1386, 1391, 1389, 1395, 1393, 1383, 1389,
- 1387, 1390, 1391, 1388, 1388, 1394, 1398, 1399, 1396, 1395,
-
- 1397, 1386, 1393, 1394, 1398, 0, 1400, 1401, 1387, 1390,
- 1396, 1391, 1397, 1395, 1393, 1405, 1406, 1404, 1407, 1399,
- 1409, 1402, 1394, 1398, 1399, 1396, 1400, 1397, 1406, 1401,
- 1402, 1403, 1408, 1400, 1401, 1404, 1407, 1403, 1410, 1408,
- 1411, 1405, 1405, 1406, 1404, 1407, 1409, 1409, 1402, 1412,
- 0, 1413, 1414, 1415, 1416, 1417, 1419, 1420, 1403, 1408,
- 1421, 1417, 1412, 1418, 1425, 1416, 0, 1422, 0, 1423,
- 1410, 0, 1411, 1430, 1415, 1426, 1412, 1413, 1413, 1414,
- 1415, 1416, 1417, 1427, 1429, 1418, 1430, 1432, 1419, 1420,
- 1418, 1425, 1421, 1422, 1422, 1423, 1423, 1428, 1426, 1429,
-
- 1430, 1427, 1426, 1431, 0, 1433, 1428, 1432, 1435, 1434,
- 1427, 1429, 1436, 1437, 1432, 1431, 1434, 1438, 1439, 1442,
- 1450, 0, 1441, 1439, 1428, 1438, 1437, 1435, 1440, 1441,
- 1431, 1433, 1433, 1440, 1436, 1435, 1434, 1446, 1445, 1436,
- 1437, 1448, 0, 1443, 1438, 1442, 1442, 1444, 1448, 1441,
- 1439, 1443, 1450, 1447, 1449, 1444, 1445, 1451, 1454, 1446,
- 1440, 1447, 1452, 1449, 1446, 1445, 1453, 1453, 1448, 1452,
- 1443, 1456, 1457, 1464, 1444, 1455, 1463, 0, 1458, 1451,
- 1447, 1449, 1463, 1455, 1451, 1464, 1458, 1459, 1460, 1452,
- 1454, 1461, 1456, 1453, 1462, 1459, 1460, 1465, 1456, 1461,
-
- 1464, 1466, 1455, 1463, 1457, 1458, 1470, 1462, 1467, 1468,
- 1471, 1469, 1472, 1474, 1459, 1460, 1467, 1468, 1461, 1473,
- 1486, 1462, 1479, 1465, 1465, 1466, 1469, 1474, 1466, 1475,
- 1476, 1479, 1480, 1470, 1472, 1467, 1468, 1471, 1469, 1472,
- 1474, 1477, 1473, 1481, 1476, 1477, 1473, 1475, 1484, 1479,
- 1483, 1485, 1486, 1482, 1480, 1481, 1475, 1476, 1477, 1480,
- 1482, 1483, 1487, 0, 1489, 1488, 1477, 1490, 1477, 1494,
- 1481, 1497, 1477, 1485, 1487, 1484, 1491, 1483, 1485, 1488,
- 1482, 1492, 1496, 1502, 1493, 1477, 1489, 1494, 1492, 1487,
- 1490, 1489, 1488, 1493, 1490, 1495, 1494, 1499, 1497, 1491,
-
- 1503, 1501, 1495, 1491, 1504, 1502, 1499, 1501, 1492, 0,
- 1502, 1493, 1505, 1507, 1496, 1510, 1516, 1509, 1511, 1505,
- 1512, 0, 1495, 1516, 1499, 1514, 1503, 1503, 1501, 1511,
- 1517, 1512, 1515, 0, 1519, 1567, 1504, 0, 1515, 1505,
- 1507, 1509, 1510, 1516, 1509, 1511, 1518, 1512, 1517, 1514,
- 1520, 0, 1514, 1518, 1523, 1522, 1524, 1517, 1521, 1515,
- 1519, 1519, 1520, 1522, 1521, 1525, 1526, 1567, 1528, 1524,
- 1527, 1530, 1529, 1518, 1529, 1531, 1523, 1520, 1530, 1527,
- 1528, 1523, 1522, 1524, 1526, 1521, 1534, 1532, 1536, 0,
- 0, 1525, 1525, 1526, 1533, 1528, 1537, 1527, 1530, 1529,
-
- 1532, 1531, 1531, 1533, 1535, 1538, 0, 1539, 1534, 1542,
- 1541, 1547, 1538, 1534, 1532, 1536, 1535, 1540, 1541, 1537,
- 1543, 1533, 1540, 1537, 1545, 1542, 1548, 1544, 1549, 1551,
- 1550, 1535, 1538, 1539, 1539, 1544, 1542, 1541, 1547, 1552,
- 1551, 0, 1549, 1543, 1540, 1553, 1545, 1543, 1552, 1555,
- 1548, 1545, 1550, 1548, 1544, 1549, 1551, 1550, 1553, 1554,
- 1554, 1556, 1555, 1556, 1557, 0, 1552, 1554, 1559, 1561,
- 1558, 1560, 1553, 1564, 0, 1559, 1555, 1565, 1560, 1563,
- 1564, 1562, 1568, 1566, 1569, 1572, 1554, 1554, 1556, 1568,
- 1557, 1557, 1558, 1574, 1571, 1559, 1561, 1558, 1560, 1562,
-
- 1564, 1563, 1565, 1573, 1565, 1566, 1563, 1571, 1562, 1568,
- 1566, 1573, 1572, 1576, 1574, 1577, 1569, 1578, 1577, 1579,
- 1574, 1571, 1581, 1580, 1583, 1582, 0, 1584, 1589, 1585,
- 1573, 1581, 1586, 0, 1587, 1576, 1580, 1582, 1585, 1593,
- 1576, 1587, 1577, 1578, 1578, 1579, 1579, 1586, 1583, 1581,
- 1580, 1583, 1582, 1584, 1584, 1588, 1585, 1593, 1588, 1586,
- 1589, 1587, 1590, 1597, 1591, 1594, 1593, 1595, 1598, 1595,
- 1588, 1596, 1599, 1603, 1600, 0, 1601, 0, 0, 1588,
- 1591, 0, 1588, 1602, 1590, 1588, 1604, 1594, 1591, 1590,
- 1597, 1591, 1594, 1610, 1595, 1596, 1600, 1588, 1596, 1609,
-
- 1598, 1600, 1601, 1601, 1599, 1603, 1605, 1591, 1604, 1602,
- 1602, 1607, 1606, 1604, 1611, 1608, 1613, 1616, 1612, 1607,
- 1605, 1606, 1608, 1609, 1614, 1610, 1609, 1615, 1614, 1619,
- 1617, 0, 1618, 1605, 1622, 1620, 1619, 1623, 1607, 1606,
- 1612, 1618, 1608, 1620, 1616, 1612, 1611, 1622, 1613, 1615,
- 1623, 1614, 1617, 1621, 1615, 1624, 1619, 1617, 1625, 1618,
- 1621, 1622, 1620, 1626, 1623, 1626, 1627, 1625, 1624, 1628,
- 1629, 1630, 1632, 1633, 1635, 1637, 1636, 1638, 1629, 0,
- 1621, 1634, 1624, 1636, 1638, 1625, 1637, 1632, 1633, 1627,
- 1626, 1630, 1639, 1627, 1628, 1634, 1628, 1629, 1630, 1632,
-
- 1633, 1640, 1637, 1636, 1638, 1639, 1635, 1640, 1634, 1642,
- 1643, 1644, 1645, 0, 1646, 1650, 1648, 1643, 1647, 1639,
- 1649, 0, 1652, 1649, 1650, 0, 1651, 1645, 1640, 1648,
- 1647, 1653, 1654, 1644, 1652, 1654, 1642, 1643, 1644, 1645,
- 1646, 1646, 1650, 1648, 1651, 1647, 1655, 1649, 1660, 1652,
- 1654, 1653, 1659, 1651, 1659, 1657, 1661, 1655, 1653, 1654,
- 1657, 1662, 1654, 1663, 1666, 1664, 0, 1657, 1668, 1665,
- 1667, 0, 1660, 1655, 1664, 1660, 1668, 1669, 1663, 1659,
- 1671, 1670, 1657, 1661, 1667, 1674, 1672, 1657, 1662, 1673,
- 1663, 1666, 1664, 1665, 1672, 1668, 1665, 1667, 1675, 1669,
-
- 1673, 1677, 1671, 1674, 1669, 1670, 1675, 1671, 1670, 1679,
- 1678, 1676, 1674, 1672, 1676, 0, 1673, 1680, 1681, 1677,
- 1683, 1682, 1685, 1684, 1680, 1675, 0, 1685, 1677, 1676,
- 1682, 1686, 1681, 1683, 1684, 1692, 1679, 1687, 1676, 1694,
- 0, 1676, 1678, 1695, 1680, 1681, 1691, 1683, 1682, 1690,
- 1684, 1690, 1687, 1686, 1685, 1691, 1693, 1694, 1686, 0,
- 1696, 1692, 1692, 0, 1687, 1695, 1694, 1693, 1699, 1698,
- 1695, 1701, 1697, 1691, 1696, 1697, 1690, 1699, 1700, 1704,
- 1701, 1708, 1705, 1693, 1700, 1707, 1696, 1696, 1702, 1710,
- 1697, 1698, 1704, 1702, 1705, 1699, 1698, 1711, 1701, 1697,
-
- 1712, 1696, 1697, 1706, 1713, 1700, 1704, 1707, 1706, 1705,
- 1709, 1714, 1707, 1708, 1715, 1718, 1710, 1713, 1717, 1709,
- 1702, 1719, 1712, 1722, 1720, 1717, 0, 1712, 1718, 1711,
- 1706, 1713, 0, 1721, 1729, 1715, 1726, 1709, 1720, 1721,
- 1724, 1715, 1718, 1714, 1726, 1717, 1727, 1730, 1731, 1728,
- 1733, 1720, 1732, 1719, 1727, 1722, 1729, 1721, 1734, 1724,
- 1721, 1729, 1731, 1726, 1733, 1730, 1721, 1724, 1728, 1735,
- 1732, 1734, 1736, 1727, 1730, 1731, 1728, 1733, 1737, 1732,
- 1738, 1739, 1735, 0, 1740, 1734, 1744, 1741, 1742, 1745,
- 1743, 1746, 1749, 1736, 1741, 1739, 1735, 1742, 1743, 1736,
-
- 1747, 1749, 1751, 1745, 1754, 1747, 0, 1748, 1739, 1753,
- 1737, 1740, 1738, 1744, 1741, 1742, 1745, 1743, 1748, 1749,
- 1736, 1752, 1756, 1746, 1757, 1758, 1754, 1747, 1752, 1751,
- 1755, 1754, 1753, 1765, 1748, 1759, 1753, 1755, 1761, 1759,
- 1762, 1764, 1763, 1758, 1756, 1765, 1757, 1766, 1752, 1756,
- 1770, 1757, 1758, 1767, 1761, 1768, 1764, 1755, 1762, 1771,
- 1765, 1767, 1759, 1769, 1772, 1761, 1763, 1762, 1764, 1763,
- 1768, 1769, 1771, 1773, 1766, 1776, 1778, 1770, 1774, 1779,
- 1767, 1788, 1768, 1776, 1772, 1777, 1771, 1780, 1773, 1781,
- 1769, 1772, 1777, 1774, 1779, 1782, 1780, 1783, 1784, 1787,
-
- 1773, 1786, 1776, 1789, 1790, 1774, 1779, 1791, 1778, 1792,
- 1781, 1793, 1777, 1788, 1780, 1794, 1781, 1787, 1793, 1790,
- 1794, 1783, 1782, 1786, 1783, 1784, 1787, 1797, 1786, 1798,
- 1789, 1790, 1791, 1792, 1791, 1795, 1792, 1796, 1793, 1799,
- 1800, 1801, 1794, 1802, 1795, 1803, 1796, 1808, 1809, 1797,
- 0, 1798, 1804, 1801, 1797, 1800, 1798, 1799, 1803, 1804,
- 1806, 1807, 1795, 1803, 1796, 1802, 1799, 1800, 1801, 1805,
- 1802, 1810, 1803, 1807, 1808, 1812, 1805, 1810, 1813, 1804,
- 1809, 1814, 1806, 1812, 1816, 1803, 1813, 1806, 1807, 1818,
- 1815, 1805, 1814, 1817, 1819, 1817, 1805, 1815, 1810, 1820,
-
- 1821, 1822, 1812, 1805, 1823, 1813, 1817, 1821, 1814, 1816,
- 1826, 1816, 1824, 1825, 1829, 1818, 1818, 1815, 1824, 1825,
- 1817, 1819, 1817, 1827, 1828, 1831, 1820, 1821, 1822, 1833,
- 1823, 1823, 1834, 1832, 0, 1837, 1839, 1826, 1829, 1824,
- 1825, 1829, 1832, 1835, 1836, 1835, 1827, 1840, 1838, 1847,
- 1827, 1843, 1841, 1865, 1834, 1838, 1828, 1831, 1839, 1834,
- 1832, 1833, 1837, 1839, 1841, 1844, 1842, 1846, 1836, 1845,
- 1835, 1836, 1842, 1843, 1840, 1838, 1852, 0, 1843, 1841,
- 1865, 1847, 1850, 1848, 1848, 1848, 0, 1844, 1856, 1846,
- 1848, 1850, 1844, 1842, 1846, 1845, 1845, 1849, 1848, 1851,
-
- 1853, 1856, 1857, 1858, 1849, 1859, 1851, 1853, 1852, 1850,
- 1848, 1848, 1848, 1855, 1857, 1856, 1861, 1848, 1855, 1860,
- 1862, 1859, 1866, 1866, 1849, 1867, 1851, 1853, 1858, 1857,
- 1858, 1860, 1859, 1863, 1869, 1864, 1868, 1871, 1862, 1869,
- 1863, 1864, 1870, 1868, 1875, 1855, 1860, 1862, 1861, 1866,
- 1872, 1867, 1867, 1876, 1877, 1876, 1879, 1872, 1881, 1880,
- 1863, 1869, 1864, 1868, 1871, 1880, 1883, 1882, 1870, 1870,
- 1884, 1875, 1877, 1885, 1879, 1886, 1884, 1872, 1882, 1893,
- 1876, 1877, 1889, 1879, 1894, 1885, 1880, 1887, 1888, 1888,
- 1881, 1890, 1890, 1883, 1882, 1886, 1891, 1884, 1902, 1896,
-
- 1885, 1893, 1886, 1895, 1897, 1887, 1893, 1891, 1889, 1889,
- 1895, 1901, 1898, 1900, 1887, 1888, 1894, 1904, 1890, 1896,
- 1903, 1900, 1905, 1891, 1906, 1902, 1896, 1911, 1908, 1905,
- 1895, 1907, 1906, 1910, 1910, 1904, 1897, 1898, 1912, 1898,
- 1900, 1909, 1903, 1901, 1904, 1913, 1907, 1903, 1916, 1905,
- 1909, 1906, 1908, 1911, 1911, 1908, 1914, 1915, 1907, 1918,
- 1910, 1921, 1919, 1914, 1916, 1920, 1918, 1919, 1909, 1915,
- 1912, 1916, 1922, 1923, 1925, 1916, 1928, 1913, 1927, 1926,
- 1922, 1940, 1925, 1914, 1915, 1923, 1918, 1920, 1921, 1919,
- 1929, 1916, 1920, 1930, 1933, 1931, 0, 1928, 1935, 1922,
-
- 1923, 1925, 1926, 1928, 1927, 1927, 1926, 1932, 1929, 1934,
- 1937, 1935, 1932, 1940, 1945, 1934, 1936, 1929, 1931, 1938,
- 1930, 1933, 1931, 1932, 1936, 1935, 1938, 1943, 1939, 1941,
- 1942, 1944, 1937, 1946, 1932, 1939, 1934, 1937, 1941, 1932,
- 1947, 1945, 1942, 1936, 1949, 1944, 1938, 1952, 1950, 1943,
- 1954, 1956, 1958, 1950, 1943, 1939, 1941, 1942, 1944, 1946,
- 1946, 1951, 1949, 1947, 1950, 1955, 1961, 1947, 1951, 1960,
- 1955, 1949, 1959, 1959, 1952, 1950, 1962, 1954, 1965, 1964,
- 1950, 1961, 1972, 1956, 1958, 1966, 1969, 1967, 1951, 1971,
- 1968, 1960, 1968, 1961, 1964, 1987, 1960, 1955, 1970, 1959,
-
- 1966, 1965, 1973, 1970, 1974, 1965, 1964, 1976, 1962, 1972,
- 1973, 1974, 1966, 1967, 1967, 1975, 1979, 1968, 1969, 1980,
- 1978, 1971, 1976, 0, 1979, 1970, 1982, 1987, 1983, 1973,
- 1984, 1974, 1985, 1986, 1976, 1978, 1989, 1975, 0, 0,
- 1986, 1980, 1975, 1979, 1988, 1990, 1980, 1978, 1993, 1991,
- 1982, 0, 1997, 1982, 1983, 1983, 1995, 1984, 1989, 1985,
- 1986, 0, 1996, 1989, 2001, 1988, 1990, 1991, 2002, 1999,
- 1993, 1988, 1990, 2000, 2003, 1993, 1991, 1996, 1997, 1997,
- 1995, 2004, 2005, 1995, 1999, 2007, 2001, 2006, 2000, 1996,
- 2008, 2001, 2003, 2010, 0, 2002, 1999, 2008, 2009, 2011,
-
- 2000, 2003, 2010, 2004, 2005, 2012, 2014, 2011, 2004, 2005,
- 2015, 2006, 2007, 2013, 2006, 2016, 2009, 2008, 2017, 2015,
- 2010, 2018, 2021, 0, 2024, 2009, 2011, 2017, 2012, 0,
- 2020, 2021, 2012, 2016, 2018, 2013, 2022, 2015, 2014, 2023,
- 2013, 2020, 2016, 2025, 2026, 2017, 2023, 2027, 2018, 2021,
- 2024, 2024, 2032, 2027, 2022, 2028, 2020, 2020, 2029, 2026,
- 2034, 2025, 2035, 2022, 2036, 2039, 2023, 2040, 2020, 2038,
- 2025, 2026, 2029, 2035, 2027, 2036, 2041, 2028, 2039, 2032,
- 2042, 2038, 2028, 2043, 2034, 2029, 2041, 2034, 2044, 2035,
- 2045, 2036, 2039, 2046, 2048, 2052, 2038, 2044, 2049, 2040,
-
- 2051, 2053, 0, 2041, 2051, 2054, 2042, 2042, 2043, 2055,
- 2043, 2058, 2046, 2059, 2056, 2044, 2052, 2045, 2054, 2056,
- 2046, 2048, 2052, 2057, 2049, 2049, 0, 2051, 2060, 2055,
- 2057, 2059, 2054, 2053, 2060, 2063, 2055, 2058, 2058, 2061,
- 2059, 2056, 2062, 2064, 2065, 2065, 2067, 2063, 2066, 2069,
- 2057, 2072, 0, 2071, 2061, 2060, 2069, 2062, 2064, 2067,
- 2066, 2070, 2063, 2073, 0, 2070, 2061, 2067, 2071, 2062,
- 2064, 2065, 2073, 2067, 2074, 2066, 2069, 2076, 2072, 2075,
- 2071, 2074, 2077, 2079, 2081, 0, 2067, 2080, 2070, 2077,
- 2073, 2082, 2089, 2081, 2092, 2083, 2090, 0, 2085, 2076,
-
- 0, 2074, 2088, 2075, 2076, 2079, 2075, 2089, 2087, 2077,
- 2079, 2081, 2080, 2082, 2080, 2083, 2085, 2087, 2082, 2089,
- 2088, 2090, 2083, 2090, 2091, 2085, 2092, 2094, 2095, 2088,
- 2096, 2098, 2091, 2097, 2097, 2087, 2099, 2100, 2102, 2103,
- 2101, 2095, 2104, 0, 2108, 0, 2103, 2102, 2105, 2108,
- 2109, 2091, 2094, 2098, 2094, 2095, 2107, 2096, 2098, 2100,
- 2097, 2099, 2101, 2099, 2100, 2102, 2103, 2101, 2106, 2109,
- 2105, 2107, 2111, 2112, 2104, 2105, 2108, 2109, 2113, 2115,
- 2111, 2114, 2106, 2107, 2117, 2116, 2112, 2118, 2119, 0,
- 2122, 2115, 2116, 2120, 0, 2106, 0, 2124, 0, 2111,
-
- 2112, 2125, 2120, 2121, 2123, 2113, 2115, 2114, 2114, 2118,
- 2127, 2121, 2116, 2119, 2118, 2119, 2117, 2122, 2126, 2123,
- 2120, 2131, 2121, 2124, 2124, 2128, 2130, 2125, 2125, 2130,
- 2121, 2123, 2127, 2132, 2128, 2133, 2126, 2127, 2121, 2132,
- 2133, 2135, 2134, 2136, 2130, 2126, 2131, 2138, 2131, 2139,
- 2140, 2142, 2128, 2130, 2143, 2144, 2130, 2134, 2136, 2135,
- 2132, 2143, 2138, 2145, 0, 2142, 2146, 2133, 2135, 2134,
- 2136, 2139, 2140, 2144, 2138, 2146, 2139, 2140, 2142, 2147,
- 2148, 2143, 2144, 2149, 2150, 2149, 2151, 2152, 2147, 2154,
- 2145, 2148, 2156, 2146, 2159, 2157, 2158, 2150, 2151, 2156,
-
- 2155, 2165, 0, 2164, 2154, 2165, 2147, 2148, 2180, 2152,
- 2149, 2150, 2159, 2151, 2152, 2155, 2154, 2157, 2158, 2156,
- 2162, 2159, 2157, 2158, 2164, 2166, 2167, 2155, 2165, 2168,
- 2164, 2168, 2169, 2162, 2170, 2167, 2171, 2166, 2172, 2173,
- 2180, 2162, 2176, 2174, 2175, 2183, 2184, 2162, 2173, 2179,
- 2169, 2174, 2166, 2167, 2171, 2190, 2168, 2179, 2177, 2169,
- 2162, 2170, 2185, 2171, 2176, 2172, 2173, 2175, 2181, 2176,
- 2174, 2175, 2177, 2181, 2182, 2186, 2179, 2183, 2184, 2182,
- 2187, 0, 2190, 2191, 0, 2177, 2185, 2187, 2193, 2185,
- 2194, 2196, 2198, 2192, 2186, 2181, 2197, 2191, 2195, 2200,
-
- 2196, 2202, 2186, 2199, 2241, 2201, 2182, 2187, 2191, 2191,
- 2191, 2192, 0, 2195, 2198, 2193, 2194, 2194, 2196, 2198,
- 2192, 2204, 2206, 0, 2191, 2195, 2200, 2201, 2197, 2199,
- 2199, 2205, 2201, 2202, 2207, 2191, 2241, 2209, 2205, 2209,
- 2210, 2207, 2211, 2212, 2204, 2206, 2211, 2214, 2204, 2206,
- 2213, 2217, 2215, 2216, 2218, 2212, 2214, 2219, 2205, 2218,
- 2216, 2207, 2210, 2215, 2209, 2220, 2230, 2210, 2222, 2211,
- 2212, 2221, 2213, 2217, 2214, 2223, 2223, 2213, 2217, 2215,
- 2216, 2218, 2224, 2221, 2219, 2225, 2226, 2228, 2220, 2227,
- 2222, 2224, 2220, 2230, 2226, 2222, 2229, 0, 2221, 2232,
-
- 2225, 2228, 2223, 2236, 2235, 2229, 2236, 2233, 2235, 2224,
- 2245, 2227, 2225, 2226, 2228, 2233, 2227, 2234, 2232, 2237,
- 2239, 2243, 2238, 2229, 2245, 2234, 2232, 2237, 2238, 2246,
- 2236, 2235, 2240, 2243, 2233, 2239, 2247, 2245, 2240, 2248,
- 2250, 2252, 2246, 2249, 2234, 2254, 2237, 2239, 2243, 2238,
- 2249, 2251, 0, 2256, 2257, 2253, 2246, 2247, 2254, 2240,
- 2255, 2258, 2259, 2247, 2248, 2252, 2248, 2250, 2252, 2253,
- 2249, 2260, 2254, 2251, 2255, 2262, 2261, 2264, 2251, 2256,
- 2256, 2257, 2253, 2260, 2265, 2266, 2258, 2255, 2258, 2259,
- 2261, 2263, 2268, 2269, 2263, 2271, 2272, 2273, 2260, 2270,
-
- 2269, 2262, 2262, 2261, 2264, 2274, 2270, 2266, 2275, 2263,
- 2271, 2265, 2266, 2274, 2268, 2277, 2276, 2278, 2263, 2268,
- 2269, 2263, 2271, 2272, 2273, 2276, 2270, 2279, 2280, 2278,
- 2281, 2284, 2274, 2282, 2283, 2275, 2289, 2285, 2291, 2286,
- 2288, 2284, 2277, 2276, 2278, 2290, 2282, 2286, 2293, 2279,
- 2285, 2296, 2283, 2290, 2279, 2280, 2294, 2281, 2284, 2292,
- 2282, 2283, 2288, 2289, 2285, 2291, 2286, 2288, 2292, 2293,
- 2295, 2297, 2290, 2302, 2299, 2293, 2298, 2301, 2296, 2297,
- 2294, 2302, 2303, 2294, 2305, 2295, 2292, 2308, 2298, 2301,
- 2306, 2305, 2309, 2307, 2306, 2315, 2295, 2295, 2297, 2299,
-
- 2302, 2299, 2311, 2298, 2301, 2307, 2312, 2310, 2317, 2303,
- 2308, 2305, 2295, 2313, 2308, 2310, 2316, 2306, 2312, 2309,
- 2307, 2319, 2315, 2316, 2311, 2313, 2318, 2320, 2317, 2311,
- 2319, 2321, 2321, 2312, 2310, 2317, 2320, 2322, 2323, 2318,
- 2313, 2324, 2327, 2316, 2328, 2325, 0, 0, 2319, 0,
- 0, 2329, 0, 2318, 2320, 2330, 2323, 0, 2321, 2328,
- 2325, 2332, 2325, 2322, 2322, 2323, 2324, 2340, 2324, 2325,
- 2333, 2328, 2325, 2329, 2327, 2332, 2333, 2330, 2329, 2331,
- 2334, 2331, 2330, 2335, 2335, 0, 2337, 2325, 2332, 2325,
- 2338, 2339, 2341, 2343, 2342, 2344, 0, 2333, 2349, 2340,
-
- 2342, 2345, 2334, 2339, 2346, 2343, 2331, 2334, 2337, 2347,
- 2335, 2347, 2338, 2337, 2350, 2348, 2351, 2338, 2339, 2352,
- 2343, 2342, 2349, 2345, 2341, 2349, 2346, 2344, 2345, 2348,
- 2353, 2346, 2350, 2357, 2351, 2355, 2347, 2352, 2354, 2356,
- 0, 2350, 2348, 2351, 0, 2359, 2352, 2361, 2353, 2363,
- 2362, 2354, 2359, 2364, 2361, 2365, 2357, 2353, 0, 2371,
- 2357, 2366, 2368, 2365, 0, 2354, 2367, 2355, 2362, 0,
- 2371, 2356, 2359, 2373, 2361, 2363, 2363, 2362, 0, 2366,
- 2372, 2365, 2365, 2374, 2368, 2364, 2371, 2375, 2366, 2368,
- 2365, 2372, 2367, 2367, 2369, 2374, 2369, 2377, 2378, 2379,
-
- 2373, 2369, 2380, 2382, 2385, 2375, 2383, 2372, 2384, 2378,
- 2374, 2379, 2377, 2386, 2375, 2384, 2387, 2380, 2389, 2385,
- 2390, 2369, 2395, 2369, 2377, 2378, 2379, 2382, 2383, 2380,
- 2382, 2385, 2391, 2383, 2392, 2384, 2393, 2394, 2396, 2402,
- 2386, 0, 2387, 2387, 2390, 2389, 2397, 2390, 2398, 2395,
- 2400, 2396, 2401, 2406, 2391, 2394, 2399, 2403, 2400, 2391,
- 2404, 2407, 2408, 2398, 2394, 2396, 2392, 2414, 2393, 2399,
- 2403, 2402, 2397, 2397, 2409, 2398, 2406, 2400, 2401, 2401,
- 2406, 2410, 2404, 2399, 2403, 2407, 2411, 2404, 2407, 2408,
- 2412, 2413, 2415, 2417, 2414, 2418, 2409, 2412, 2419, 2410,
-
- 2421, 2409, 2418, 2420, 2411, 2419, 2415, 2423, 2410, 2424,
- 2425, 0, 2426, 2411, 2413, 2417, 2420, 2412, 2413, 2415,
- 2417, 2422, 2418, 2421, 2427, 2419, 2432, 2421, 2422, 2423,
- 2420, 2425, 2428, 2427, 2423, 2429, 2430, 2425, 2426, 2426,
- 2428, 2424, 2434, 2429, 2431, 2435, 2436, 2437, 2422, 2441,
- 2431, 2427, 0, 2432, 2444, 2438, 2435, 2434, 2430, 2428,
- 2439, 2451, 2429, 2430, 2443, 2445, 0, 2441, 2436, 2434,
- 2447, 2431, 2435, 2436, 2438, 2450, 2441, 2443, 2453, 2437,
- 2444, 2444, 2438, 2446, 2446, 2439, 2452, 2439, 2454, 2445,
- 2457, 2443, 2445, 2451, 2459, 2461, 2447, 2447, 2450, 0,
-
- 2462, 2452, 2450, 2459, 2465, 2453, 2454, 2468, 2461, 2470,
- 2446, 2462, 2472, 2452, 2467, 2454, 2469, 2457, 2466, 2466,
- 2467, 2459, 2461, 2474, 2475, 2477, 2465, 2462, 0, 2468,
- 2477, 2465, 2478, 2476, 2468, 0, 2470, 2481, 2469, 2472,
- 2480, 2467, 2482, 2469, 2476, 2466, 2484, 2483, 2480, 2487,
- 2475, 2475, 2477, 2486, 2478, 2474, 2488, 2482, 2489, 2478,
- 2476, 2481, 2483, 2491, 2481, 2488, 2494, 2480, 2492, 2482,
- 2489, 2486, 2496, 2484, 2483, 2494, 2493, 2497, 2498, 2499,
- 2486, 2487, 0, 2488, 2493, 2489, 2501, 2502, 2499, 2500,
- 2491, 0, 2492, 2494, 2507, 2492, 2503, 2504, 2496, 2496,
-
- 2498, 2507, 2505, 2493, 2497, 2498, 2499, 2500, 2501, 2503,
- 2504, 2506, 2502, 2501, 2502, 2508, 2500, 2505, 2509, 2510,
- 2511, 2507, 2508, 2503, 2504, 2512, 2513, 2515, 2514, 2505,
- 0, 2517, 2520, 2506, 2516, 2519, 2515, 2518, 2506, 2520,
- 2509, 2522, 2508, 2514, 0, 2509, 2510, 2511, 2522, 2524,
- 2519, 2521, 2512, 2513, 2515, 2514, 2516, 2517, 2517, 2520,
- 2524, 2516, 2519, 2518, 2518, 2523, 2521, 2525, 2522, 2526,
- 2527, 2523, 2528, 2529, 0, 2530, 2524, 2526, 2521, 2533,
- 2532, 2531, 2534, 2537, 2535, 2538, 2533, 2539, 0, 2529,
- 2530, 2535, 2523, 0, 2525, 2532, 2526, 2527, 2536, 2528,
-
- 2529, 2531, 2530, 2538, 2534, 2536, 2533, 2532, 2531, 2534,
- 2537, 2535, 2538, 2541, 2539, 2540, 2540, 2542, 2543, 2544,
- 2541, 2543, 2545, 2546, 2547, 2536, 2548, 2545, 0, 2549,
- 2554, 2542, 2544, 2555, 0, 2554, 0, 2555, 2556, 2547,
- 2541, 2558, 2540, 2550, 2542, 2543, 2544, 2549, 2546, 2545,
- 2546, 2547, 2548, 2548, 2551, 2550, 2549, 2554, 2553, 2557,
- 2555, 2559, 2556, 2558, 2560, 2556, 2551, 2553, 2558, 2561,
- 2550, 2562, 2557, 2564, 0, 2566, 2568, 2570, 2567, 0,
- 0, 2551, 2569, 2559, 2573, 2553, 2557, 2567, 2559, 2570,
- 2569, 2560, 2568, 2573, 0, 2578, 2561, 2562, 2562, 2564,
-
- 2564, 2566, 2566, 2568, 2570, 2567, 2572, 2574, 2575, 2569,
- 2576, 2573, 2574, 2572, 2577, 2575, 2579, 2580, 2581, 2584,
- 2578, 2577, 2578, 2579, 2582, 2585, 2580, 2581, 2576, 2587,
- 2588, 2586, 2591, 2572, 2574, 2575, 2586, 2576, 2585, 2592,
- 2593, 2577, 2590, 2579, 2580, 2581, 2584, 2587, 2592, 2593,
- 2582, 2582, 2585, 2594, 2596, 2597, 2587, 2588, 2586, 2591,
- 2590, 2598, 2595, 2596, 2597, 2600, 2592, 2593, 2599, 2590,
- 2601, 2602, 2598, 2594, 2595, 2605, 2599, 2603, 2604, 2607,
- 2594, 2596, 2597, 2608, 2603, 2600, 2609, 2604, 2598, 2595,
- 2610, 0, 2600, 2612, 2613, 2599, 2605, 2601, 2602, 2610,
-
- 2611, 2612, 2605, 2614, 2603, 2604, 2607, 2613, 2615, 2616,
- 2608, 2617, 2611, 2619, 2618, 2615, 2616, 2610, 2609, 2620,
- 2612, 2613, 2621, 2623, 2625, 2614, 2626, 2611, 2627, 0,
- 2614, 2623, 2629, 2617, 2626, 2615, 2616, 2636, 2617, 2618,
- 2619, 2618, 2625, 2627, 2620, 2628, 2620, 2630, 2637, 2621,
- 2623, 2625, 2628, 2626, 2629, 2627, 2631, 2632, 2638, 2629,
- 2635, 2636, 2639, 2631, 2636, 2632, 2640, 2635, 2642, 2630,
- 2638, 2639, 2628, 2643, 2630, 2637, 2641, 2647, 2645, 2646,
- 2642, 0, 0, 2631, 2632, 2638, 2650, 2635, 2653, 2639,
- 2645, 2658, 2641, 2640, 2648, 2642, 2643, 2655, 2650, 2656,
-
- 2643, 2660, 2646, 2641, 2647, 2645, 2646, 2651, 2648, 2652,
- 2657, 2659, 2655, 2650, 2651, 2653, 2652, 2656, 2658, 2659,
- 2661, 2648, 2662, 2666, 2655, 2665, 2656, 2671, 2660, 2664,
- 2663, 2673, 2665, 2657, 2651, 0, 2652, 2657, 2659, 2679,
- 2662, 2663, 2661, 2672, 2664, 2674, 2675, 2661, 2672, 2662,
- 2666, 2676, 2665, 2671, 2671, 2681, 2664, 2663, 2673, 2674,
- 2675, 2677, 2678, 2683, 2680, 2686, 2679, 2681, 2688, 2676,
- 2672, 2680, 2674, 2675, 2687, 2689, 0, 2691, 2676, 2677,
- 2678, 2688, 2681, 0, 2690, 2691, 2693, 2686, 2677, 2678,
- 2683, 2680, 2686, 2697, 2692, 2688, 2687, 2689, 2695, 2700,
-
- 2698, 2687, 2689, 2690, 2691, 2693, 2699, 2701, 2702, 2703,
- 2695, 2690, 2692, 2693, 2704, 2697, 2706, 2703, 2699, 2705,
- 2697, 2692, 2698, 2707, 2709, 2695, 2700, 2698, 2708, 0,
- 2702, 2710, 2707, 2699, 2701, 2702, 2703, 2708, 2706, 2705,
- 2711, 2704, 2712, 2706, 2714, 2715, 2705, 2718, 2713, 2719,
- 2707, 2722, 2724, 2710, 2712, 2708, 2709, 2720, 2710, 2721,
- 2723, 2718, 2725, 2726, 2721, 2724, 2711, 2711, 2732, 2712,
- 2713, 2714, 2715, 2722, 2718, 2713, 2719, 2727, 2722, 2724,
- 2728, 2720, 2723, 2729, 2720, 2733, 2726, 2723, 2735, 2730,
- 2726, 2721, 2734, 2737, 2725, 2729, 2731, 2739, 2728, 2727,
-
- 2732, 0, 2731, 2735, 2727, 2738, 2743, 2728, 2730, 2744,
- 2729, 2741, 2747, 2737, 2734, 2735, 2730, 2733, 2749, 2734,
- 2737, 2739, 2748, 2731, 2739, 2745, 2741, 2738, 2743, 2746,
- 2747, 2744, 2738, 2743, 2745, 2750, 2744, 2751, 2741, 2747,
- 2748, 2754, 2755, 2746, 2749, 2749, 2756, 0, 2762, 2748,
- 2754, 2760, 2745, 2750, 2765, 2759, 2746, 2761, 2760, 2751,
- 2763, 2764, 2750, 2759, 2751, 2761, 2767, 2756, 2754, 2764,
- 2774, 2766, 2765, 2756, 2755, 2762, 2773, 2768, 2760, 2770,
- 2763, 2765, 2759, 2766, 2761, 2768, 2776, 2763, 2764, 2772,
- 2775, 2770, 2775, 2767, 2777, 2780, 2772, 2774, 2766, 2773,
-
- 2778, 2779, 2781, 2773, 2768, 2784, 2770, 2787, 2782, 2778,
- 2785, 0, 0, 2789, 2788, 2790, 2772, 2775, 2776, 2791,
- 2795, 2781, 2780, 2784, 2785, 2793, 2777, 2778, 2790, 2781,
- 2782, 2791, 2784, 2779, 2794, 2782, 2789, 2785, 2788, 2787,
- 2789, 2788, 2790, 2794, 2796, 2798, 2791, 2795, 2800, 2802,
- 2799, 2793, 2793, 2804, 2806, 2813, 2805, 2807, 2810, 2808,
- 2804, 2794, 2807, 0, 2811, 2810, 2814, 2819, 2815, 2806,
- 2800, 2796, 2798, 2799, 2808, 2800, 2802, 2799, 2805, 2820,
- 2804, 2806, 2813, 2805, 2816, 2810, 2808, 2817, 2820, 2807,
- 2811, 2811, 2815, 2814, 2819, 2815, 2822, 2823, 2816, 2824,
-
- 2825, 2817, 2827, 2822, 2826, 2828, 2820, 2830, 2829, 2831,
- 2832, 2816, 2836, 2833, 2817, 2844, 2826, 2829, 2840, 2828,
- 2830, 2837, 2840, 2822, 2823, 2824, 2824, 2825, 2839, 2827,
- 2843, 2826, 2828, 2839, 2830, 2829, 2833, 2832, 2846, 2841,
- 2833, 2831, 2842, 2837, 2836, 2840, 2841, 2844, 2837, 2842,
- 2845, 2843, 2845, 2847, 2850, 2852, 0, 2843, 2857, 2853,
- 2839, 2846, 2855, 2856, 2855, 2846, 2841, 0, 2861, 2842,
- 2859, 2863, 0, 0, 2852, 2861, 2850, 2845, 2858, 2858,
- 2847, 2850, 2852, 2853, 2857, 2857, 2853, 2856, 2858, 2855,
- 2856, 2860, 2859, 2865, 2862, 2861, 2864, 2859, 2863, 2866,
-
- 2860, 2865, 2867, 2868, 2872, 2858, 2858, 2862, 2869, 2864,
- 2867, 2870, 2866, 2869, 0, 2873, 2870, 2865, 2860, 2871,
- 2865, 2862, 2868, 2864, 2874, 2877, 2866, 2871, 2865, 2867,
- 2868, 2872, 2875, 0, 2876, 2878, 2877, 2879, 2880, 2880,
- 2869, 2873, 2873, 2870, 2879, 2882, 2871, 2883, 2884, 2886,
- 2874, 2874, 2877, 2881, 0, 2883, 2886, 2878, 2875, 2875,
- 2876, 2876, 2878, 2885, 2879, 2880, 2881, 2882, 2889, 2890,
- 2884, 2887, 2882, 2891, 2883, 2884, 2886, 2892, 2887, 2894,
- 2881, 2885, 2895, 2896, 2899, 2897, 2892, 2900, 2906, 0,
- 2885, 0, 0, 2907, 0, 2889, 2890, 2891, 2887, 2901,
-
- 2891, 2902, 2895, 2903, 2892, 2900, 2894, 2897, 2910, 2895,
- 2896, 2899, 2897, 2905, 2900, 2906, 2907, 2901, 2908, 2902,
- 2907, 2903, 2905, 2909, 2910, 2911, 2901, 2912, 2902, 2913,
- 2903, 2909, 2912, 2914, 2915, 2910, 2908, 2911, 2920, 2922,
- 2905, 2919, 2923, 2913, 2924, 2908, 2924, 2927, 0, 2925,
- 2909, 2914, 2911, 0, 2928, 2923, 2913, 2915, 2925, 2912,
- 2914, 2915, 2929, 2919, 2933, 2920, 2922, 2934, 2919, 2923,
- 2937, 2924, 2928, 2932, 2927, 2932, 2925, 2929, 2939, 2943,
- 2936, 2928, 2941, 0, 2945, 2934, 2933, 2936, 2941, 2929,
- 2944, 2933, 2948, 2939, 2934, 2946, 0, 2953, 2954, 2955,
-
- 2932, 2943, 2937, 2950, 2949, 2939, 2943, 2936, 2961, 2941,
- 2945, 2945, 2944, 2946, 2948, 2956, 2950, 2944, 2949, 2948,
- 2951, 2957, 2946, 2951, 2953, 2954, 2955, 2958, 2957, 2959,
- 2950, 2949, 0, 2956, 2964, 2958, 2962, 2963, 2966, 2967,
- 2961, 2970, 2956, 2965, 0, 2967, 2951, 2951, 2957, 2968,
- 2951, 2959, 2965, 2966, 2958, 2971, 2959, 2971, 2962, 2963,
- 2969, 2964, 2972, 2962, 2963, 2966, 2967, 2974, 2979, 2969,
- 2965, 2968, 2977, 2970, 2975, 2976, 2968, 2978, 2984, 2980,
- 2979, 2982, 2971, 0, 0, 2978, 2986, 2969, 2982, 2972,
- 2974, 2980, 2988, 2987, 2974, 2979, 2975, 2976, 2977, 2977,
-
- 2986, 2975, 2976, 2989, 2978, 2984, 2980, 2987, 2982, 2991,
- 2992, 2990, 2993, 2986, 2995, 2988, 2994, 2991, 2997, 2988,
- 2987, 2989, 2990, 2994, 2996, 2998, 2998, 2997, 2999, 2992,
- 2989, 3003, 3004, 3008, 2993, 3012, 2991, 2992, 2990, 2993,
- 2995, 2995, 2996, 2994, 3006, 2997, 3000, 3014, 3016, 3019,
- 3006, 2996, 2998, 3010, 3000, 2999, 3011, 3012, 3003, 3004,
- 3008, 3013, 3012, 3017, 3010, 3023, 3018, 3011, 3021, 3014,
- 3017, 3006, 3013, 3000, 3014, 3016, 3021, 3026, 3020, 3025,
- 3010, 3019, 3020, 3011, 3018, 3024, 3030, 3025, 3013, 3029,
- 3017, 3023, 3023, 3018, 3033, 3021, 3029, 3031, 3024, 3033,
-
- 3034, 3035, 3036, 3037, 3026, 3020, 3025, 3038, 3041, 3039,
- 3037, 3042, 3024, 3040, 3036, 3041, 3029, 3044, 3030, 3031,
- 3046, 3033, 3056, 3057, 3031, 3039, 3038, 3034, 3035, 3036,
- 3037, 3040, 3044, 3043, 3038, 3041, 3039, 3047, 3045, 3048,
- 3040, 3043, 3050, 3042, 3044, 3045, 3049, 3046, 3055, 3047,
- 3057, 3063, 3054, 3038, 3056, 3055, 3058, 3059, 3066, 0,
- 3043, 3068, 0, 3048, 3047, 3045, 3048, 3054, 3050, 3050,
- 3049, 3062, 3060, 3049, 3064, 3055, 3065, 3070, 3063, 3054,
- 3058, 3060, 3071, 3058, 3065, 3067, 3067, 3074, 3068, 3059,
- 3066, 3071, 3070, 3062, 3073, 3067, 3064, 3075, 3062, 3060,
-
- 3072, 3064, 3072, 3065, 3070, 3075, 3076, 3077, 3073, 3071,
- 3079, 3080, 3067, 3067, 3074, 3082, 3084, 3076, 3081, 3083,
- 3085, 3073, 3086, 3087, 3075, 3077, 3091, 3072, 3082, 3090,
- 3088, 3089, 3089, 3076, 3077, 3093, 0, 3079, 3080, 3104,
- 3081, 3083, 3082, 3084, 3088, 3081, 3083, 3085, 3091, 3086,
- 3087, 3096, 3110, 3091, 3102, 3098, 3100, 3088, 3089, 3096,
- 3098, 3090, 3093, 3099, 3100, 3101, 3104, 3106, 3099, 3108,
- 3101, 3105, 3105, 3107, 3111, 3106, 3108, 3109, 3096, 3110,
- 3102, 3102, 3098, 3100, 3113, 3115, 3107, 3116, 3120, 3125,
- 3099, 3119, 3101, 3115, 3106, 3109, 3108, 3119, 3105, 3114,
-
- 3107, 3111, 3122, 3123, 3109, 3127, 3114, 3124, 3126, 3116,
- 3128, 3129, 3115, 3131, 3116, 3120, 3113, 3132, 3119, 0,
- 3124, 3125, 0, 3126, 3127, 3123, 3114, 0, 3135, 3122,
- 3123, 3136, 3127, 3129, 3124, 3126, 3131, 3128, 3129, 3132,
- 3131, 3133, 3134, 3137, 3132, 3140, 3136, 3139, 3133, 3134,
- 3135, 3144, 3141, 3140, 3142, 3135, 3145, 3147, 3136, 3141,
- 3144, 3142, 3152, 3147, 3137, 3148, 3139, 3145, 3133, 3134,
- 3137, 3150, 3140, 3151, 3139, 3146, 3146, 3153, 3144, 3141,
- 3151, 3142, 3155, 3145, 3147, 3146, 3156, 3148, 3160, 3155,
- 3161, 3157, 3148, 3150, 3152, 3167, 3162, 3170, 3150, 3153,
-
- 3151, 0, 3146, 3146, 3153, 3157, 3168, 3172, 3169, 3155,
- 3156, 3173, 3173, 3156, 3175, 3160, 3169, 3161, 3157, 3162,
- 3174, 3174, 3167, 3162, 3170, 3176, 3176, 0, 3168, 3177,
- 3180, 3179, 3181, 3168, 3172, 3169, 3182, 3183, 3188, 3186,
- 3173, 3175, 3189, 0, 3187, 3182, 3186, 3194, 3180, 3174,
- 3183, 3187, 3177, 3179, 3176, 3190, 3177, 3180, 3179, 3181,
- 3188, 3195, 3190, 3182, 3183, 3188, 3186, 3194, 3193, 3189,
- 3193, 3187, 3196, 3197, 3194, 3200, 3201, 3199, 3202, 3210,
- 3203, 3204, 3190, 3205, 3195, 3197, 3199, 3207, 3195, 3206,
- 3196, 3218, 3211, 3209, 3211, 3193, 3202, 3200, 3209, 3196,
-
- 3197, 3206, 3200, 3201, 3199, 3202, 3203, 3203, 3204, 3207,
- 3205, 3210, 3208, 3214, 3207, 3208, 3206, 3212, 3213, 3211,
- 3216, 3215, 3217, 3218, 3213, 3209, 3220, 3221, 3216, 3212,
- 3208, 3219, 3226, 3223, 3222, 3214, 3228, 3232, 3229, 3208,
- 3214, 3233, 3208, 3215, 3212, 3213, 3222, 3216, 3215, 3217,
- 3234, 3235, 3219, 3220, 3221, 3223, 3229, 3237, 3219, 3226,
- 3223, 3222, 3238, 3228, 3232, 3229, 3239, 3240, 3233, 3241,
- 3241, 3244, 3243, 3245, 3247, 3249, 3251, 3234, 3235, 3250,
- 3246, 3247, 3255, 3256, 3237, 3252, 3259, 3250, 0, 3238,
- 3243, 3245, 3263, 3239, 3240, 3246, 3241, 3252, 3244, 3243,
-
- 3245, 3247, 3249, 3251, 3253, 3254, 3250, 3246, 3255, 3255,
- 3256, 3258, 3252, 3259, 3265, 3262, 3263, 3266, 3253, 3263,
- 3254, 3264, 3264, 3258, 3262, 3268, 3266, 3269, 3271, 3272,
- 3270, 3253, 3254, 3276, 0, 3274, 3273, 3272, 3258, 3281,
- 3265, 3265, 3262, 3270, 3266, 3273, 3274, 3277, 3264, 3268,
- 3271, 3281, 3268, 3280, 3276, 3271, 3272, 3270, 3294, 3269,
- 3276, 3293, 3274, 3273, 3296, 3277, 3281, 3284, 3284, 3297,
- 3298, 3300, 3303, 3302, 3277, 0, 3280, 3302, 3296, 3304,
- 3280, 0, 3294, 3293, 0, 3294, 3305, 3311, 3293, 0,
- 3303, 3296, 3307, 3305, 3284, 3310, 3297, 3298, 3300, 3303,
-
- 3302, 3312, 3304, 3309, 3313, 3307, 3304, 3309, 3314, 3311,
- 3315, 3310, 3316, 3305, 3311, 3319, 3313, 3319, 3317, 3307,
- 3316, 3318, 3310, 3322, 3315, 3321, 3312, 3317, 3312, 3320,
- 3309, 3313, 3318, 3323, 3314, 3314, 3325, 3315, 3322, 3316,
- 3324, 3320, 3319, 3321, 3326, 3317, 3324, 3327, 3318, 3332,
- 3322, 3328, 3321, 3334, 3327, 3323, 3320, 3333, 3325, 3335,
- 3323, 3336, 3332, 3325, 3333, 3337, 3338, 3324, 3339, 0,
- 3342, 3326, 3341, 3328, 3327, 3340, 3332, 3335, 3328, 3341,
- 3334, 3343, 3344, 3340, 3333, 3345, 3335, 3345, 3336, 3346,
- 3347, 3337, 3337, 3338, 3342, 3339, 3350, 3342, 3348, 3341,
-
- 3349, 3346, 3340, 3343, 3344, 3351, 3352, 3353, 3343, 3344,
- 3355, 3348, 3345, 3352, 3356, 3349, 3346, 3358, 3350, 3360,
- 3357, 3362, 3347, 3350, 3365, 3348, 3356, 3349, 3357, 3366,
- 3362, 3360, 3351, 3352, 3353, 3367, 3369, 3355, 3370, 3371,
- 3375, 3356, 3368, 0, 3358, 3372, 3360, 3357, 3362, 3373,
- 3368, 3365, 3371, 3374, 3367, 3366, 3366, 3373, 3377, 3372,
- 3383, 3384, 3367, 0, 3389, 3380, 3371, 3375, 3369, 3368,
- 3370, 3380, 3372, 3383, 3381, 3374, 3373, 3387, 3389, 3386,
- 3374, 3381, 3388, 3390, 3384, 3377, 3386, 3383, 3384, 3392,
- 3388, 3389, 3380, 3393, 3391, 3394, 3397, 3390, 3398, 3387,
-
- 3399, 3381, 3391, 3397, 3387, 3400, 3386, 3398, 3399, 3388,
- 3390, 3392, 3401, 3402, 3403, 3393, 3392, 3408, 0, 0,
- 3393, 3391, 3394, 3397, 3404, 3398, 3405, 3399, 3406, 3407,
- 3410, 0, 3400, 3412, 3401, 3415, 3411, 3407, 3414, 3401,
- 3403, 3403, 0, 3415, 3416, 3402, 3404, 3419, 3405, 3408,
- 3406, 3404, 0, 3405, 3423, 3406, 3407, 3410, 3411, 3417,
- 3412, 3414, 3415, 3411, 3416, 3414, 3418, 3417, 3420, 3421,
- 3425, 3416, 3426, 0, 3418, 3426, 3420, 3428, 3427, 3419,
- 3423, 3423, 3431, 3421, 3429, 3428, 3417, 3430, 3432, 3433,
- 3426, 3436, 3429, 3418, 0, 3420, 3421, 3425, 3438, 3426,
-
- 3427, 3430, 3426, 3433, 3428, 3427, 3435, 3435, 3431, 3431,
- 3432, 3429, 3437, 3440, 3430, 3432, 3433, 3436, 3436, 3439,
- 3437, 3441, 3442, 3443, 3438, 3438, 3446, 3445, 3449, 3444,
- 3442, 0, 3453, 3435, 3451, 3440, 3449, 3447, 3448, 3437,
- 3440, 3441, 3451, 0, 3450, 3439, 3439, 3456, 3441, 3442,
- 3443, 3444, 3445, 3446, 3445, 3449, 3444, 3447, 3448, 3453,
- 3454, 3451, 3457, 3462, 3447, 3448, 3450, 3458, 3454, 3456,
- 3459, 3450, 3460, 3463, 3456, 3458, 3465, 3464, 3459, 3466,
- 3469, 3463, 3470, 3473, 3457, 3464, 0, 3454, 3467, 3457,
- 3462, 3471, 3476, 3477, 3458, 3479, 3480, 3459, 3460, 3460,
-
- 3463, 3477, 3465, 3465, 3464, 3473, 3466, 3469, 3467, 3470,
- 3473, 3471, 0, 3478, 3476, 3467, 0, 0, 3471, 3476,
- 3477, 3478, 3479, 3480, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3478, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3485, 3485,
- 3485, 3485, 3485, 3485, 3485, 3486, 3486, 3486, 3486, 3486,
- 3486, 3486, 3487, 3487, 3487, 3487, 3487, 3487, 3487, 3488,
- 3488, 3488, 3488, 3488, 3488, 3488, 3489, 3489, 3489, 3489,
- 3489, 3489, 3489, 3490, 3490, 3490, 3490, 3490, 3490, 3490,
- 3492, 3492, 0, 3492, 3492, 3492, 3492, 3493, 3493, 0,
-
- 0, 0, 3493, 3493, 3494, 3494, 0, 0, 3494, 0,
- 3494, 3495, 0, 0, 0, 0, 0, 3495, 3496, 3496,
- 0, 0, 0, 3496, 3496, 3497, 0, 0, 0, 0,
- 0, 3497, 3498, 3498, 0, 3498, 3498, 3498, 3498, 3499,
- 0, 0, 0, 0, 0, 3499, 3500, 3500, 0, 0,
- 0, 3500, 3500, 3501, 3501, 0, 3501, 3501, 3501, 3501,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
-
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
- 3483, 3483, 3483, 3483, 3483, 3483, 3483
+ 233, 215, 218, 225, 230, 0, 234, 0, 215, 215,
+ 0, 0, 215, 235, 215, 226, 221, 223, 228, 232,
+ 234, 225, 221, 228, 232, 231, 215, 230, 215, 236,
+ 225, 230, 233, 234, 235, 239, 236, 237, 238, 240,
+ 235, 241, 242, 243, 232, 0, 232, 238, 244, 247,
+
+ 245, 232, 238, 240, 239, 243, 236, 245, 237, 244,
+ 242, 249, 239, 241, 237, 238, 240, 246, 241, 242,
+ 243, 247, 246, 248, 238, 244, 247, 245, 250, 251,
+ 252, 252, 248, 250, 249, 253, 254, 255, 249, 252,
+ 259, 260, 258, 254, 257, 262, 0, 264, 261, 246,
+ 248, 263, 257, 265, 266, 250, 261, 252, 252, 255,
+ 264, 251, 258, 254, 255, 267, 263, 253, 268, 258,
+ 278, 257, 259, 260, 264, 261, 269, 262, 263, 265,
+ 265, 266, 270, 271, 272, 274, 270, 273, 267, 275,
+ 277, 276, 279, 269, 277, 273, 275, 267, 282, 272,
+
+ 268, 269, 278, 269, 274, 271, 280, 281, 284, 270,
+ 271, 272, 274, 276, 273, 267, 275, 277, 276, 283,
+ 269, 284, 287, 285, 279, 286, 289, 290, 280, 281,
+ 282, 283, 285, 280, 281, 284, 291, 288, 286, 288,
+ 292, 287, 295, 298, 294, 297, 283, 296, 0, 287,
+ 285, 290, 286, 294, 290, 298, 297, 299, 289, 300,
+ 301, 291, 302, 291, 288, 303, 292, 292, 295, 295,
+ 298, 294, 297, 296, 296, 304, 305, 307, 301, 306,
+ 302, 299, 300, 310, 299, 309, 300, 301, 304, 302,
+ 308, 311, 312, 313, 314, 315, 0, 303, 0, 317,
+
+ 313, 315, 304, 314, 306, 310, 306, 308, 305, 307,
+ 310, 309, 309, 308, 316, 318, 312, 308, 319, 0,
+ 313, 314, 315, 311, 312, 317, 317, 319, 316, 320,
+ 321, 322, 0, 323, 308, 324, 326, 325, 321, 318,
+ 322, 316, 318, 312, 324, 319, 327, 328, 331, 0,
+ 329, 326, 320, 0, 325, 358, 320, 321, 322, 323,
+ 323, 325, 324, 326, 325, 329, 331, 332, 341, 336,
+ 0, 328, 0, 0, 328, 331, 332, 329, 327, 333,
+ 335, 325, 330, 336, 334, 330, 334, 358, 337, 0,
+ 330, 330, 330, 330, 332, 341, 336, 338, 338, 334,
+
+ 330, 333, 334, 337, 335, 339, 333, 335, 334, 330,
+ 339, 334, 330, 334, 340, 337, 343, 330, 330, 330,
+ 330, 346, 338, 344, 338, 338, 334, 0, 343, 334,
+ 342, 347, 348, 342, 349, 344, 350, 339, 340, 346,
+ 342, 340, 351, 343, 345, 345, 0, 0, 346, 347,
+ 344, 353, 352, 357, 345, 354, 349, 342, 347, 348,
+ 342, 349, 350, 350, 352, 357, 355, 362, 351, 351,
+ 354, 345, 345, 353, 355, 359, 356, 359, 353, 352,
+ 357, 361, 354, 356, 363, 364, 359, 0, 361, 362,
+ 371, 0, 365, 355, 362, 0, 367, 366, 365, 366,
+
+ 369, 359, 359, 356, 359, 372, 0, 364, 361, 367,
+ 370, 0, 364, 359, 365, 368, 363, 377, 369, 365,
+ 0, 366, 371, 367, 366, 365, 366, 369, 368, 373,
+ 380, 368, 372, 368, 0, 377, 370, 370, 376, 368,
+ 378, 377, 368, 380, 377, 376, 0, 379, 382, 0,
+ 386, 373, 378, 383, 0, 368, 373, 380, 368, 379,
+ 368, 374, 377, 374, 382, 376, 383, 378, 386, 374,
+ 385, 387, 382, 374, 379, 382, 387, 386, 374, 0,
+ 383, 374, 385, 389, 0, 388, 390, 374, 374, 389,
+ 374, 382, 388, 393, 390, 391, 374, 385, 392, 0,
+
+ 374, 393, 394, 387, 0, 374, 388, 391, 374, 375,
+ 389, 375, 388, 390, 395, 395, 392, 397, 403, 388,
+ 393, 396, 391, 405, 375, 392, 400, 375, 396, 375,
+ 397, 375, 0, 400, 394, 375, 375, 402, 375, 401,
+ 403, 395, 410, 398, 397, 403, 401, 0, 396, 402,
+ 404, 375, 398, 400, 375, 405, 375, 0, 375, 384,
+ 384, 407, 404, 399, 402, 406, 401, 408, 407, 384,
+ 384, 384, 384, 384, 410, 398, 384, 404, 412, 398,
+ 409, 399, 408, 0, 384, 399, 384, 384, 407, 412,
+ 399, 406, 406, 409, 408, 413, 384, 384, 384, 384,
+
+ 384, 416, 411, 384, 411, 412, 415, 409, 399, 414,
+ 414, 0, 416, 415, 417, 419, 421, 413, 418, 420,
+ 420, 0, 413, 0, 423, 417, 0, 424, 416, 411,
+ 0, 418, 0, 415, 422, 424, 425, 420, 414, 421,
+ 419, 417, 419, 421, 420, 418, 420, 420, 425, 422,
+ 423, 423, 428, 427, 424, 426, 431, 422, 429, 429,
+ 432, 422, 427, 425, 420, 428, 426, 433, 434, 437,
+ 429, 436, 429, 0, 435, 437, 422, 429, 432, 428,
+ 427, 0, 426, 438, 439, 429, 429, 432, 431, 433,
+ 440, 434, 435, 441, 433, 434, 437, 429, 442, 429,
+
+ 430, 435, 443, 436, 438, 442, 445, 439, 430, 430,
+ 438, 439, 430, 430, 440, 441, 430, 440, 444, 446,
+ 441, 448, 430, 447, 449, 442, 450, 430, 443, 443,
+ 451, 485, 444, 445, 560, 430, 430, 447, 452, 430,
+ 430, 446, 451, 430, 452, 444, 446, 448, 448, 450,
+ 447, 453, 454, 450, 455, 456, 449, 451, 458, 457,
+ 459, 560, 455, 485, 460, 452, 457, 458, 461, 462,
+ 456, 0, 465, 453, 454, 459, 464, 0, 453, 454,
+ 455, 455, 456, 463, 487, 458, 457, 459, 460, 455,
+ 461, 460, 462, 467, 465, 461, 462, 470, 463, 465,
+
+ 466, 472, 464, 464, 468, 0, 466, 472, 474, 468,
+ 463, 473, 476, 484, 474, 475, 487, 479, 476, 467,
+ 467, 477, 478, 470, 470, 482, 484, 466, 472, 478,
+ 473, 468, 479, 475, 482, 474, 488, 486, 473, 476,
+ 484, 491, 475, 477, 479, 481, 483, 481, 477, 478,
+ 494, 0, 482, 483, 481, 486, 489, 490, 488, 493,
+ 490, 496, 492, 488, 486, 491, 498, 497, 491, 489,
+ 495, 493, 481, 483, 481, 492, 490, 495, 499, 498,
+ 502, 0, 494, 489, 490, 496, 493, 490, 496, 492,
+ 497, 500, 501, 498, 503, 506, 500, 495, 501, 497,
+
+ 499, 504, 505, 502, 507, 499, 506, 502, 511, 508,
+ 641, 641, 507, 504, 512, 511, 503, 497, 500, 501,
+ 512, 503, 506, 508, 505, 0, 513, 516, 504, 505,
+ 0, 507, 515, 520, 514, 511, 508, 509, 513, 641,
+ 515, 512, 509, 518, 509, 520, 0, 517, 0, 516,
+ 509, 521, 509, 513, 516, 509, 509, 514, 517, 515,
+ 520, 514, 509, 509, 509, 524, 518, 523, 519, 509,
+ 518, 509, 519, 521, 517, 524, 525, 509, 521, 509,
+ 526, 522, 509, 509, 522, 523, 527, 0, 525, 509,
+ 519, 526, 522, 530, 523, 519, 528, 524, 529, 519,
+
+ 528, 532, 524, 525, 531, 529, 531, 526, 522, 533,
+ 527, 522, 535, 527, 534, 0, 536, 538, 537, 530,
+ 530, 533, 538, 528, 535, 529, 537, 532, 532, 534,
+ 539, 531, 540, 543, 548, 542, 533, 545, 541, 535,
+ 546, 534, 536, 536, 538, 537, 541, 542, 547, 550,
+ 540, 555, 539, 549, 543, 545, 0, 539, 561, 540,
+ 543, 550, 542, 546, 545, 541, 548, 546, 549, 551,
+ 552, 547, 553, 554, 555, 547, 550, 551, 555, 556,
+ 549, 565, 554, 552, 553, 557, 558, 562, 559, 558,
+ 561, 563, 567, 556, 564, 568, 551, 552, 566, 553,
+
+ 554, 0, 562, 569, 567, 565, 556, 559, 565, 564,
+ 557, 566, 557, 558, 562, 559, 574, 568, 571, 567,
+ 575, 564, 568, 563, 570, 566, 573, 569, 572, 571,
+ 569, 570, 576, 572, 570, 577, 578, 579, 0, 580,
+ 573, 582, 570, 574, 580, 571, 581, 575, 583, 0,
+ 0, 570, 581, 573, 584, 586, 582, 585, 570, 587,
+ 572, 570, 577, 578, 576, 585, 588, 591, 582, 579,
+ 590, 580, 583, 581, 586, 583, 584, 592, 590, 594,
+ 593, 584, 586, 587, 585, 589, 587, 593, 588, 589,
+ 591, 595, 596, 588, 591, 597, 0, 590, 598, 599,
+
+ 595, 601, 594, 605, 600, 602, 594, 593, 597, 592,
+ 600, 599, 589, 602, 596, 606, 603, 607, 595, 596,
+ 0, 618, 597, 601, 598, 598, 599, 603, 601, 604,
+ 607, 600, 602, 610, 0, 605, 604, 606, 609, 613,
+ 608, 611, 606, 603, 607, 608, 612, 609, 608, 608,
+ 611, 616, 614, 618, 638, 0, 604, 612, 615, 610,
+ 610, 613, 619, 616, 608, 609, 613, 608, 611, 620,
+ 622, 615, 608, 612, 614, 608, 608, 621, 616, 614,
+ 619, 623, 626, 625, 624, 615, 638, 627, 628, 619,
+ 629, 626, 622, 620, 625, 631, 620, 622, 632, 621,
+
+ 621, 0, 628, 649, 621, 623, 624, 627, 623, 626,
+ 625, 624, 629, 630, 627, 628, 632, 629, 634, 633,
+ 630, 635, 631, 636, 634, 632, 621, 633, 637, 640,
+ 639, 0, 635, 644, 642, 649, 645, 643, 651, 646,
+ 630, 636, 644, 637, 652, 634, 633, 647, 635, 645,
+ 636, 639, 646, 640, 648, 637, 640, 639, 642, 643,
+ 644, 642, 648, 645, 643, 650, 646, 654, 652, 647,
+ 651, 652, 655, 653, 647, 653, 656, 655, 0, 657,
+ 659, 648, 718, 658, 661, 718, 662, 650, 660, 654,
+ 656, 664, 650, 657, 654, 667, 660, 658, 658, 665,
+
+ 653, 0, 661, 656, 655, 658, 657, 663, 662, 718,
+ 658, 661, 659, 662, 663, 660, 666, 664, 664, 665,
+ 668, 673, 669, 670, 658, 658, 665, 667, 670, 0,
+ 671, 666, 669, 674, 663, 668, 672, 675, 672, 681,
+ 666, 674, 676, 666, 669, 677, 673, 668, 673, 669,
+ 683, 676, 678, 682, 677, 670, 671, 671, 666, 669,
+ 674, 678, 675, 672, 675, 679, 684, 680, 683, 676,
+ 685, 681, 677, 679, 680, 686, 682, 683, 684, 678,
+ 682, 687, 685, 690, 686, 693, 688, 689, 0, 687,
+ 692, 691, 679, 684, 680, 688, 694, 685, 691, 689,
+
+ 693, 695, 686, 692, 694, 0, 697, 695, 687, 699,
+ 688, 696, 693, 688, 689, 690, 698, 692, 691, 696,
+ 699, 700, 688, 694, 702, 698, 701, 701, 695, 697,
+ 700, 704, 702, 697, 703, 701, 699, 705, 696, 706,
+ 0, 708, 707, 698, 704, 711, 0, 710, 700, 708,
+ 727, 702, 0, 701, 701, 707, 703, 709, 704, 712,
+ 710, 703, 706, 705, 705, 715, 706, 711, 708, 707,
+ 712, 713, 711, 709, 710, 714, 717, 716, 719, 713,
+ 724, 721, 727, 723, 709, 715, 712, 720, 725, 714,
+ 721, 722, 715, 724, 728, 729, 717, 726, 713, 716,
+
+ 719, 723, 714, 717, 716, 719, 725, 724, 721, 720,
+ 723, 722, 726, 730, 720, 725, 728, 731, 722, 729,
+ 732, 728, 729, 733, 726, 735, 734, 736, 0, 737,
+ 731, 735, 738, 740, 742, 733, 730, 737, 732, 734,
+ 730, 739, 742, 743, 731, 749, 745, 732, 0, 0,
+ 733, 740, 735, 734, 736, 737, 737, 746, 744, 738,
+ 740, 742, 748, 739, 737, 744, 0, 750, 739, 745,
+ 751, 748, 746, 745, 747, 743, 747, 749, 752, 753,
+ 757, 753, 763, 760, 746, 744, 750, 752, 754, 748,
+ 751, 764, 757, 760, 750, 754, 0, 751, 769, 0,
+
+ 763, 747, 767, 766, 0, 752, 753, 757, 773, 763,
+ 760, 768, 764, 770, 0, 754, 755, 773, 764, 755,
+ 767, 769, 768, 755, 766, 769, 755, 0, 771, 767,
+ 766, 772, 774, 755, 755, 773, 755, 775, 768, 770,
+ 770, 755, 776, 755, 775, 774, 755, 772, 0, 0,
+ 755, 0, 0, 755, 771, 771, 781, 779, 772, 774,
+ 755, 755, 778, 755, 775, 781, 0, 780, 782, 778,
+ 789, 0, 789, 780, 776, 777, 777, 783, 777, 779,
+ 783, 777, 786, 781, 779, 785, 777, 0, 787, 778,
+ 786, 782, 777, 777, 780, 782, 792, 789, 784, 788,
+
+ 790, 777, 777, 777, 783, 777, 793, 785, 777, 786,
+ 787, 788, 785, 777, 784, 787, 792, 791, 794, 777,
+ 777, 784, 791, 792, 790, 784, 788, 790, 795, 797,
+ 794, 796, 793, 793, 800, 798, 0, 0, 799, 801,
+ 805, 784, 0, 0, 803, 794, 804, 805, 802, 791,
+ 795, 797, 803, 807, 0, 795, 797, 796, 796, 798,
+ 799, 800, 798, 802, 801, 799, 801, 805, 806, 804,
+ 808, 803, 807, 804, 809, 802, 806, 810, 0, 811,
+ 807, 815, 812, 813, 814, 816, 809, 817, 818, 814,
+ 810, 812, 821, 818, 820, 806, 808, 808, 813, 823,
+
+ 822, 809, 825, 824, 810, 811, 811, 816, 822, 812,
+ 813, 814, 816, 815, 817, 826, 820, 827, 828, 829,
+ 818, 820, 830, 832, 821, 824, 833, 822, 831, 834,
+ 824, 823, 832, 0, 825, 0, 0, 828, 827, 826,
+ 835, 839, 826, 840, 827, 828, 829, 831, 833, 830,
+ 832, 837, 834, 833, 836, 831, 834, 838, 841, 842,
+ 835, 840, 837, 836, 843, 838, 844, 835, 839, 0,
+ 840, 846, 847, 848, 844, 849, 848, 841, 837, 851,
+ 860, 836, 852, 850, 838, 841, 842, 0, 860, 846,
+ 847, 858, 853, 844, 855, 0, 843, 849, 846, 847,
+
+ 848, 850, 849, 851, 852, 853, 851, 860, 856, 852,
+ 850, 854, 855, 854, 859, 857, 861, 858, 858, 853,
+ 857, 855, 856, 863, 862, 864, 859, 862, 866, 867,
+ 868, 0, 863, 864, 861, 856, 868, 869, 854, 870,
+ 0, 859, 876, 861, 880, 870, 876, 857, 877, 864,
+ 863, 862, 864, 866, 871, 866, 867, 868, 872, 869,
+ 864, 871, 873, 874, 869, 872, 870, 873, 875, 876,
+ 874, 877, 879, 878, 881, 877, 880, 883, 882, 884,
+ 879, 871, 878, 885, 887, 872, 875, 884, 883, 873,
+ 874, 886, 881, 882, 888, 875, 885, 889, 890, 879,
+
+ 878, 881, 892, 887, 883, 882, 884, 888, 891, 892,
+ 885, 887, 886, 893, 895, 894, 891, 900, 886, 889,
+ 896, 888, 894, 897, 889, 890, 898, 896, 897, 892,
+ 899, 893, 901, 895, 898, 891, 903, 899, 902, 904,
+ 893, 895, 894, 0, 906, 907, 908, 896, 905, 900,
+ 897, 902, 904, 898, 909, 905, 911, 899, 914, 910,
+ 915, 913, 909, 0, 901, 902, 904, 910, 903, 908,
+ 918, 916, 919, 908, 910, 905, 906, 907, 911, 912,
+ 917, 909, 921, 911, 918, 912, 910, 913, 913, 917,
+ 914, 923, 915, 920, 910, 916, 922, 918, 916, 926,
+
+ 920, 924, 0, 925, 919, 922, 912, 917, 925, 921,
+ 927, 926, 928, 923, 924, 0, 924, 929, 923, 935,
+ 920, 932, 929, 922, 930, 924, 926, 931, 924, 932,
+ 941, 930, 935, 927, 944, 925, 937, 927, 928, 928,
+ 938, 924, 934, 924, 929, 934, 935, 938, 932, 931,
+ 937, 930, 939, 965, 931, 0, 941, 941, 939, 0,
+ 942, 944, 943, 937, 945, 947, 945, 938, 951, 934,
+ 0, 0, 946, 951, 943, 949, 0, 947, 952, 939,
+ 940, 948, 940, 942, 967, 965, 940, 942, 940, 943,
+ 950, 945, 947, 940, 948, 946, 952, 949, 940, 946,
+
+ 951, 953, 949, 950, 940, 952, 954, 940, 948, 940,
+ 955, 967, 957, 940, 953, 940, 956, 950, 954, 958,
+ 940, 959, 955, 961, 960, 940, 956, 957, 953, 954,
+ 960, 962, 964, 954, 959, 963, 961, 955, 956, 957,
+ 966, 958, 969, 956, 975, 954, 958, 0, 959, 962,
+ 961, 960, 970, 956, 964, 971, 963, 970, 962, 964,
+ 972, 0, 963, 971, 976, 974, 975, 979, 0, 972,
+ 977, 975, 966, 978, 969, 0, 0, 976, 983, 970,
+ 974, 0, 971, 980, 986, 977, 983, 972, 973, 979,
+ 982, 976, 974, 973, 979, 973, 984, 977, 981, 978,
+
+ 978, 973, 980, 982, 984, 983, 973, 973, 985, 981,
+ 980, 988, 993, 973, 973, 973, 986, 982, 989, 985,
+ 973, 987, 973, 984, 0, 981, 988, 989, 973, 994,
+ 990, 997, 0, 973, 973, 985, 0, 991, 988, 993,
+ 973, 990, 992, 987, 998, 989, 991, 995, 987, 1002,
+ 999, 992, 994, 1000, 995, 0, 994, 990, 999, 1001,
+ 1003, 1006, 1004, 997, 991, 1007, 1009, 1008, 998, 992,
+ 1004, 998, 1010, 1001, 995, 1000, 1011, 999, 1008, 1006,
+ 1000, 1002, 1003, 1007, 1011, 1012, 1001, 1003, 1006, 1004,
+ 1010, 1014, 1007, 1013, 1008, 1015, 1016, 1017, 1009, 1010,
+
+ 1013, 1018, 1015, 1011, 1014, 1019, 1020, 1012, 1021, 0,
+ 1023, 1016, 1012, 0, 1025, 1017, 1020, 1027, 1014, 1018,
+ 1013, 1023, 1015, 1016, 1017, 0, 1019, 1025, 1018, 1026,
+ 1028, 1031, 1019, 1020, 1029, 1037, 1026, 1023, 1028, 1027,
+ 1021, 1025, 1030, 1031, 1027, 1032, 1033, 1029, 1036, 1039,
+ 1038, 1030, 1040, 1037, 0, 1045, 1026, 1028, 1031, 1042,
+ 1041, 1029, 1037, 0, 0, 1043, 1045, 1032, 1033, 1030,
+ 1036, 1042, 1032, 1033, 1049, 1036, 1038, 1038, 1041, 1043,
+ 1046, 1039, 1045, 1050, 1040, 1046, 1042, 1041, 1048, 1052,
+ 1051, 1048, 1043, 1053, 1054, 1055, 1050, 1051, 1049, 1056,
+
+ 1052, 1049, 1053, 1058, 0, 1060, 1057, 1055, 1054, 0,
+ 1050, 1059, 1046, 1057, 1048, 1048, 1052, 1051, 1048, 1063,
+ 1053, 1054, 1055, 1059, 1061, 1065, 1066, 1060, 1064, 1067,
+ 1071, 1056, 1060, 1057, 1064, 1058, 1068, 1061, 1059, 1069,
+ 1067, 1073, 1070, 1063, 1075, 1071, 1063, 1065, 1066, 1074,
+ 1076, 1061, 1065, 1066, 1068, 1064, 1067, 1071, 1077, 1078,
+ 1074, 1069, 1073, 1068, 1070, 1075, 1069, 1080, 1073, 1070,
+ 1079, 1075, 1081, 1083, 1082, 0, 1074, 1078, 1085, 1079,
+ 1084, 1083, 1076, 1082, 1090, 1077, 1078, 1084, 1087, 1086,
+ 1088, 1080, 1089, 1092, 1080, 1094, 1091, 1079, 1081, 1081,
+
+ 1083, 1082, 1085, 1086, 1093, 1085, 1090, 1084, 1096, 1101,
+ 1097, 1090, 1099, 0, 1098, 1102, 1086, 0, 1091, 1097,
+ 1087, 1098, 1088, 1091, 1089, 1092, 1093, 1094, 1100, 1103,
+ 1096, 1093, 1105, 1102, 1104, 1096, 1101, 1097, 1106, 1107,
+ 1105, 1098, 1102, 1104, 1099, 1109, 1112, 1103, 1108, 1110,
+ 1100, 1113, 1114, 1111, 1112, 1100, 1103, 0, 1110, 1105,
+ 1116, 1104, 1106, 1107, 1108, 1106, 1107, 1109, 1111, 1115,
+ 1117, 1118, 1109, 1112, 1120, 1108, 1110, 1119, 1129, 1118,
+ 1111, 1115, 1116, 1113, 1114, 1121, 1123, 1116, 1124, 1120,
+ 1119, 1125, 1131, 0, 1121, 1123, 1115, 1117, 1118, 1125,
+
+ 1126, 1120, 1126, 1128, 1119, 1129, 1124, 1130, 1135, 1132,
+ 1133, 1128, 1121, 1123, 1131, 1124, 1136, 1133, 1125, 1131,
+ 1138, 1135, 1139, 1137, 1140, 1141, 1130, 1126, 1136, 1142,
+ 1128, 1132, 1141, 1143, 1130, 1135, 1132, 1133, 1137, 1146,
+ 1139, 1145, 1138, 1136, 1144, 1147, 1148, 1138, 1150, 1139,
+ 1137, 1140, 1141, 0, 1157, 1144, 1149, 0, 1153, 1148,
+ 0, 1142, 1151, 1145, 1146, 1143, 1146, 1147, 1145, 1149,
+ 1150, 1144, 1147, 1148, 1151, 1150, 1152, 1158, 1153, 1154,
+ 1155, 1157, 1160, 1149, 1152, 1153, 1159, 1161, 1155, 1151,
+ 1158, 1154, 1162, 1165, 1160, 1159, 0, 0, 1166, 1162,
+
+ 1167, 1163, 1168, 1152, 1158, 1170, 1154, 1155, 1161, 1160,
+ 1163, 1169, 1163, 1159, 1161, 1163, 1165, 1171, 1170, 1162,
+ 1165, 1173, 1167, 1163, 1166, 1166, 1172, 1167, 1163, 1168,
+ 1173, 1169, 1170, 1174, 1172, 1175, 1178, 1163, 1169, 1163,
+ 1177, 1171, 1163, 1179, 1171, 1180, 1176, 0, 1173, 1183,
+ 0, 1174, 1188, 1172, 1176, 1177, 1179, 1175, 1178, 1184,
+ 1174, 1180, 1175, 1178, 1186, 1185, 1181, 1177, 1187, 1202,
+ 1179, 1186, 1180, 1176, 1181, 1188, 1183, 1190, 1189, 1188,
+ 1192, 1184, 1191, 0, 0, 1196, 1184, 1185, 1192, 1190,
+ 1187, 1186, 1185, 1181, 1191, 1187, 1189, 1193, 1194, 1195,
+
+ 1196, 1202, 1198, 1197, 1190, 1189, 1193, 1192, 1198, 1191,
+ 1194, 1197, 1196, 1199, 1200, 1201, 1203, 0, 1205, 1195,
+ 1206, 1193, 1199, 1203, 1193, 1194, 1195, 1201, 1286, 1198,
+ 1197, 1204, 1206, 1193, 1208, 1200, 1205, 1210, 1204, 1210,
+ 1199, 1200, 1201, 1203, 1207, 1205, 1209, 1206, 1211, 1208,
+ 1212, 1218, 1207, 1215, 1209, 1286, 1213, 1216, 1204, 1217,
+ 1211, 1208, 1222, 1213, 1210, 1220, 1221, 1219, 1231, 1216,
+ 1218, 1207, 1217, 1209, 1219, 1211, 1220, 1222, 1218, 1224,
+ 0, 1227, 1212, 1213, 1216, 1215, 1217, 1224, 1221, 1222,
+ 1223, 1225, 1220, 1221, 1219, 1223, 1226, 0, 1229, 1230,
+
+ 1231, 0, 0, 1232, 1225, 1235, 1224, 1227, 1227, 0,
+ 1226, 1233, 1229, 1236, 1239, 0, 1234, 1230, 1225, 0,
+ 1239, 1238, 1223, 1226, 1228, 1229, 1230, 1237, 1228, 1232,
+ 1232, 1228, 1228, 1233, 1234, 1236, 1228, 1235, 1233, 1240,
+ 1236, 1239, 1228, 1234, 1243, 1242, 1228, 1238, 1238, 1237,
+ 1228, 1228, 1242, 1243, 1237, 1228, 1244, 0, 1228, 1228,
+ 1241, 1250, 1241, 1228, 1245, 1240, 1240, 1246, 1247, 1228,
+ 1248, 1243, 1242, 1228, 1246, 1251, 1249, 1252, 1253, 1257,
+ 1259, 1259, 1245, 1248, 1241, 1249, 1254, 1241, 1244, 1241,
+ 1247, 1245, 1257, 1250, 1246, 1247, 0, 1248, 0, 1252,
+
+ 1254, 1253, 1256, 1249, 1252, 1253, 1257, 1251, 1258, 1259,
+ 1260, 0, 1265, 1254, 1255, 1262, 1263, 1266, 1264, 1255,
+ 0, 1255, 1266, 1255, 1256, 1255, 1260, 1264, 1263, 1256,
+ 1265, 1268, 1255, 1267, 1258, 1258, 1268, 1260, 1262, 1265,
+ 1269, 1255, 1262, 1263, 1270, 1264, 1255, 1271, 1255, 1266,
+ 1255, 1267, 1255, 1272, 1275, 1273, 1274, 1270, 1268, 0,
+ 1267, 1272, 1269, 1273, 1276, 1271, 1277, 1269, 1278, 1274,
+ 1279, 1270, 1288, 0, 1271, 1280, 1281, 1284, 1282, 1284,
+ 1272, 1278, 1273, 1274, 1285, 1277, 1275, 1283, 1280, 1287,
+ 1276, 1276, 1279, 1277, 1281, 1278, 1283, 1279, 1282, 1288,
+
+ 1289, 1287, 1280, 1281, 1284, 1282, 1285, 1291, 1292, 1293,
+ 1294, 1285, 1295, 1296, 1283, 1297, 1287, 1293, 1298, 1299,
+ 1296, 1303, 0, 1300, 1308, 1289, 1301, 1289, 1294, 1300,
+ 1292, 1291, 1301, 1306, 1291, 1292, 1293, 1294, 1311, 1295,
+ 1296, 1299, 1297, 1302, 1298, 1298, 1299, 1304, 1303, 1302,
+ 1300, 1305, 1307, 1301, 1304, 1309, 1308, 1306, 1310, 1307,
+ 1306, 1305, 1312, 1311, 1314, 1311, 1321, 0, 1315, 0,
+ 1302, 1312, 1316, 1317, 1304, 1318, 1310, 1309, 1305, 1307,
+ 1315, 1323, 1309, 1320, 1319, 1310, 1317, 1322, 1314, 1312,
+ 1321, 1314, 1325, 1321, 1316, 1315, 1324, 1318, 1330, 1316,
+
+ 1317, 1325, 1318, 1319, 1326, 1320, 1327, 1323, 1323, 1322,
+ 1320, 1319, 1331, 1328, 1322, 1332, 1333, 1334, 1324, 1325,
+ 1336, 1335, 0, 1324, 1338, 1326, 1327, 1328, 1336, 1337,
+ 1330, 1326, 1341, 1327, 1339, 1343, 1347, 1332, 1333, 1335,
+ 1328, 1339, 1332, 1333, 1331, 1337, 1342, 1336, 1335, 1334,
+ 1345, 1338, 1343, 1344, 1341, 1342, 1337, 1345, 1348, 1341,
+ 1346, 1339, 1343, 1351, 1346, 1344, 1352, 1349, 1347, 1353,
+ 1355, 1354, 1352, 1342, 1357, 0, 1353, 1345, 1354, 1352,
+ 1344, 1358, 0, 1357, 1359, 1355, 1363, 1346, 1349, 1356,
+ 1348, 1359, 1362, 1352, 1349, 1351, 1353, 1355, 1354, 1352,
+
+ 1361, 1357, 1356, 1360, 1365, 1360, 1364, 1358, 1358, 1361,
+ 1364, 1359, 1367, 1363, 1362, 1369, 1356, 1368, 1370, 1362,
+ 1367, 1371, 1368, 1373, 1369, 1372, 1365, 1361, 1380, 1374,
+ 1360, 1365, 1374, 1364, 1378, 1373, 1370, 1376, 1372, 1367,
+ 1371, 1374, 1369, 1375, 1377, 1370, 1375, 1378, 1371, 1368,
+ 1373, 1381, 1372, 1383, 1384, 1376, 1374, 0, 1383, 1374,
+ 1380, 1378, 1384, 1382, 1376, 1375, 1385, 1385, 1386, 1377,
+ 1375, 1377, 1387, 1375, 1381, 1388, 1390, 1386, 1381, 1382,
+ 1389, 1384, 1391, 1390, 1392, 1383, 1397, 1394, 1401, 1389,
+ 1382, 1392, 1395, 1385, 1387, 1386, 1396, 1388, 1398, 1387,
+
+ 1394, 1395, 1388, 1390, 1391, 1396, 1399, 1389, 1400, 1391,
+ 0, 1392, 1397, 1397, 1394, 1399, 1400, 1402, 1403, 1395,
+ 1401, 1398, 1404, 1396, 1405, 1398, 1406, 1407, 1408, 1403,
+ 1404, 1415, 1402, 1399, 1409, 1400, 1408, 1405, 1406, 1407,
+ 1410, 1411, 1413, 1412, 1402, 1403, 1414, 1416, 1413, 1404,
+ 1419, 1405, 1412, 1406, 1407, 1408, 1409, 1415, 1415, 1416,
+ 1410, 1409, 1417, 1411, 1414, 1418, 1420, 1410, 1411, 1413,
+ 1412, 1421, 1418, 1414, 1416, 1422, 1419, 1419, 1423, 1424,
+ 1417, 1427, 1426, 1429, 1430, 0, 1425, 1427, 1422, 1417,
+ 1428, 1431, 1418, 1426, 1432, 1435, 0, 0, 1420, 1433,
+
+ 1437, 1436, 1422, 1421, 1423, 1423, 1424, 1425, 1427, 1426,
+ 1438, 1442, 1428, 1425, 1439, 1429, 1430, 1428, 1437, 1438,
+ 1432, 1432, 1435, 1431, 1436, 1433, 1433, 1437, 1436, 1439,
+ 1440, 1442, 1441, 0, 1443, 1444, 1445, 1438, 1442, 1447,
+ 0, 1439, 1444, 1440, 1441, 1446, 1448, 0, 1449, 1452,
+ 0, 1450, 1447, 1449, 1448, 1445, 1450, 1440, 1451, 1441,
+ 1443, 1443, 1444, 1445, 1455, 1451, 1447, 1446, 1456, 1453,
+ 1454, 1457, 1446, 1448, 1458, 1452, 1452, 1453, 1454, 1457,
+ 1449, 1458, 1455, 1450, 1459, 1451, 1460, 1461, 1463, 1463,
+ 1456, 1455, 1462, 1459, 1464, 1456, 1453, 1454, 1457, 1462,
+
+ 1465, 1458, 1466, 1467, 1468, 1469, 0, 0, 1465, 1461,
+ 1475, 1459, 1468, 1469, 1461, 1463, 1470, 1471, 1460, 1462,
+ 1472, 1473, 1475, 1466, 1470, 1471, 1464, 1465, 1472, 1466,
+ 1474, 1468, 1469, 1476, 1473, 1467, 1474, 1475, 1477, 1480,
+ 1481, 1478, 1479, 1470, 1471, 1482, 0, 1472, 1473, 1478,
+ 1479, 1483, 1484, 1486, 1480, 1490, 1485, 1474, 0, 1476,
+ 1476, 0, 1477, 1487, 1490, 1477, 1480, 1481, 1478, 1479,
+ 1485, 1486, 1482, 1483, 1491, 1484, 1492, 1487, 1483, 1484,
+ 1486, 1488, 1490, 1485, 1493, 1488, 1494, 1495, 1492, 1497,
+ 1487, 1493, 1498, 1496, 0, 1499, 1491, 1494, 1488, 1507,
+
+ 1501, 1491, 1500, 1492, 1498, 1502, 1488, 1504, 1488, 1499,
+ 1503, 1493, 1488, 1494, 1495, 1496, 1504, 1503, 1505, 1498,
+ 1496, 1497, 1499, 1501, 1500, 1488, 1506, 1501, 1502, 1500,
+ 1508, 1507, 1502, 1506, 1504, 1510, 1505, 1503, 1513, 1515,
+ 1512, 0, 1514, 1516, 1510, 1505, 1512, 1518, 1520, 1521,
+ 1516, 0, 1522, 1506, 1526, 1523, 0, 1508, 1527, 1529,
+ 1513, 0, 1510, 1522, 1527, 1513, 1523, 1512, 1514, 1514,
+ 1516, 1515, 1520, 1524, 1518, 1520, 1521, 1529, 1526, 1522,
+ 1528, 1526, 1523, 1530, 1524, 1527, 1529, 1528, 1531, 1532,
+ 1530, 1533, 1536, 1538, 1534, 1535, 0, 1533, 1537, 1539,
+
+ 1524, 1532, 1534, 1543, 1541, 1536, 1541, 1528, 1539, 0,
+ 1530, 1538, 1548, 0, 1531, 1531, 1532, 1535, 1533, 1536,
+ 1538, 1534, 1535, 1540, 1537, 1537, 1539, 1542, 1544, 1543,
+ 1543, 1541, 1547, 1545, 1542, 1540, 1546, 1553, 1549, 1548,
+ 1550, 1544, 1545, 1551, 1547, 1553, 1552, 1550, 1555, 1556,
+ 1540, 1552, 1554, 1559, 1542, 1544, 1557, 1556, 1546, 1547,
+ 1545, 1549, 1560, 1546, 1553, 1549, 1563, 1550, 1554, 1551,
+ 1551, 1555, 1562, 1552, 1561, 1555, 1556, 1563, 1557, 1554,
+ 1559, 1564, 1565, 1557, 1566, 1566, 1560, 1567, 1561, 1560,
+ 1564, 1569, 1566, 1563, 1562, 1565, 1568, 1570, 1568, 1562,
+
+ 1567, 1561, 1573, 1571, 1574, 1575, 1572, 1579, 1564, 1565,
+ 1571, 1566, 1566, 1572, 1567, 1577, 1578, 1569, 1569, 1570,
+ 1581, 1576, 1574, 1568, 1570, 0, 1584, 1575, 1576, 1573,
+ 1571, 1574, 1575, 1572, 1580, 1586, 1583, 1585, 1578, 1579,
+ 1577, 1580, 1577, 1578, 1588, 1585, 1590, 1589, 1576, 1583,
+ 1589, 1591, 1581, 1584, 1592, 1595, 1586, 1594, 0, 1593,
+ 1598, 1580, 1586, 1583, 1585, 1596, 1588, 1592, 1593, 1594,
+ 1601, 1588, 1590, 1590, 1589, 1598, 1597, 1591, 1591, 1595,
+ 1605, 1592, 1595, 1599, 1594, 1597, 1593, 1598, 1603, 1602,
+ 1599, 1596, 1596, 1600, 1608, 1609, 1600, 1606, 1605, 1607,
+
+ 1610, 1607, 1601, 1597, 1603, 1611, 1612, 1605, 1600, 1615,
+ 1599, 1602, 1603, 1613, 0, 1603, 1602, 1600, 1608, 1606,
+ 1600, 1608, 1609, 1600, 1606, 1614, 1607, 1616, 1612, 1617,
+ 1619, 1603, 1610, 1612, 1621, 1600, 1618, 1611, 1619, 1613,
+ 1613, 1615, 1622, 1617, 1623, 1618, 1620, 1624, 1625, 1616,
+ 1626, 1614, 1614, 1620, 1616, 0, 1617, 1619, 1621, 1628,
+ 1627, 1621, 1629, 1618, 1627, 1632, 1630, 1635, 1631, 0,
+ 1625, 1634, 1632, 1620, 1622, 1625, 1623, 1631, 1634, 1624,
+ 1635, 1628, 1626, 1633, 1636, 1640, 1628, 1627, 1630, 1629,
+ 1637, 1633, 1632, 1630, 1635, 1631, 1638, 1636, 1634, 1639,
+
+ 1641, 1639, 1643, 1637, 1645, 1638, 1642, 1647, 1640, 1646,
+ 1633, 1636, 1640, 1648, 1642, 1655, 0, 1637, 0, 1645,
+ 0, 1647, 1643, 1638, 1646, 1641, 1639, 1641, 1649, 1643,
+ 1650, 1645, 1651, 1642, 1647, 1649, 1646, 1652, 1653, 1651,
+ 1656, 1650, 1655, 1658, 1653, 1648, 1657, 1656, 1659, 1660,
+ 1652, 1662, 1666, 1661, 1662, 1649, 0, 1650, 1658, 1651,
+ 1663, 1660, 0, 1664, 1652, 1653, 1661, 1656, 1657, 1663,
+ 1658, 1665, 1666, 1657, 1659, 1659, 1660, 1668, 1662, 1666,
+ 1661, 1664, 1667, 1665, 1670, 1667, 1673, 1663, 1668, 1670,
+ 1664, 1672, 1674, 1672, 1675, 1679, 1670, 1677, 1665, 1676,
+
+ 1667, 1678, 0, 1680, 1668, 1682, 1677, 1681, 1691, 1667,
+ 1673, 1670, 1667, 1673, 1676, 1681, 1670, 1680, 1672, 1674,
+ 1683, 1675, 1679, 1684, 1677, 1678, 1676, 1682, 1678, 1685,
+ 1680, 1686, 1682, 1687, 1681, 1688, 1689, 1685, 1692, 1689,
+ 1691, 1690, 1686, 1688, 1683, 1684, 1694, 1683, 0, 1693,
+ 1684, 1687, 1696, 1694, 1689, 0, 1685, 1695, 1686, 1690,
+ 1687, 1696, 1688, 1689, 1697, 1692, 1689, 1698, 1690, 1693,
+ 1699, 1695, 1701, 1694, 1700, 1699, 1693, 1697, 1698, 1696,
+ 1704, 1705, 1704, 1706, 1695, 1708, 1707, 1701, 0, 1709,
+ 1705, 1697, 1710, 1712, 1698, 1713, 1700, 1707, 0, 1701,
+
+ 0, 1700, 1699, 1708, 1713, 0, 1710, 1704, 1705, 1706,
+ 1706, 1709, 1708, 1707, 1711, 1712, 1709, 1711, 1710, 1710,
+ 1712, 1714, 1713, 1716, 1718, 1715, 1719, 1714, 1716, 1722,
+ 1720, 0, 1711, 1710, 1715, 1720, 1721, 1718, 1719, 1724,
+ 1723, 1711, 1725, 1726, 1711, 1728, 1727, 1733, 1714, 1723,
+ 0, 1718, 1715, 1719, 1729, 1716, 1736, 1720, 1721, 1727,
+ 0, 1722, 1731, 1721, 1734, 1726, 1724, 1723, 1738, 1731,
+ 1726, 1732, 1740, 1727, 1725, 1729, 1735, 1728, 1734, 1733,
+ 1740, 1729, 1735, 1743, 1732, 1741, 1742, 1738, 1736, 1731,
+ 1745, 1734, 1744, 1741, 1742, 1738, 0, 1746, 1732, 1740,
+
+ 1735, 1748, 1743, 1735, 1747, 1749, 1751, 1750, 1745, 1735,
+ 1743, 1746, 1741, 1742, 1744, 1748, 1752, 1745, 1749, 1744,
+ 1750, 1753, 1747, 1754, 1746, 1755, 1761, 1751, 1748, 1756,
+ 1757, 1747, 1749, 1751, 1750, 1758, 1756, 1754, 1759, 1757,
+ 1762, 1760, 1764, 1758, 1766, 1762, 0, 1768, 1752, 1763,
+ 1754, 1764, 1755, 1753, 1751, 1760, 1756, 1757, 1761, 1767,
+ 1763, 1769, 1758, 1771, 1773, 1759, 1767, 1762, 1760, 1764,
+ 1768, 1766, 1770, 1772, 1768, 1777, 1763, 1774, 1776, 1770,
+ 0, 1774, 1773, 1769, 1778, 1771, 1767, 1781, 1769, 1780,
+ 1771, 1773, 1779, 1777, 1776, 1772, 1785, 1783, 1782, 1770,
+
+ 1772, 1780, 1777, 0, 1774, 1776, 1782, 1779, 1778, 1784,
+ 1787, 1778, 1783, 1786, 1781, 1792, 1780, 1784, 1788, 1779,
+ 1789, 1791, 1792, 1785, 1783, 1782, 1786, 1793, 1794, 1791,
+ 1787, 1796, 0, 1788, 1797, 1789, 1784, 1787, 1798, 1799,
+ 1786, 1795, 1792, 1794, 0, 1788, 1802, 1789, 1791, 1801,
+ 1795, 1803, 1796, 1804, 1805, 1794, 0, 1806, 1796, 1793,
+ 0, 1797, 1798, 1807, 1802, 1798, 1799, 1808, 1795, 1805,
+ 1809, 1801, 0, 1802, 1808, 1809, 1801, 1810, 1812, 1811,
+ 1804, 1805, 1806, 1803, 1806, 1813, 1810, 1807, 1811, 1816,
+ 1807, 1814, 1817, 1815, 1808, 1819, 0, 1809, 1823, 1821,
+
+ 1812, 1816, 1819, 1822, 1810, 1812, 1811, 1813, 1815, 1814,
+ 1818, 1824, 1813, 0, 1817, 1822, 1816, 1820, 1814, 1817,
+ 1815, 1821, 1819, 1818, 1820, 1823, 1821, 1825, 1818, 1830,
+ 1822, 0, 1827, 1825, 1828, 1829, 1830, 1818, 1831, 1820,
+ 1827, 1833, 1828, 1824, 1820, 1832, 1829, 1832, 1834, 1835,
+ 1818, 1820, 1837, 1836, 1825, 1838, 1830, 1844, 1832, 1827,
+ 1836, 1828, 1829, 1831, 1839, 1831, 1842, 1833, 1833, 1843,
+ 1839, 1840, 1832, 1845, 1832, 1834, 1835, 1840, 1841, 1837,
+ 1836, 1838, 1838, 1847, 1841, 1848, 1849, 1850, 0, 1844,
+ 1853, 1839, 1843, 1842, 1848, 1852, 1843, 1845, 1840, 1851,
+
+ 1845, 1851, 1855, 1854, 1856, 1841, 1859, 1858, 1857, 1850,
+ 1854, 0, 1848, 1858, 1850, 1847, 1860, 1853, 1849, 1852,
+ 1857, 1861, 1852, 1862, 1855, 1863, 1851, 1868, 1859, 1855,
+ 1854, 1856, 0, 1859, 1858, 1857, 0, 1865, 1860, 1864,
+ 1864, 1864, 1866, 1860, 1865, 1862, 1864, 1861, 1861, 1867,
+ 1862, 1866, 1872, 1869, 1864, 1875, 1867, 1863, 1871, 1868,
+ 1869, 1874, 1873, 1871, 1865, 1872, 1864, 1864, 1864, 1866,
+ 1877, 1875, 1876, 1864, 1873, 0, 1867, 1878, 1879, 1872,
+ 1869, 1880, 1875, 1881, 1876, 1879, 1874, 1880, 1874, 1873,
+ 1871, 1882, 1882, 1883, 1884, 1878, 1886, 1887, 1885, 1876,
+
+ 1888, 1884, 1877, 1885, 1878, 1879, 1891, 1888, 1880, 1892,
+ 1881, 1892, 1893, 1895, 1897, 1899, 0, 1898, 1882, 1883,
+ 1883, 1884, 1886, 1886, 1887, 1885, 1896, 1888, 1898, 1900,
+ 1893, 1895, 1896, 1891, 1902, 1900, 1892, 1901, 1910, 1893,
+ 1895, 1903, 1899, 1905, 1898, 0, 1897, 1904, 1904, 1901,
+ 1906, 1906, 1907, 1896, 1902, 1909, 1900, 1911, 1913, 1903,
+ 1910, 1902, 1914, 1907, 1901, 1910, 1912, 0, 1903, 1905,
+ 1905, 1915, 1917, 1912, 1904, 1918, 1919, 1906, 1913, 1907,
+ 1917, 1922, 1920, 1921, 1923, 1913, 1926, 1909, 1922, 1911,
+ 1924, 1925, 1923, 1912, 1914, 1926, 1915, 1928, 1915, 1917,
+
+ 1929, 1921, 1930, 1919, 1920, 1924, 1933, 1918, 1922, 1920,
+ 1921, 1923, 1938, 1926, 1931, 1925, 1932, 1924, 1925, 1927,
+ 1927, 1931, 1933, 1928, 1928, 1937, 1936, 1939, 1932, 1933,
+ 1935, 1936, 1929, 1933, 1930, 1939, 1940, 1935, 1943, 1938,
+ 1944, 1931, 1942, 1932, 1946, 1958, 1927, 1937, 1940, 1933,
+ 1942, 1945, 1937, 1936, 1939, 1947, 1948, 1935, 1950, 1949,
+ 1952, 1943, 1946, 1940, 1949, 1943, 1944, 1944, 1951, 1942,
+ 1954, 1946, 1945, 1952, 1951, 1949, 1953, 1958, 1945, 1948,
+ 1961, 1955, 1947, 1948, 1953, 1950, 1949, 1952, 1955, 1956,
+ 1959, 1949, 1954, 1957, 1960, 1951, 1956, 1954, 1962, 1959,
+
+ 1957, 1963, 1961, 1953, 1964, 0, 1960, 1961, 1955, 1965,
+ 1968, 1967, 1962, 1970, 1972, 1968, 1956, 1959, 1973, 1974,
+ 1957, 1960, 1983, 1973, 1976, 1962, 1968, 1969, 1963, 1967,
+ 1964, 1964, 1965, 1978, 1969, 1980, 1965, 1968, 1967, 1985,
+ 1970, 1972, 1968, 1977, 1977, 1983, 1979, 1982, 1984, 1983,
+ 1973, 1974, 1990, 1987, 1969, 1978, 1976, 1986, 1989, 1986,
+ 1978, 1979, 1982, 1984, 1988, 1985, 1985, 1980, 1991, 1988,
+ 1977, 1992, 1993, 1979, 1982, 1984, 1991, 1994, 1992, 1990,
+ 1997, 1996, 2000, 1998, 1986, 1987, 2001, 2002, 1997, 2003,
+ 1989, 1988, 1994, 2004, 1993, 1991, 1996, 2005, 1992, 1993,
+
+ 2004, 2006, 0, 2007, 1994, 1998, 2000, 1997, 1996, 2000,
+ 1998, 2008, 2001, 2001, 2002, 2009, 2003, 2011, 2019, 2013,
+ 2004, 2014, 2006, 2015, 2020, 2007, 2017, 2025, 2006, 2005,
+ 2007, 2024, 2008, 2009, 2022, 2023, 2014, 2018, 2008, 2011,
+ 2019, 2017, 2009, 2013, 2011, 2019, 2013, 2021, 2014, 2015,
+ 2015, 2020, 2018, 2017, 2025, 2024, 2022, 2023, 2024, 2026,
+ 2027, 2022, 2023, 2028, 2018, 2021, 2026, 2029, 2030, 2032,
+ 2031, 2033, 2028, 2035, 2021, 2029, 2036, 2041, 2027, 2039,
+ 2033, 2034, 2035, 2042, 2041, 2038, 2026, 2027, 2039, 2036,
+ 2028, 2030, 2031, 0, 2029, 2030, 2038, 2031, 2033, 2034,
+
+ 2035, 2032, 2040, 2036, 2041, 2046, 2039, 2043, 2034, 2042,
+ 2042, 2038, 2038, 2044, 2050, 2045, 2047, 0, 2058, 0,
+ 2040, 2045, 2052, 2038, 2053, 2043, 2054, 2046, 2044, 2040,
+ 2047, 2058, 2046, 2055, 2043, 2053, 2057, 2054, 2059, 2061,
+ 2044, 2050, 2045, 2047, 2055, 2058, 2052, 2060, 2057, 2052,
+ 2062, 2053, 2063, 2054, 2064, 2067, 2072, 2060, 2068, 2065,
+ 2055, 2063, 2071, 2057, 2070, 2061, 2061, 2073, 2070, 2077,
+ 2059, 2075, 2074, 0, 2060, 2062, 2075, 2062, 2065, 2063,
+ 2073, 2064, 2067, 2071, 2068, 2068, 2065, 2078, 2072, 2071,
+ 2076, 2070, 2074, 2080, 2073, 2077, 2077, 2076, 2075, 2074,
+
+ 2079, 2081, 0, 2082, 2083, 2078, 2079, 2091, 2080, 2084,
+ 2084, 2085, 2086, 0, 2078, 2082, 2081, 2076, 2094, 2083,
+ 2080, 0, 2088, 2085, 2095, 2086, 2092, 2079, 2081, 2088,
+ 2082, 2083, 2090, 2086, 2091, 2092, 2084, 2089, 2085, 2086,
+ 2098, 2089, 2094, 2093, 2099, 2094, 2095, 2090, 2096, 2088,
+ 2093, 2095, 2086, 2092, 2100, 2096, 2101, 2102, 2104, 2090,
+ 0, 2107, 2098, 2100, 2089, 2106, 2109, 2098, 2111, 2099,
+ 2093, 2099, 2108, 0, 2106, 2096, 2104, 2102, 2101, 2107,
+ 2113, 2100, 2110, 2101, 2102, 2104, 2115, 2108, 2107, 2114,
+ 2110, 2109, 2106, 2109, 2116, 2116, 2117, 2118, 2119, 2108,
+
+ 2111, 2121, 2114, 2122, 2120, 2113, 2124, 2113, 2123, 2110,
+ 2121, 0, 2122, 2115, 2125, 2123, 2114, 2127, 2117, 2126,
+ 2119, 2116, 2118, 2117, 2118, 2119, 2120, 2132, 2121, 2128,
+ 2122, 2120, 2127, 2126, 2128, 2123, 2125, 2129, 2124, 2131,
+ 2132, 2125, 2133, 2135, 2127, 2134, 2126, 2131, 2137, 2139,
+ 2136, 2138, 0, 0, 2132, 2135, 2129, 2136, 2140, 2142,
+ 2141, 2128, 2144, 0, 2129, 2145, 2131, 2140, 2141, 2133,
+ 2135, 2134, 2134, 2138, 2139, 2143, 2139, 2136, 2138, 2141,
+ 2137, 2146, 2147, 2165, 2148, 2140, 2142, 2141, 2144, 2144,
+ 2143, 2145, 2145, 2148, 2150, 2141, 2153, 2150, 2151, 2146,
+
+ 2152, 2153, 2143, 2154, 2147, 2156, 2152, 2158, 2146, 2147,
+ 2165, 2148, 2150, 2155, 2159, 2160, 0, 2164, 2154, 2162,
+ 2156, 2150, 2158, 2151, 2150, 2151, 0, 2152, 2153, 0,
+ 2154, 2155, 2156, 2162, 2158, 2164, 2159, 2160, 2163, 2166,
+ 2155, 2159, 2160, 2167, 2164, 2163, 2162, 2168, 2166, 2169,
+ 2171, 2170, 2167, 2170, 2175, 2172, 2168, 2173, 2176, 0,
+ 2169, 2177, 2180, 2171, 2178, 2163, 2166, 2172, 2177, 2175,
+ 2167, 2179, 0, 2176, 2168, 2191, 2169, 2171, 2170, 2173,
+ 2180, 2175, 2172, 2183, 2173, 2176, 2178, 2185, 2177, 2180,
+ 2186, 2178, 2188, 2179, 2186, 2187, 2183, 2189, 2179, 2189,
+
+ 2190, 2188, 2191, 2192, 2183, 2193, 2194, 2187, 2185, 2197,
+ 2183, 2196, 2195, 2201, 2185, 2194, 2204, 2186, 2190, 2188,
+ 2195, 2192, 2187, 2183, 2189, 2205, 2198, 2190, 2206, 2200,
+ 2192, 2197, 2193, 2194, 2196, 2207, 2197, 2200, 2196, 2195,
+ 2198, 2202, 2203, 2208, 2211, 2201, 2202, 2203, 2204, 0,
+ 2208, 2212, 2206, 2198, 2207, 2206, 2200, 2205, 2214, 2218,
+ 2215, 2213, 2207, 2217, 0, 2212, 2216, 2219, 2202, 2220,
+ 2208, 2211, 2217, 2221, 2203, 2222, 2212, 2212, 2212, 2213,
+ 2223, 2216, 2225, 0, 2227, 2214, 2215, 2215, 2213, 2219,
+ 2217, 2218, 2212, 2216, 2219, 2220, 2220, 2222, 2231, 2226,
+
+ 2221, 2228, 2222, 2212, 2233, 2225, 2226, 2227, 2228, 2225,
+ 2232, 2227, 2223, 2230, 2232, 2230, 2233, 2234, 2235, 2236,
+ 2231, 2238, 2237, 2240, 2241, 2231, 2226, 2235, 2228, 2237,
+ 2236, 2233, 2243, 2239, 2244, 2244, 2251, 2232, 2239, 2234,
+ 2230, 2242, 2246, 2238, 2234, 2235, 2236, 2241, 2238, 2237,
+ 2240, 2241, 2248, 2242, 2243, 2245, 2249, 2246, 2247, 2243,
+ 2239, 2244, 2250, 2251, 2245, 2253, 2247, 2254, 2242, 2246,
+ 2249, 2250, 2255, 2256, 2248, 2254, 2263, 0, 2261, 2248,
+ 2255, 2256, 2245, 2249, 2253, 2247, 2257, 2259, 2258, 2250,
+ 2257, 2258, 2253, 2261, 2254, 2259, 2260, 2262, 2265, 2255,
+
+ 2256, 2269, 2260, 2262, 2267, 2261, 2268, 2270, 2263, 2271,
+ 2265, 2272, 0, 2257, 2259, 2258, 2271, 2273, 2267, 2268,
+ 2278, 2274, 2269, 2260, 2262, 2265, 2275, 2277, 2269, 2276,
+ 2279, 2267, 2270, 2268, 2270, 2280, 2271, 2281, 2272, 2273,
+ 2275, 2277, 2276, 2282, 2273, 2274, 2278, 2278, 2274, 2283,
+ 0, 2284, 2286, 2275, 2277, 2282, 2276, 2279, 2287, 2288,
+ 2280, 0, 2280, 2283, 2281, 2285, 2290, 2291, 2285, 2293,
+ 2282, 2294, 2295, 2292, 2291, 2297, 2283, 2284, 2284, 2286,
+ 2292, 2288, 2296, 2285, 2293, 2287, 2288, 2299, 2290, 2300,
+ 2296, 2301, 2285, 2290, 2291, 2285, 2293, 2298, 2294, 2295,
+
+ 2292, 2300, 2297, 2302, 2303, 2305, 2298, 2304, 2311, 2296,
+ 0, 2306, 2307, 2301, 2299, 2310, 2300, 2313, 2301, 2308,
+ 2304, 2306, 0, 2305, 2298, 2307, 2315, 2308, 2312, 2316,
+ 2302, 2303, 2305, 2317, 2304, 2311, 2312, 2310, 2306, 2307,
+ 2314, 2319, 2310, 2318, 2313, 0, 2308, 2322, 2315, 2314,
+ 2316, 2320, 2321, 2315, 2324, 2312, 2316, 2317, 2318, 2320,
+ 2317, 2326, 2332, 2325, 2321, 2330, 2324, 2314, 2319, 2318,
+ 2318, 2325, 2322, 2328, 2322, 2331, 2333, 2330, 2320, 2321,
+ 2328, 2324, 2329, 2334, 2333, 2318, 2329, 2335, 2326, 2332,
+ 2325, 2338, 2330, 2340, 2336, 2341, 0, 2339, 2331, 2335,
+
+ 2328, 2345, 2331, 2333, 2339, 2334, 2336, 2342, 2341, 2329,
+ 2334, 2344, 2344, 2340, 2335, 2346, 2342, 2343, 2338, 2350,
+ 2340, 2336, 2341, 2347, 2339, 2351, 2343, 2345, 2345, 2355,
+ 2348, 2352, 0, 2346, 2342, 2358, 2358, 2353, 2344, 2354,
+ 2351, 2354, 2346, 2355, 2343, 2348, 2357, 2348, 2347, 2356,
+ 2347, 2350, 2351, 2352, 2348, 2356, 2355, 2348, 2352, 2353,
+ 2360, 2361, 2358, 2362, 2353, 2363, 2354, 2364, 2357, 2365,
+ 2372, 2368, 2348, 2357, 2348, 2366, 2356, 2363, 2369, 2367,
+ 2373, 2366, 2360, 2361, 2372, 2362, 2370, 2360, 2361, 0,
+ 2362, 2367, 2363, 2371, 2374, 2371, 2375, 2372, 2376, 2364,
+
+ 2369, 2365, 2366, 2368, 2373, 2369, 2367, 2373, 2370, 2377,
+ 2379, 2378, 2374, 2370, 2375, 2380, 2376, 2381, 2388, 2383,
+ 2371, 2374, 2385, 2375, 2378, 2376, 2383, 2377, 2387, 2385,
+ 2386, 2392, 0, 2389, 2390, 0, 2377, 2391, 2378, 0,
+ 2381, 2389, 2379, 2397, 2381, 0, 2383, 2380, 2386, 2385,
+ 2388, 2395, 2390, 2392, 2387, 2387, 2399, 2386, 2392, 2389,
+ 2389, 2390, 2395, 2391, 2391, 2393, 2396, 2393, 2389, 2398,
+ 2397, 2401, 2393, 2402, 2399, 2403, 2404, 2396, 2395, 2407,
+ 2406, 2398, 2408, 2399, 2402, 2410, 2401, 2403, 2411, 2408,
+ 2409, 2404, 2393, 2396, 2393, 2413, 2398, 2414, 2401, 2416,
+
+ 2402, 2407, 2403, 2404, 2406, 2409, 2407, 2406, 2415, 2408,
+ 2417, 2418, 2410, 2419, 2411, 2411, 2426, 2409, 2421, 2420,
+ 2423, 2414, 2413, 2425, 2414, 0, 2422, 2431, 2424, 2418,
+ 2415, 2416, 2420, 2423, 2428, 2415, 2424, 2430, 2418, 2427,
+ 2419, 2422, 2417, 2432, 2421, 2421, 2420, 2423, 2426, 2425,
+ 2425, 2431, 2427, 2422, 2431, 2424, 2428, 2433, 2434, 2435,
+ 2430, 2428, 2436, 2438, 2430, 2437, 2427, 2439, 2442, 2436,
+ 2432, 2441, 0, 2443, 2445, 2442, 2434, 2435, 2449, 2433,
+ 2443, 2439, 2446, 0, 2433, 2434, 2435, 2445, 2437, 2436,
+ 2438, 2448, 2437, 2441, 2439, 2442, 2444, 2447, 2441, 2450,
+
+ 2443, 2445, 2451, 2444, 2447, 2446, 2452, 0, 2453, 2446,
+ 2449, 2454, 2455, 2448, 2457, 2452, 2453, 2459, 2448, 2454,
+ 2450, 2456, 2462, 2444, 2447, 2460, 2450, 2456, 2451, 2451,
+ 2463, 2461, 2459, 2452, 2455, 2453, 2460, 2464, 2454, 2455,
+ 2469, 2457, 2466, 2468, 2459, 2471, 2471, 2470, 2456, 2463,
+ 2472, 2476, 2460, 2461, 2462, 2475, 2468, 2463, 2461, 2478,
+ 2466, 2479, 2464, 2482, 2464, 2477, 2469, 2469, 2486, 2466,
+ 2468, 2470, 2471, 2495, 2470, 2484, 2472, 2472, 2475, 2479,
+ 2477, 2486, 2475, 2476, 2484, 2487, 2478, 2490, 2479, 2493,
+ 2482, 2492, 2477, 2491, 2491, 2486, 2487, 2492, 2497, 2494,
+
+ 2495, 2499, 2484, 2500, 2513, 2501, 0, 2504, 2502, 2490,
+ 2500, 2493, 2487, 2507, 2490, 2506, 2493, 2503, 2492, 2502,
+ 2491, 2494, 2503, 2506, 2508, 2497, 2494, 2510, 2509, 2504,
+ 2500, 2501, 2501, 2499, 2504, 2502, 2513, 2507, 2512, 2508,
+ 2507, 2514, 2506, 2509, 2503, 2515, 2517, 2518, 2523, 2520,
+ 2514, 2508, 2519, 2525, 2510, 2509, 2512, 2515, 2520, 2522,
+ 2519, 2524, 2525, 2526, 0, 2512, 2528, 2527, 2514, 2529,
+ 0, 2518, 2515, 2517, 2518, 2523, 2520, 2531, 2532, 2519,
+ 2525, 2526, 2529, 2524, 2530, 2522, 2522, 2535, 2524, 2527,
+ 2526, 2528, 2531, 2528, 2527, 2533, 2529, 2530, 2536, 2534,
+
+ 2532, 2537, 2533, 2538, 2531, 2532, 2534, 2539, 2540, 2535,
+ 2541, 2530, 0, 2543, 2535, 2544, 2542, 0, 2545, 2541,
+ 2547, 2546, 2533, 2540, 0, 2536, 2534, 2547, 2537, 0,
+ 2538, 2548, 2552, 0, 2539, 2540, 2546, 2541, 2542, 2543,
+ 2543, 2544, 2544, 2542, 2545, 2545, 2548, 2547, 2546, 2549,
+ 2551, 2550, 2553, 2554, 2555, 2556, 2549, 2550, 2548, 2552,
+ 2553, 2551, 2560, 2564, 2558, 2561, 2562, 2563, 2557, 2560,
+ 2559, 2556, 2566, 2562, 2563, 0, 2549, 2551, 2550, 2553,
+ 2554, 2555, 2556, 2557, 2558, 2559, 2565, 2561, 2569, 2560,
+ 2564, 2558, 2561, 2562, 2563, 2557, 2568, 2559, 2571, 2566,
+
+ 2567, 2567, 2569, 2568, 2565, 2570, 2573, 2572, 2570, 2574,
+ 2576, 2571, 2572, 2565, 2575, 2569, 2581, 2577, 2578, 0,
+ 0, 2581, 2583, 2568, 2574, 2571, 2580, 2567, 2576, 2577,
+ 2578, 2573, 2570, 2573, 2572, 2580, 2574, 2576, 2582, 2584,
+ 2575, 2575, 2582, 2581, 2577, 2578, 2583, 2585, 2586, 2583,
+ 2587, 2588, 2584, 2580, 2589, 0, 2591, 0, 2593, 2594,
+ 2595, 2597, 0, 2596, 0, 2582, 2584, 0, 2594, 2585,
+ 2586, 2596, 2599, 2597, 2585, 2586, 2595, 2587, 2588, 2599,
+ 2589, 2589, 2591, 2591, 2593, 2593, 2594, 2595, 2597, 2600,
+ 2596, 2601, 2603, 2602, 2604, 0, 2601, 2605, 2600, 2599,
+
+ 2602, 2604, 2606, 2607, 2608, 0, 2609, 2611, 2614, 2606,
+ 2603, 2615, 2607, 2608, 2612, 2618, 2600, 0, 2601, 2603,
+ 2602, 2604, 2605, 2613, 2605, 2617, 2614, 2612, 2613, 2606,
+ 2607, 2608, 2609, 2609, 2611, 2614, 2619, 2620, 2615, 2621,
+ 2622, 2612, 2618, 2617, 2623, 2619, 2620, 2627, 2621, 2624,
+ 2613, 2629, 2617, 2625, 2626, 2627, 2623, 2628, 2624, 2630,
+ 2622, 2631, 2625, 2619, 2620, 2626, 2621, 2622, 2631, 2633,
+ 2632, 2623, 2635, 2636, 2627, 2637, 2624, 2628, 2629, 2632,
+ 2625, 2626, 2638, 2639, 2628, 2640, 2630, 0, 2631, 2641,
+ 2633, 2638, 2642, 2640, 2643, 2639, 2633, 2632, 2644, 2635,
+
+ 2636, 2643, 2641, 2646, 2645, 2644, 2647, 2637, 2649, 2638,
+ 2639, 2648, 2640, 0, 2642, 2651, 2641, 0, 0, 2642,
+ 2656, 2643, 2653, 2651, 2654, 2644, 2645, 2656, 2646, 2655,
+ 2646, 2645, 2654, 2647, 0, 2649, 2648, 2657, 2648, 2658,
+ 2653, 2659, 2651, 2663, 2655, 2660, 2664, 2656, 2659, 2653,
+ 2663, 2654, 2665, 2660, 2666, 2664, 2655, 2667, 2668, 2657,
+ 2669, 2658, 2670, 2671, 2657, 2672, 2658, 2668, 2659, 2667,
+ 2663, 2674, 2660, 2664, 2675, 2671, 2665, 2676, 2670, 2665,
+ 2677, 2666, 2682, 2674, 2667, 2668, 2680, 2669, 2672, 2670,
+ 2671, 2679, 2672, 2680, 2677, 2681, 2684, 2675, 2674, 2685,
+
+ 2687, 2675, 2681, 2679, 2676, 2686, 2688, 2677, 2689, 2682,
+ 0, 2684, 2690, 2680, 2688, 2693, 2695, 2685, 2679, 2691,
+ 2692, 2702, 2681, 2684, 2700, 0, 2685, 2687, 2686, 2694,
+ 2693, 2692, 2686, 2688, 2690, 2689, 2694, 2691, 2703, 2690,
+ 2701, 2704, 2693, 2695, 2705, 2701, 2691, 2692, 2702, 2709,
+ 2700, 2700, 2703, 2710, 2706, 2704, 2694, 2707, 2705, 2708,
+ 2710, 2711, 2713, 2716, 0, 2703, 2718, 2701, 2704, 2717,
+ 2719, 2705, 2706, 2711, 0, 2707, 2709, 2708, 2727, 2718,
+ 2710, 2706, 2720, 2723, 2707, 2716, 2708, 2721, 2711, 2713,
+ 2716, 2717, 2719, 2718, 2722, 2721, 2717, 2719, 2728, 2725,
+
+ 2727, 2720, 2723, 2729, 2730, 2727, 2731, 2732, 2733, 2720,
+ 2723, 2725, 2722, 2734, 2721, 2729, 2733, 2735, 2737, 2736,
+ 2728, 2722, 2739, 2738, 0, 2728, 2725, 2737, 2744, 2732,
+ 2729, 2730, 2738, 2731, 2732, 2733, 2740, 2735, 2741, 2742,
+ 2734, 2736, 0, 2745, 2735, 2737, 2736, 2743, 2748, 2749,
+ 2738, 2742, 2751, 2750, 2739, 2744, 2752, 2751, 2740, 2753,
+ 2754, 2755, 2748, 2740, 2741, 2741, 2742, 2756, 2762, 2743,
+ 2745, 2758, 2760, 2754, 2743, 2748, 2749, 2750, 2752, 2757,
+ 2750, 2753, 2761, 2752, 2751, 2759, 2753, 2754, 2761, 2758,
+ 2756, 2760, 2763, 2755, 2756, 2764, 2765, 2759, 2758, 2760,
+
+ 2762, 2757, 0, 2769, 2768, 2767, 2757, 2773, 0, 2761,
+ 0, 2765, 2759, 2771, 2774, 2775, 0, 2764, 0, 2777,
+ 2778, 2779, 2764, 2765, 2763, 2767, 2768, 2769, 2771, 2773,
+ 2769, 2768, 2767, 2777, 2773, 2776, 2774, 2775, 2778, 2779,
+ 2771, 2774, 2775, 2780, 2776, 2781, 2777, 2778, 2779, 2782,
+ 2785, 2786, 2787, 2790, 2793, 2794, 0, 2791, 2792, 2785,
+ 2795, 2790, 2776, 2781, 2791, 0, 2792, 2798, 2795, 2780,
+ 2780, 2782, 2781, 2787, 2796, 2794, 2782, 2785, 2797, 2787,
+ 2790, 2793, 2794, 2786, 2791, 2792, 2801, 2795, 2799, 2804,
+ 2797, 2805, 2796, 2803, 2798, 2806, 2799, 2806, 2801, 2807,
+
+ 2803, 2796, 2808, 2811, 2810, 2797, 2812, 2819, 2809, 0,
+ 2814, 2816, 2804, 2801, 2817, 2799, 2804, 2809, 2805, 2813,
+ 2803, 2813, 2806, 2820, 2827, 2812, 2821, 2822, 2817, 2816,
+ 2811, 2807, 2814, 2812, 2808, 2809, 2810, 2814, 2816, 2819,
+ 2822, 2817, 2825, 2823, 2828, 2830, 2813, 2820, 2826, 2821,
+ 2820, 2827, 0, 2821, 2822, 2823, 2831, 2826, 2832, 2834,
+ 2836, 2838, 2837, 0, 0, 2843, 2840, 2836, 2825, 2825,
+ 2823, 2828, 2830, 2839, 2845, 2826, 2838, 2846, 2839, 2831,
+ 2832, 2840, 2847, 2831, 2837, 2832, 2834, 2836, 2838, 2837,
+ 2842, 2843, 2843, 2840, 2848, 2852, 2849, 2842, 2850, 2853,
+
+ 2855, 2845, 2856, 2858, 2846, 2839, 2857, 2855, 2853, 2847,
+ 2849, 2860, 2850, 2864, 2865, 2862, 2859, 2842, 2848, 2869,
+ 2861, 2848, 2852, 2849, 2862, 2850, 2853, 2855, 2859, 2856,
+ 2858, 2863, 2857, 2857, 2861, 2870, 2866, 2877, 2860, 2876,
+ 0, 2865, 2862, 2859, 2863, 2864, 2873, 2861, 2872, 2874,
+ 2873, 2869, 2879, 2872, 2875, 2880, 2874, 2870, 2863, 2866,
+ 2876, 2875, 2870, 2866, 2883, 2878, 2876, 2878, 2885, 2877,
+ 2886, 0, 2888, 2873, 2888, 2879, 2874, 2889, 2892, 2879,
+ 2872, 2875, 2880, 2890, 2893, 2896, 2883, 2885, 2891, 2891,
+ 2973, 2883, 2878, 2893, 2886, 2885, 2894, 2886, 2891, 2888,
+
+ 2892, 2889, 2905, 2894, 2889, 2892, 2895, 2897, 0, 2890,
+ 2890, 2893, 2896, 2898, 2899, 2891, 2891, 2900, 0, 2895,
+ 2897, 2898, 2973, 2894, 2901, 2900, 2902, 2899, 2904, 2905,
+ 2903, 2902, 2912, 2895, 2897, 2903, 2904, 2898, 2906, 2911,
+ 2898, 2899, 2907, 2901, 2900, 2908, 0, 2909, 2898, 2910,
+ 2911, 2901, 0, 2913, 2912, 2904, 2914, 2914, 2902, 2912,
+ 2913, 2923, 2903, 0, 2906, 2906, 2911, 2916, 2907, 2907,
+ 2917, 2908, 2908, 2909, 2909, 2910, 2910, 2915, 2917, 2918,
+ 2913, 2919, 2924, 2914, 2920, 2921, 2925, 2926, 2923, 2916,
+ 2915, 2920, 2921, 2928, 2916, 2929, 2926, 2917, 2930, 2919,
+
+ 2933, 2918, 2931, 2934, 2915, 2935, 2918, 0, 2919, 2924,
+ 2925, 2920, 2921, 2925, 2926, 2929, 2936, 2937, 2940, 2939,
+ 2928, 2934, 2929, 2935, 2931, 2930, 2941, 2933, 2939, 2931,
+ 2934, 2942, 2935, 2943, 2936, 2937, 2945, 2946, 2950, 2944,
+ 2954, 2949, 2948, 2936, 2937, 2940, 2939, 2944, 2955, 2946,
+ 2947, 2943, 2945, 2941, 2942, 2947, 2948, 2957, 2942, 2949,
+ 2943, 2950, 2954, 2945, 2946, 2950, 2944, 2954, 2949, 2948,
+ 2958, 2959, 2960, 2959, 2962, 2955, 2963, 2964, 2968, 0,
+ 2968, 2960, 2947, 2958, 2957, 2969, 2972, 2975, 2970, 2977,
+ 0, 0, 2964, 2972, 2963, 2977, 2979, 2958, 2959, 2960,
+
+ 2980, 2962, 2975, 2963, 2964, 2968, 2970, 2969, 2981, 2984,
+ 2982, 2985, 2969, 2972, 2975, 2970, 2977, 2986, 2979, 2989,
+ 2997, 2987, 2980, 2979, 2987, 2985, 2990, 2980, 2982, 2991,
+ 2986, 2984, 2992, 2993, 2981, 2981, 2984, 2982, 2985, 2995,
+ 2993, 2994, 2998, 2999, 2986, 3000, 2989, 2987, 2987, 2994,
+ 2992, 2987, 2997, 2990, 3001, 3006, 2991, 3004, 3002, 2992,
+ 2993, 2995, 3008, 3001, 2998, 2999, 2995, 3005, 2994, 2998,
+ 2999, 3003, 3000, 3002, 3010, 3014, 3005, 3003, 3007, 3004,
+ 3007, 3001, 3011, 3014, 3004, 3002, 3012, 3006, 3013, 3008,
+ 3020, 3015, 3018, 0, 3005, 3016, 3022, 3010, 3003, 3018,
+
+ 3036, 3010, 3014, 3015, 3011, 3007, 3023, 3016, 3012, 3011,
+ 3022, 3024, 3025, 3012, 3013, 3013, 3026, 3020, 3015, 3018,
+ 3023, 3027, 3016, 3022, 3030, 3024, 3029, 3036, 3028, 3033,
+ 3031, 0, 3027, 3023, 3026, 3025, 3028, 3031, 3024, 3025,
+ 3032, 3034, 3040, 3026, 3037, 3029, 3030, 3033, 3027, 3041,
+ 3034, 3030, 3037, 3029, 3043, 3028, 3033, 3031, 3035, 3035,
+ 3043, 3045, 3047, 3048, 3049, 3051, 3032, 3032, 3034, 3040,
+ 3054, 3037, 3050, 3047, 3048, 3055, 3041, 3056, 3057, 3061,
+ 3058, 3043, 3055, 3050, 3058, 3035, 3049, 3051, 3045, 3047,
+ 3048, 3049, 3051, 3059, 3064, 3056, 3062, 3054, 3068, 3050,
+
+ 3063, 3059, 3055, 3080, 3056, 3061, 3061, 3058, 3063, 3062,
+ 3057, 3067, 3069, 3072, 3071, 3073, 3074, 3075, 3067, 3071,
+ 3059, 3064, 3079, 3062, 3075, 3081, 3076, 3063, 3074, 3079,
+ 3068, 3077, 3078, 3081, 3069, 3080, 3082, 3084, 3067, 3069,
+ 3072, 3071, 3073, 3074, 3075, 3076, 3086, 3077, 3083, 3079,
+ 3078, 3082, 3081, 3076, 3085, 3083, 3087, 3095, 3077, 3078,
+ 3088, 3092, 3093, 3082, 3084, 3094, 3085, 3096, 3097, 3093,
+ 3086, 3100, 3076, 3086, 3101, 3083, 3092, 0, 3104, 0,
+ 3087, 3085, 3102, 3087, 3095, 3106, 3088, 3088, 3092, 3093,
+ 3098, 3096, 3108, 3100, 3096, 3103, 3112, 3094, 3100, 3098,
+
+ 3097, 3101, 3109, 3103, 3102, 3105, 3105, 3108, 3117, 3102,
+ 3104, 3109, 3106, 3111, 3110, 3105, 3110, 3098, 3113, 3108,
+ 3114, 3115, 3103, 3112, 3118, 3119, 3113, 3111, 3120, 3109,
+ 3121, 3114, 3105, 3105, 3122, 3117, 3123, 3124, 3125, 3115,
+ 3111, 3110, 3126, 3121, 3127, 3113, 3129, 3114, 3115, 3132,
+ 3120, 3118, 3119, 3128, 3128, 3120, 3122, 3121, 3127, 3130,
+ 3135, 3122, 3137, 3123, 3124, 3125, 3139, 3137, 3135, 3126,
+ 3138, 3127, 3140, 3143, 3139, 3138, 3132, 3140, 3129, 3141,
+ 3128, 3130, 3144, 3144, 3145, 3146, 3130, 3135, 3147, 3137,
+ 3148, 3149, 3145, 3139, 3150, 3147, 3152, 3138, 3146, 3140,
+
+ 3143, 3164, 3155, 3153, 3159, 3141, 3141, 3158, 3148, 3144,
+ 3153, 3145, 3146, 3158, 3154, 3147, 3161, 3148, 3149, 3163,
+ 3162, 3150, 3154, 3165, 3155, 3166, 3167, 3168, 3152, 3155,
+ 3153, 3159, 3163, 3164, 3158, 3170, 0, 3171, 3165, 3174,
+ 0, 3154, 3162, 3161, 3166, 3175, 3163, 3162, 3172, 3168,
+ 3165, 0, 3166, 3167, 3168, 3172, 3173, 3176, 3170, 3171,
+ 3175, 3174, 3170, 3173, 3171, 3179, 3174, 3178, 3184, 3180,
+ 3181, 3183, 3175, 3179, 0, 3172, 3180, 3181, 3176, 3184,
+ 3183, 3185, 3185, 3173, 3176, 3187, 3178, 3186, 3189, 3191,
+ 3200, 3185, 3179, 3186, 3178, 3184, 3180, 3181, 3183, 3190,
+
+ 3192, 3195, 3196, 3201, 3194, 3207, 3190, 3187, 3185, 3185,
+ 3189, 3194, 3187, 3202, 3186, 3189, 3196, 3200, 3210, 3208,
+ 3212, 3191, 3192, 3213, 3213, 3195, 3190, 3192, 3195, 3196,
+ 3201, 3194, 3207, 3215, 3209, 3217, 3202, 3214, 3214, 0,
+ 3202, 3208, 3209, 3216, 3216, 3210, 3208, 3212, 3219, 3220,
+ 3221, 3223, 3213, 0, 3222, 3229, 0, 3233, 3217, 3233,
+ 3215, 3209, 3217, 3222, 3223, 3228, 3214, 3220, 3234, 3240,
+ 3219, 3235, 3216, 3226, 0, 3219, 3220, 3221, 3223, 3227,
+ 3226, 3222, 3229, 3230, 3233, 3236, 3227, 3228, 3234, 3237,
+ 3230, 3240, 3228, 3239, 3235, 3234, 3240, 3241, 3235, 3242,
+
+ 3226, 3237, 3239, 3236, 3243, 3244, 3227, 3245, 3249, 3246,
+ 3230, 3247, 3236, 3249, 0, 3250, 3237, 3242, 3257, 3248,
+ 3239, 3246, 3248, 3251, 3241, 3251, 3242, 3252, 3258, 3253,
+ 3243, 3243, 3244, 3247, 3245, 3253, 3246, 3248, 3247, 3252,
+ 3249, 3254, 3255, 3256, 3259, 3257, 3248, 3250, 3260, 3248,
+ 3251, 3256, 3261, 0, 3252, 3262, 3253, 3266, 3263, 3268,
+ 3258, 3272, 3273, 3254, 3255, 3259, 3274, 3262, 3254, 3255,
+ 3256, 3259, 3269, 3275, 3277, 3260, 3278, 3279, 3280, 3261,
+ 3263, 3284, 3262, 3286, 3266, 3263, 3268, 3289, 3272, 3273,
+ 3269, 3281, 3281, 3274, 3283, 3285, 3291, 3293, 3286, 3269,
+
+ 3275, 3277, 3287, 3278, 3279, 3280, 3296, 3290, 3284, 3287,
+ 3286, 3293, 3283, 3285, 3289, 3290, 3292, 3294, 3281, 3295,
+ 3299, 3283, 3285, 3291, 3293, 3298, 3302, 3303, 3292, 3287,
+ 3304, 3304, 3294, 3296, 3290, 3302, 3305, 3298, 3309, 3306,
+ 3308, 0, 3310, 3292, 3294, 3295, 3295, 3299, 3306, 3311,
+ 3312, 3303, 3298, 3302, 3303, 3310, 3313, 3304, 3312, 3316,
+ 3317, 3314, 3305, 3305, 3308, 3313, 3306, 3308, 3320, 3310,
+ 3309, 3311, 3314, 3321, 3324, 3324, 3311, 3312, 3317, 0,
+ 3316, 3333, 3334, 3313, 3336, 3321, 3316, 3317, 3314, 3337,
+ 3338, 3320, 3340, 3342, 3343, 3320, 0, 3342, 3336, 3344,
+
+ 3321, 3324, 3347, 3333, 3357, 0, 3334, 3345, 3333, 3334,
+ 3351, 3336, 3343, 3357, 3345, 3347, 3337, 3338, 3352, 3340,
+ 3342, 3343, 3344, 3349, 3350, 3355, 3344, 3349, 3354, 3347,
+ 3353, 3357, 3351, 3356, 3345, 3358, 3359, 3351, 3359, 3355,
+ 3350, 3356, 3353, 3352, 3360, 3352, 3358, 3361, 3363, 3362,
+ 3349, 3350, 3355, 3364, 3354, 3354, 3360, 3353, 3366, 3364,
+ 3356, 3365, 3358, 3359, 3362, 3361, 3367, 3368, 3372, 3374,
+ 3363, 3360, 3373, 3367, 3361, 3363, 3362, 3376, 3378, 3373,
+ 3364, 3372, 3375, 3365, 3377, 3366, 3379, 0, 3365, 3368,
+ 3380, 3382, 3383, 3367, 3368, 3372, 3374, 0, 3380, 3373,
+
+ 3375, 3381, 3384, 3387, 3376, 3378, 0, 3391, 3381, 3375,
+ 3377, 3377, 3388, 3379, 3383, 3382, 3389, 3380, 3382, 3383,
+ 3385, 3386, 3385, 3390, 3384, 3388, 3393, 3395, 3381, 3384,
+ 3392, 3389, 3396, 3386, 3391, 3387, 3398, 3392, 3397, 3388,
+ 3400, 3405, 3402, 3389, 3396, 3390, 3397, 3385, 3386, 3406,
+ 3390, 3402, 3400, 3393, 3395, 3407, 3408, 3392, 3409, 3396,
+ 3410, 3415, 3417, 3398, 3408, 3397, 3411, 3400, 3405, 3402,
+ 3412, 3420, 3413, 3414, 3407, 3406, 3406, 3420, 3421, 3411,
+ 3413, 3423, 3407, 3408, 3412, 3421, 3424, 3429, 3415, 3417,
+ 3409, 3434, 3410, 3411, 3423, 3414, 3426, 3412, 3420, 3413,
+
+ 3414, 3429, 3427, 3426, 3428, 3421, 3430, 3431, 3423, 3424,
+ 3432, 0, 3428, 3424, 3429, 3431, 3433, 3439, 3434, 3437,
+ 3430, 3438, 3440, 3426, 3427, 3439, 3437, 3442, 3441, 3427,
+ 3438, 3428, 3432, 3430, 3431, 3443, 3444, 3432, 3433, 3447,
+ 0, 3448, 3445, 3433, 3439, 3446, 3437, 3447, 3438, 3440,
+ 3441, 3450, 3451, 3452, 3454, 3441, 3456, 3455, 3444, 3442,
+ 3457, 3443, 3443, 3444, 3445, 3455, 3447, 3446, 3457, 3445,
+ 3459, 3463, 3446, 3448, 3451, 0, 3456, 3454, 3450, 3451,
+ 3452, 3454, 3458, 3456, 3455, 3460, 3461, 3457, 3465, 3466,
+ 3458, 3468, 3466, 3460, 3470, 3467, 3469, 3463, 3463, 3468,
+
+ 3461, 3471, 3459, 3472, 3469, 3476, 3473, 3466, 3470, 3458,
+ 3475, 3475, 3460, 3461, 3478, 3465, 3466, 3467, 3468, 3466,
+ 3473, 3470, 3467, 3469, 3479, 3472, 3477, 3471, 3471, 3481,
+ 3472, 3476, 3476, 3473, 3477, 3480, 3482, 3475, 3483, 3484,
+ 3478, 3478, 3485, 3486, 3482, 0, 3489, 3493, 3487, 3481,
+ 3479, 3479, 3488, 3477, 3489, 3490, 3481, 3480, 3496, 0,
+ 0, 3484, 3480, 3482, 0, 3483, 3484, 3485, 3487, 3485,
+ 3486, 3497, 3488, 3489, 3493, 3487, 3491, 3490, 3494, 3488,
+ 3496, 3498, 3490, 3499, 3491, 3496, 3494, 3500, 3502, 3498,
+ 3505, 3499, 3503, 3497, 3504, 3506, 3509, 0, 3497, 3510,
+
+ 3503, 0, 3504, 3491, 3507, 3494, 3513, 3511, 3498, 3519,
+ 3499, 3520, 3517, 3500, 3500, 3502, 3505, 3505, 3516, 3503,
+ 3517, 3504, 3506, 3509, 3507, 0, 3510, 3511, 3513, 3518,
+ 0, 3507, 0, 3513, 3511, 0, 3519, 3518, 3520, 3517,
+ 3516, 0, 0, 0, 0, 3516, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3518, 3524, 3524, 3524,
+ 3524, 3524, 3524, 3524, 3525, 3525, 3525, 3525, 3525, 3525,
+ 3525, 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3527, 3527,
+ 3527, 3527, 3527, 3527, 3527, 3528, 3528, 3528, 3528, 3528,
+ 3528, 3528, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3530,
+
+ 3530, 3530, 3530, 3530, 3530, 3530, 3532, 3532, 0, 3532,
+ 3532, 3532, 3532, 3533, 3533, 0, 0, 0, 3533, 3533,
+ 3534, 3534, 0, 0, 3534, 0, 3534, 3535, 0, 0,
+ 0, 0, 0, 3535, 3536, 3536, 0, 0, 0, 3536,
+ 3536, 3537, 0, 0, 0, 0, 0, 3537, 3538, 3538,
+ 0, 3538, 3538, 3538, 3538, 3539, 0, 0, 0, 0,
+ 0, 3539, 3540, 3540, 0, 0, 0, 3540, 3540, 3541,
+ 3541, 0, 3541, 3541, 3541, 3541, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+ 3523, 3523, 3523
} ;
static yy_state_type yy_last_accepting_state;
@@ -3990,7 +4029,7 @@ static void config_end_include(void)
}
#endif
-#line 3991 "<stdout>"
+#line 4030 "<stdout>"
#define YY_NO_INPUT 1
#line 191 "util/configlexer.lex"
#ifndef YY_NO_UNPUT
@@ -3999,9 +4038,9 @@ static void config_end_include(void)
#ifndef YY_NO_INPUT
#define YY_NO_INPUT 1
#endif
-#line 4000 "<stdout>"
+#line 4039 "<stdout>"
-#line 4002 "<stdout>"
+#line 4041 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -4225,7 +4264,7 @@ YY_DECL
{
#line 211 "util/configlexer.lex"
-#line 4226 "<stdout>"
+#line 4265 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -4258,13 +4297,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3484 )
+ if ( yy_current_state >= 3524 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 9961 );
+ while ( yy_base[yy_current_state] != 10077 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -4889,32 +4928,32 @@ YY_RULE_SETUP
case 120:
YY_RULE_SETUP
#line 334 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) }
YY_BREAK
case 121:
YY_RULE_SETUP
#line 335 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
YY_BREAK
case 122:
YY_RULE_SETUP
#line 336 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
YY_BREAK
case 123:
YY_RULE_SETUP
#line 337 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
YY_BREAK
case 124:
YY_RULE_SETUP
#line 338 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 339 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
YY_BREAK
case 126:
YY_RULE_SETUP
@@ -4924,1034 +4963,1049 @@ YY_RULE_SETUP
case 127:
YY_RULE_SETUP
#line 341 "util/configlexer.lex"
-{ YDVAR(0, VAR_AUTH_ZONE) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 128:
YY_RULE_SETUP
#line 342 "util/configlexer.lex"
-{ YDVAR(0, VAR_RPZ) }
+{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) }
YY_BREAK
case 129:
YY_RULE_SETUP
#line 343 "util/configlexer.lex"
-{ YDVAR(1, VAR_TAGS) }
+{ YDVAR(0, VAR_AUTH_ZONE) }
YY_BREAK
case 130:
YY_RULE_SETUP
#line 344 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
+{ YDVAR(0, VAR_RPZ) }
YY_BREAK
case 131:
YY_RULE_SETUP
#line 345 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
+{ YDVAR(1, VAR_TAGS) }
YY_BREAK
case 132:
YY_RULE_SETUP
#line 346 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG) }
+{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
YY_BREAK
case 133:
YY_RULE_SETUP
#line 347 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG_NAME) }
+{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
YY_BREAK
case 134:
YY_RULE_SETUP
#line 348 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEFILE) }
+{ YDVAR(1, VAR_RPZ_LOG) }
YY_BREAK
case 135:
YY_RULE_SETUP
#line 349 "util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+{ YDVAR(1, VAR_RPZ_LOG_NAME) }
YY_BREAK
case 136:
YY_RULE_SETUP
#line 350 "util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+{ YDVAR(1, VAR_ZONEFILE) }
YY_BREAK
case 137:
YY_RULE_SETUP
#line 351 "util/configlexer.lex"
-{ YDVAR(1, VAR_URL) }
+{ YDVAR(1, VAR_MASTER) }
YY_BREAK
case 138:
YY_RULE_SETUP
#line 352 "util/configlexer.lex"
-{ YDVAR(1, VAR_ALLOW_NOTIFY) }
+{ YDVAR(1, VAR_MASTER) }
YY_BREAK
case 139:
YY_RULE_SETUP
#line 353 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
+{ YDVAR(1, VAR_URL) }
YY_BREAK
case 140:
YY_RULE_SETUP
#line 354 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_UPSTREAM) }
+{ YDVAR(1, VAR_ALLOW_NOTIFY) }
YY_BREAK
case 141:
YY_RULE_SETUP
#line 355 "util/configlexer.lex"
-{ YDVAR(1, VAR_FALLBACK_ENABLED) }
+{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
YY_BREAK
case 142:
YY_RULE_SETUP
#line 356 "util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+{ YDVAR(1, VAR_FOR_UPSTREAM) }
YY_BREAK
case 143:
YY_RULE_SETUP
#line 357 "util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+{ YDVAR(1, VAR_FALLBACK_ENABLED) }
YY_BREAK
case 144:
YY_RULE_SETUP
#line 358 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(0, VAR_VIEW) }
YY_BREAK
case 145:
YY_RULE_SETUP
#line 359 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_VIEW_FIRST) }
YY_BREAK
case 146:
YY_RULE_SETUP
#line 360 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
YY_BREAK
case 147:
YY_RULE_SETUP
#line 361 "util/configlexer.lex"
-{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
YY_BREAK
case 148:
YY_RULE_SETUP
#line 362 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
YY_BREAK
case 149:
YY_RULE_SETUP
#line 363 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
+{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
YY_BREAK
case 150:
YY_RULE_SETUP
#line 364 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
YY_BREAK
case 151:
YY_RULE_SETUP
#line 365 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
YY_BREAK
case 152:
YY_RULE_SETUP
#line 366 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
YY_BREAK
case 153:
YY_RULE_SETUP
#line 367 "util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 154:
YY_RULE_SETUP
#line 368 "util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 155:
YY_RULE_SETUP
#line 369 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 156:
YY_RULE_SETUP
#line 370 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 157:
YY_RULE_SETUP
#line 371 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
YY_BREAK
case 158:
YY_RULE_SETUP
#line 372 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
YY_BREAK
case 159:
YY_RULE_SETUP
#line 373 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
YY_BREAK
case 160:
YY_RULE_SETUP
#line 374 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
YY_BREAK
case 161:
YY_RULE_SETUP
#line 375 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
YY_BREAK
case 162:
YY_RULE_SETUP
#line 376 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) }
YY_BREAK
case 163:
YY_RULE_SETUP
#line 377 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_USER_AGENT) }
+{ YDVAR(1, VAR_IDENTITY) }
YY_BREAK
case 164:
YY_RULE_SETUP
#line 378 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
YY_BREAK
case 165:
YY_RULE_SETUP
#line 379 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_HTTP_USER_AGENT) }
YY_BREAK
case 166:
YY_RULE_SETUP
#line 380 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_MODULE_CONF) }
YY_BREAK
case 167:
YY_RULE_SETUP
#line 381 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
YY_BREAK
case 168:
YY_RULE_SETUP
#line 382 "util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
YY_BREAK
case 169:
YY_RULE_SETUP
#line 383 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
YY_BREAK
case 170:
YY_RULE_SETUP
#line 384 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
YY_BREAK
case 171:
YY_RULE_SETUP
#line 385 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
YY_BREAK
case 172:
YY_RULE_SETUP
#line 386 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
YY_BREAK
case 173:
YY_RULE_SETUP
#line 387 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
YY_BREAK
case 174:
YY_RULE_SETUP
#line 388 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
YY_BREAK
case 175:
YY_RULE_SETUP
#line 389 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
YY_BREAK
case 176:
YY_RULE_SETUP
#line 390 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_MAX_RESTART) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
YY_BREAK
case 177:
YY_RULE_SETUP
#line 391 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
YY_BREAK
case 178:
YY_RULE_SETUP
#line 392 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_VAL_MAX_RESTART) }
YY_BREAK
case 179:
YY_RULE_SETUP
#line 393 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
YY_BREAK
case 180:
YY_RULE_SETUP
#line 394 "util/configlexer.lex"
-{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
YY_BREAK
case 181:
YY_RULE_SETUP
#line 395 "util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
YY_BREAK
case 182:
YY_RULE_SETUP
#line 396 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
YY_BREAK
case 183:
YY_RULE_SETUP
#line 397 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
YY_BREAK
case 184:
YY_RULE_SETUP
#line 398 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
YY_BREAK
case 185:
YY_RULE_SETUP
#line 399 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
YY_BREAK
case 186:
YY_RULE_SETUP
#line 400 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
YY_BREAK
case 187:
YY_RULE_SETUP
#line 401 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
YY_BREAK
case 188:
YY_RULE_SETUP
#line 402 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
YY_BREAK
case 189:
YY_RULE_SETUP
#line 403 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_SHA1) }
+{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
YY_BREAK
case 190:
YY_RULE_SETUP
#line 404 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_FAKE_DSA) }
YY_BREAK
case 191:
YY_RULE_SETUP
#line 405 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_FAKE_SHA1) }
YY_BREAK
case 192:
YY_RULE_SETUP
#line 406 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
YY_BREAK
case 193:
YY_RULE_SETUP
#line 407 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
YY_BREAK
case 194:
YY_RULE_SETUP
#line 408 "util/configlexer.lex"
-{
- YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
YY_BREAK
case 195:
YY_RULE_SETUP
-#line 410 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
+#line 409 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
YY_BREAK
case 196:
YY_RULE_SETUP
-#line 411 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_CHECK) }
+#line 410 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
YY_BREAK
case 197:
YY_RULE_SETUP
#line 412 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) }
+{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
YY_BREAK
case 198:
YY_RULE_SETUP
#line 413 "util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+{ YDVAR(1, VAR_ZONEMD_CHECK) }
YY_BREAK
case 199:
YY_RULE_SETUP
#line 414 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) }
YY_BREAK
case 200:
YY_RULE_SETUP
#line 415 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
YY_BREAK
case 201:
YY_RULE_SETUP
#line 416 "util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
YY_BREAK
case 202:
YY_RULE_SETUP
#line 417 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
YY_BREAK
case 203:
YY_RULE_SETUP
#line 418 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
YY_BREAK
case 204:
YY_RULE_SETUP
#line 419 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
YY_BREAK
case 205:
YY_RULE_SETUP
#line 420 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
YY_BREAK
case 206:
YY_RULE_SETUP
#line 421 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_REPLIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
YY_BREAK
case 207:
YY_RULE_SETUP
#line 422 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
YY_BREAK
case 208:
YY_RULE_SETUP
#line 423 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
+{ YDVAR(1, VAR_LOG_REPLIES) }
YY_BREAK
case 209:
YY_RULE_SETUP
#line 424 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_SERVFAIL) }
+{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
YY_BREAK
case 210:
YY_RULE_SETUP
#line 425 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
YY_BREAK
case 211:
YY_RULE_SETUP
#line 426 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(1, VAR_LOG_SERVFAIL) }
YY_BREAK
case 212:
YY_RULE_SETUP
#line 427 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
YY_BREAK
case 213:
YY_RULE_SETUP
#line 428 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
YY_BREAK
case 214:
YY_RULE_SETUP
#line 429 "util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
YY_BREAK
case 215:
YY_RULE_SETUP
#line 430 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
YY_BREAK
case 216:
YY_RULE_SETUP
#line 431 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
YY_BREAK
case 217:
YY_RULE_SETUP
#line 432 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
YY_BREAK
case 218:
YY_RULE_SETUP
#line 433 "util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_ENABLE) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
YY_BREAK
case 219:
YY_RULE_SETUP
#line 434 "util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_KEY) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
YY_BREAK
case 220:
YY_RULE_SETUP
#line 435 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_SHM_ENABLE) }
YY_BREAK
case 221:
YY_RULE_SETUP
#line 436 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(1, VAR_SHM_KEY) }
YY_BREAK
case 222:
YY_RULE_SETUP
#line 437 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
YY_BREAK
case 223:
YY_RULE_SETUP
#line 438 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
YY_BREAK
case 224:
YY_RULE_SETUP
#line 439 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
YY_BREAK
case 225:
YY_RULE_SETUP
#line 440 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
YY_BREAK
case 226:
YY_RULE_SETUP
#line 441 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
YY_BREAK
case 227:
YY_RULE_SETUP
#line 442 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
YY_BREAK
case 228:
YY_RULE_SETUP
#line 443 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
YY_BREAK
case 229:
YY_RULE_SETUP
#line 444 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
YY_BREAK
case 230:
YY_RULE_SETUP
#line 445 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
YY_BREAK
case 231:
YY_RULE_SETUP
#line 446 "util/configlexer.lex"
-{ YDVAR(1, VAR_DYNLIB_FILE) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
YY_BREAK
case 232:
YY_RULE_SETUP
#line 447 "util/configlexer.lex"
-{ YDVAR(0, VAR_DYNLIB) }
+{ YDVAR(0, VAR_PYTHON) }
YY_BREAK
case 233:
YY_RULE_SETUP
#line 448 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(1, VAR_DYNLIB_FILE) }
YY_BREAK
case 234:
YY_RULE_SETUP
#line 449 "util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(0, VAR_DYNLIB) }
YY_BREAK
case 235:
YY_RULE_SETUP
#line 450 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
YY_BREAK
case 236:
YY_RULE_SETUP
#line 451 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
YY_BREAK
case 237:
YY_RULE_SETUP
#line 452 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
YY_BREAK
case 238:
YY_RULE_SETUP
#line 453 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
YY_BREAK
case 239:
YY_RULE_SETUP
#line 454 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
YY_BREAK
case 240:
YY_RULE_SETUP
#line 455 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
YY_BREAK
case 241:
YY_RULE_SETUP
#line 456 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
YY_BREAK
case 242:
YY_RULE_SETUP
#line 457 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
YY_BREAK
case 243:
YY_RULE_SETUP
#line 458 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
YY_BREAK
case 244:
YY_RULE_SETUP
#line 459 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
YY_BREAK
case 245:
YY_RULE_SETUP
#line 460 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
YY_BREAK
case 246:
YY_RULE_SETUP
#line 461 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
YY_BREAK
case 247:
YY_RULE_SETUP
#line 462 "util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
YY_BREAK
case 248:
YY_RULE_SETUP
#line 463 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
YY_BREAK
case 249:
YY_RULE_SETUP
#line 464 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
YY_BREAK
case 250:
YY_RULE_SETUP
#line 465 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
+{ YDVAR(0, VAR_DNSTAP) }
YY_BREAK
case 251:
YY_RULE_SETUP
#line 466 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
YY_BREAK
case 252:
YY_RULE_SETUP
#line 467 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IP) }
+{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
YY_BREAK
case 253:
YY_RULE_SETUP
#line 468 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
YY_BREAK
case 254:
YY_RULE_SETUP
#line 469 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
+{ YDVAR(1, VAR_DNSTAP_IP) }
YY_BREAK
case 255:
YY_RULE_SETUP
#line 470 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
+{ YDVAR(1, VAR_DNSTAP_TLS) }
YY_BREAK
case 256:
YY_RULE_SETUP
#line 471 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
+{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
YY_BREAK
case 257:
YY_RULE_SETUP
-#line 473 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
+#line 472 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
YY_BREAK
case 258:
YY_RULE_SETUP
-#line 475 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+#line 473 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
YY_BREAK
case 259:
YY_RULE_SETUP
-#line 476 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+#line 475 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
YY_BREAK
case 260:
YY_RULE_SETUP
#line 477 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
YY_BREAK
case 261:
YY_RULE_SETUP
#line 478 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
YY_BREAK
case 262:
YY_RULE_SETUP
#line 479 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
YY_BREAK
case 263:
YY_RULE_SETUP
-#line 481 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+#line 480 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
YY_BREAK
case 264:
YY_RULE_SETUP
-#line 483 "util/configlexer.lex"
+#line 481 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
YY_BREAK
case 265:
YY_RULE_SETUP
-#line 485 "util/configlexer.lex"
+#line 483 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
YY_BREAK
case 266:
YY_RULE_SETUP
-#line 487 "util/configlexer.lex"
+#line 485 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
YY_BREAK
case 267:
YY_RULE_SETUP
-#line 489 "util/configlexer.lex"
+#line 487 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
YY_BREAK
case 268:
YY_RULE_SETUP
-#line 491 "util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 489 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
YY_BREAK
case 269:
YY_RULE_SETUP
-#line 492 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT) }
+#line 491 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
YY_BREAK
case 270:
YY_RULE_SETUP
#line 493 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
case 271:
YY_RULE_SETUP
#line 494 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
YY_BREAK
case 272:
YY_RULE_SETUP
#line 495 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
case 273:
YY_RULE_SETUP
#line 496 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
YY_BREAK
case 274:
YY_RULE_SETUP
#line 497 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
case 275:
YY_RULE_SETUP
#line 498 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
YY_BREAK
case 276:
YY_RULE_SETUP
#line 499 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
YY_BREAK
case 277:
YY_RULE_SETUP
#line 500 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
YY_BREAK
case 278:
YY_RULE_SETUP
#line 501 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
YY_BREAK
case 279:
YY_RULE_SETUP
#line 502 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT) }
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
YY_BREAK
case 280:
YY_RULE_SETUP
#line 503 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_NUM) }
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
YY_BREAK
case 281:
YY_RULE_SETUP
#line 504 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
YY_BREAK
case 282:
YY_RULE_SETUP
#line 505 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_LOW_RTT) }
YY_BREAK
case 283:
YY_RULE_SETUP
#line 506 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
YY_BREAK
case 284:
YY_RULE_SETUP
#line 507 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 285:
YY_RULE_SETUP
#line 508 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 286:
YY_RULE_SETUP
#line 509 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 287:
YY_RULE_SETUP
#line 510 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSCRYPT) }
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
YY_BREAK
case 288:
YY_RULE_SETUP
#line 511 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+{ YDVAR(2, VAR_RESPONSE_IP) }
YY_BREAK
case 289:
YY_RULE_SETUP
#line 512 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
YY_BREAK
case 290:
YY_RULE_SETUP
#line 513 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+{ YDVAR(0, VAR_DNSCRYPT) }
YY_BREAK
case 291:
YY_RULE_SETUP
#line 514 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
YY_BREAK
case 292:
YY_RULE_SETUP
#line 515 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
YY_BREAK
case 293:
YY_RULE_SETUP
#line 516 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
YY_BREAK
case 294:
YY_RULE_SETUP
#line 517 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
YY_BREAK
case 295:
YY_RULE_SETUP
-#line 519 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+#line 518 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
YY_BREAK
case 296:
YY_RULE_SETUP
-#line 521 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+#line 519 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
YY_BREAK
case 297:
YY_RULE_SETUP
-#line 522 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+#line 520 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
YY_BREAK
case 298:
YY_RULE_SETUP
-#line 523 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES) }
+#line 522 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
YY_BREAK
case 299:
YY_RULE_SETUP
#line 524 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
YY_BREAK
case 300:
YY_RULE_SETUP
#line 525 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
YY_BREAK
case 301:
YY_RULE_SETUP
#line 526 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_PAD_RESPONSES) }
YY_BREAK
case 302:
YY_RULE_SETUP
#line 527 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
YY_BREAK
case 303:
YY_RULE_SETUP
#line 528 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+{ YDVAR(1, VAR_PAD_QUERIES) }
YY_BREAK
case 304:
YY_RULE_SETUP
#line 529 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
YY_BREAK
case 305:
YY_RULE_SETUP
#line 530 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
YY_BREAK
case 306:
YY_RULE_SETUP
#line 531 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
YY_BREAK
case 307:
YY_RULE_SETUP
#line 532 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
YY_BREAK
case 308:
YY_RULE_SETUP
#line 533 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
YY_BREAK
case 309:
YY_RULE_SETUP
#line 534 "util/configlexer.lex"
-{ YDVAR(0, VAR_CACHEDB) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
case 310:
YY_RULE_SETUP
#line 535 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
case 311:
YY_RULE_SETUP
#line 536 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
YY_BREAK
case 312:
YY_RULE_SETUP
#line 537 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
+{ YDVAR(0, VAR_CACHEDB) }
YY_BREAK
case 313:
YY_RULE_SETUP
#line 538 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
YY_BREAK
case 314:
YY_RULE_SETUP
#line 539 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
YY_BREAK
case 315:
YY_RULE_SETUP
#line 540 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
+{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
YY_BREAK
case 316:
YY_RULE_SETUP
#line 541 "util/configlexer.lex"
-{ YDVAR(0, VAR_IPSET) }
+{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
YY_BREAK
case 317:
YY_RULE_SETUP
#line 542 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V4) }
+{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
YY_BREAK
case 318:
YY_RULE_SETUP
#line 543 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V6) }
+{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
YY_BREAK
case 319:
YY_RULE_SETUP
#line 544 "util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(0, VAR_IPSET) }
YY_BREAK
case 320:
YY_RULE_SETUP
#line 545 "util/configlexer.lex"
-{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+{ YDVAR(1, VAR_IPSET_NAME_V4) }
YY_BREAK
case 321:
YY_RULE_SETUP
#line 546 "util/configlexer.lex"
-{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
+{ YDVAR(1, VAR_IPSET_NAME_V6) }
YY_BREAK
case 322:
YY_RULE_SETUP
#line 547 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
YY_BREAK
case 323:
YY_RULE_SETUP
#line 548 "util/configlexer.lex"
-{ YDVAR(1, VAR_NSID ) }
+{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
YY_BREAK
case 324:
-/* rule 324 can match eol */
YY_RULE_SETUP
#line 549 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++; }
+{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
YY_BREAK
-/* Quoted strings. Strip leading and ending quotes */
case 325:
YY_RULE_SETUP
+#line 550 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+ YY_BREAK
+case 326:
+YY_RULE_SETUP
+#line 551 "util/configlexer.lex"
+{ YDVAR(1, VAR_NSID ) }
+ YY_BREAK
+case 327:
+/* rule 327 can match eol */
+YY_RULE_SETUP
#line 552 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+/* Quoted strings. Strip leading and ending quotes */
+case 328:
+YY_RULE_SETUP
+#line 555 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 553 "util/configlexer.lex"
+#line 556 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 326:
+case 329:
YY_RULE_SETUP
-#line 558 "util/configlexer.lex"
+#line 561 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 327:
-/* rule 327 can match eol */
+case 330:
+/* rule 330 can match eol */
YY_RULE_SETUP
-#line 559 "util/configlexer.lex"
+#line 562 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 328:
+case 331:
YY_RULE_SETUP
-#line 561 "util/configlexer.lex"
+#line 564 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -5964,34 +6018,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 329:
+case 332:
YY_RULE_SETUP
-#line 573 "util/configlexer.lex"
+#line 576 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 574 "util/configlexer.lex"
+#line 577 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 330:
+case 333:
YY_RULE_SETUP
-#line 579 "util/configlexer.lex"
+#line 582 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 331:
-/* rule 331 can match eol */
+case 334:
+/* rule 334 can match eol */
YY_RULE_SETUP
-#line 580 "util/configlexer.lex"
+#line 583 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 332:
+case 335:
YY_RULE_SETUP
-#line 582 "util/configlexer.lex"
+#line 585 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6004,38 +6058,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 333:
+case 336:
YY_RULE_SETUP
-#line 594 "util/configlexer.lex"
+#line 597 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 596 "util/configlexer.lex"
+#line 599 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 334:
+case 337:
YY_RULE_SETUP
-#line 600 "util/configlexer.lex"
+#line 603 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 335:
-/* rule 335 can match eol */
+case 338:
+/* rule 338 can match eol */
YY_RULE_SETUP
-#line 601 "util/configlexer.lex"
+#line 604 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 336:
+case 339:
YY_RULE_SETUP
-#line 602 "util/configlexer.lex"
+#line 605 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 337:
+case 340:
YY_RULE_SETUP
-#line 603 "util/configlexer.lex"
+#line 606 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 0);
@@ -6043,27 +6097,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 608 "util/configlexer.lex"
+#line 611 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 338:
+case 341:
YY_RULE_SETUP
-#line 612 "util/configlexer.lex"
+#line 615 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 339:
-/* rule 339 can match eol */
+case 342:
+/* rule 342 can match eol */
YY_RULE_SETUP
-#line 613 "util/configlexer.lex"
+#line 616 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 340:
+case 343:
YY_RULE_SETUP
-#line 615 "util/configlexer.lex"
+#line 618 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -6073,7 +6127,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 621 "util/configlexer.lex"
+#line 624 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -6088,39 +6142,39 @@ case YY_STATE_EOF(val):
}
YY_BREAK
/* include-toplevel: directive */
-case 341:
+case 344:
YY_RULE_SETUP
-#line 635 "util/configlexer.lex"
+#line 638 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
}
YY_BREAK
case YY_STATE_EOF(include_toplevel):
-#line 638 "util/configlexer.lex"
+#line 641 "util/configlexer.lex"
{
yyerror("EOF inside include_toplevel directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 342:
+case 345:
YY_RULE_SETUP
-#line 642 "util/configlexer.lex"
+#line 645 "util/configlexer.lex"
{ LEXOUT(("ITSP ")); /* ignore */ }
YY_BREAK
-case 343:
-/* rule 343 can match eol */
+case 346:
+/* rule 346 can match eol */
YY_RULE_SETUP
-#line 643 "util/configlexer.lex"
+#line 646 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
-case 344:
+case 347:
YY_RULE_SETUP
-#line 644 "util/configlexer.lex"
+#line 647 "util/configlexer.lex"
{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
YY_BREAK
-case 345:
+case 348:
YY_RULE_SETUP
-#line 645 "util/configlexer.lex"
+#line 648 "util/configlexer.lex"
{
LEXOUT(("ITunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 1);
@@ -6129,29 +6183,29 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_toplevel_quoted):
-#line 651 "util/configlexer.lex"
+#line 654 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 346:
+case 349:
YY_RULE_SETUP
-#line 655 "util/configlexer.lex"
+#line 658 "util/configlexer.lex"
{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 347:
-/* rule 347 can match eol */
+case 350:
+/* rule 350 can match eol */
YY_RULE_SETUP
-#line 656 "util/configlexer.lex"
+#line 659 "util/configlexer.lex"
{
yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev);
}
YY_BREAK
-case 348:
+case 351:
YY_RULE_SETUP
-#line 660 "util/configlexer.lex"
+#line 663 "util/configlexer.lex"
{
LEXOUT(("ITQE "));
yytext[yyleng - 1] = '\0';
@@ -6160,33 +6214,33 @@ YY_RULE_SETUP
return (VAR_FORCE_TOPLEVEL);
}
YY_BREAK
-case 349:
+case 352:
YY_RULE_SETUP
-#line 668 "util/configlexer.lex"
+#line 671 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 350:
+case 353:
YY_RULE_SETUP
-#line 672 "util/configlexer.lex"
+#line 675 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 351:
+case 354:
YY_RULE_SETUP
-#line 676 "util/configlexer.lex"
+#line 679 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 352:
+case 355:
YY_RULE_SETUP
-#line 680 "util/configlexer.lex"
+#line 683 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 6187 "<stdout>"
+#line 6241 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -6481,7 +6535,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3484 )
+ if ( yy_current_state >= 3524 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -6509,11 +6563,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3484 )
+ if ( yy_current_state >= 3524 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 3483);
+ yy_is_jam = (yy_current_state == 3523);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -7152,6 +7206,6 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 680 "util/configlexer.lex"
+#line 683 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index dbfc17d499f2..71da92422f30 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -331,6 +331,7 @@ stub-first{COLON} { YDVAR(1, VAR_STUB_FIRST) }
stub-no-cache{COLON} { YDVAR(1, VAR_STUB_NO_CACHE) }
stub-ssl-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
stub-tls-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+stub-tcp-upstream{COLON} { YDVAR(1, VAR_STUB_TCP_UPSTREAM) }
forward-zone{COLON} { YDVAR(0, VAR_FORWARD_ZONE) }
forward-addr{COLON} { YDVAR(1, VAR_FORWARD_ADDR) }
forward-host{COLON} { YDVAR(1, VAR_FORWARD_HOST) }
@@ -338,6 +339,7 @@ forward-first{COLON} { YDVAR(1, VAR_FORWARD_FIRST) }
forward-no-cache{COLON} { YDVAR(1, VAR_FORWARD_NO_CACHE) }
forward-ssl-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+forward-tcp-upstream{COLON} { YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) }
auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) }
rpz{COLON} { YDVAR(0, VAR_RPZ) }
tags{COLON} { YDVAR(1, VAR_TAGS) }
@@ -499,6 +501,7 @@ ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) }
+outbound-msg-retry{COLON} { YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) }
fast-server-num{COLON} { YDVAR(1, VAR_FAST_SERVER_NUM) }
low-rtt-pct{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
diff --git a/util/configparser.c b/util/configparser.c
index 127240e38e35..d03e52fa1f0d 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -283,178 +283,181 @@ extern int yydebug;
VAR_STUB_SSL_UPSTREAM = 398, /* VAR_STUB_SSL_UPSTREAM */
VAR_FORWARD_SSL_UPSTREAM = 399, /* VAR_FORWARD_SSL_UPSTREAM */
VAR_TLS_CERT_BUNDLE = 400, /* VAR_TLS_CERT_BUNDLE */
- VAR_HTTPS_PORT = 401, /* VAR_HTTPS_PORT */
- VAR_HTTP_ENDPOINT = 402, /* VAR_HTTP_ENDPOINT */
- VAR_HTTP_MAX_STREAMS = 403, /* VAR_HTTP_MAX_STREAMS */
- VAR_HTTP_QUERY_BUFFER_SIZE = 404, /* VAR_HTTP_QUERY_BUFFER_SIZE */
- VAR_HTTP_RESPONSE_BUFFER_SIZE = 405, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
- VAR_HTTP_NODELAY = 406, /* VAR_HTTP_NODELAY */
- VAR_HTTP_NOTLS_DOWNSTREAM = 407, /* VAR_HTTP_NOTLS_DOWNSTREAM */
- VAR_STUB_FIRST = 408, /* VAR_STUB_FIRST */
- VAR_MINIMAL_RESPONSES = 409, /* VAR_MINIMAL_RESPONSES */
- VAR_RRSET_ROUNDROBIN = 410, /* VAR_RRSET_ROUNDROBIN */
- VAR_MAX_UDP_SIZE = 411, /* VAR_MAX_UDP_SIZE */
- VAR_DELAY_CLOSE = 412, /* VAR_DELAY_CLOSE */
- VAR_UDP_CONNECT = 413, /* VAR_UDP_CONNECT */
- VAR_UNBLOCK_LAN_ZONES = 414, /* VAR_UNBLOCK_LAN_ZONES */
- VAR_INSECURE_LAN_ZONES = 415, /* VAR_INSECURE_LAN_ZONES */
- VAR_INFRA_CACHE_MIN_RTT = 416, /* VAR_INFRA_CACHE_MIN_RTT */
- VAR_INFRA_KEEP_PROBING = 417, /* VAR_INFRA_KEEP_PROBING */
- VAR_DNS64_PREFIX = 418, /* VAR_DNS64_PREFIX */
- VAR_DNS64_SYNTHALL = 419, /* VAR_DNS64_SYNTHALL */
- VAR_DNS64_IGNORE_AAAA = 420, /* VAR_DNS64_IGNORE_AAAA */
- VAR_DNSTAP = 421, /* VAR_DNSTAP */
- VAR_DNSTAP_ENABLE = 422, /* VAR_DNSTAP_ENABLE */
- VAR_DNSTAP_SOCKET_PATH = 423, /* VAR_DNSTAP_SOCKET_PATH */
- VAR_DNSTAP_IP = 424, /* VAR_DNSTAP_IP */
- VAR_DNSTAP_TLS = 425, /* VAR_DNSTAP_TLS */
- VAR_DNSTAP_TLS_SERVER_NAME = 426, /* VAR_DNSTAP_TLS_SERVER_NAME */
- VAR_DNSTAP_TLS_CERT_BUNDLE = 427, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
- VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 428, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
- VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 429, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
- VAR_DNSTAP_SEND_IDENTITY = 430, /* VAR_DNSTAP_SEND_IDENTITY */
- VAR_DNSTAP_SEND_VERSION = 431, /* VAR_DNSTAP_SEND_VERSION */
- VAR_DNSTAP_BIDIRECTIONAL = 432, /* VAR_DNSTAP_BIDIRECTIONAL */
- VAR_DNSTAP_IDENTITY = 433, /* VAR_DNSTAP_IDENTITY */
- VAR_DNSTAP_VERSION = 434, /* VAR_DNSTAP_VERSION */
- VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- VAR_RESPONSE_IP_TAG = 441, /* VAR_RESPONSE_IP_TAG */
- VAR_RESPONSE_IP = 442, /* VAR_RESPONSE_IP */
- VAR_RESPONSE_IP_DATA = 443, /* VAR_RESPONSE_IP_DATA */
- VAR_HARDEN_ALGO_DOWNGRADE = 444, /* VAR_HARDEN_ALGO_DOWNGRADE */
- VAR_IP_TRANSPARENT = 445, /* VAR_IP_TRANSPARENT */
- VAR_IP_DSCP = 446, /* VAR_IP_DSCP */
- VAR_DISABLE_DNSSEC_LAME_CHECK = 447, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- VAR_IP_RATELIMIT = 448, /* VAR_IP_RATELIMIT */
- VAR_IP_RATELIMIT_SLABS = 449, /* VAR_IP_RATELIMIT_SLABS */
- VAR_IP_RATELIMIT_SIZE = 450, /* VAR_IP_RATELIMIT_SIZE */
- VAR_RATELIMIT = 451, /* VAR_RATELIMIT */
- VAR_RATELIMIT_SLABS = 452, /* VAR_RATELIMIT_SLABS */
- VAR_RATELIMIT_SIZE = 453, /* VAR_RATELIMIT_SIZE */
- VAR_RATELIMIT_FOR_DOMAIN = 454, /* VAR_RATELIMIT_FOR_DOMAIN */
- VAR_RATELIMIT_BELOW_DOMAIN = 455, /* VAR_RATELIMIT_BELOW_DOMAIN */
- VAR_IP_RATELIMIT_FACTOR = 456, /* VAR_IP_RATELIMIT_FACTOR */
- VAR_RATELIMIT_FACTOR = 457, /* VAR_RATELIMIT_FACTOR */
- VAR_SEND_CLIENT_SUBNET = 458, /* VAR_SEND_CLIENT_SUBNET */
- VAR_CLIENT_SUBNET_ZONE = 459, /* VAR_CLIENT_SUBNET_ZONE */
- VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 460, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- VAR_CLIENT_SUBNET_OPCODE = 461, /* VAR_CLIENT_SUBNET_OPCODE */
- VAR_MAX_CLIENT_SUBNET_IPV4 = 462, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- VAR_MAX_CLIENT_SUBNET_IPV6 = 463, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- VAR_MIN_CLIENT_SUBNET_IPV4 = 464, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- VAR_MIN_CLIENT_SUBNET_IPV6 = 465, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- VAR_MAX_ECS_TREE_SIZE_IPV4 = 466, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- VAR_MAX_ECS_TREE_SIZE_IPV6 = 467, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- VAR_CAPS_WHITELIST = 468, /* VAR_CAPS_WHITELIST */
- VAR_CACHE_MAX_NEGATIVE_TTL = 469, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- VAR_PERMIT_SMALL_HOLDDOWN = 470, /* VAR_PERMIT_SMALL_HOLDDOWN */
- VAR_QNAME_MINIMISATION = 471, /* VAR_QNAME_MINIMISATION */
- VAR_QNAME_MINIMISATION_STRICT = 472, /* VAR_QNAME_MINIMISATION_STRICT */
- VAR_IP_FREEBIND = 473, /* VAR_IP_FREEBIND */
- VAR_DEFINE_TAG = 474, /* VAR_DEFINE_TAG */
- VAR_LOCAL_ZONE_TAG = 475, /* VAR_LOCAL_ZONE_TAG */
- VAR_ACCESS_CONTROL_TAG = 476, /* VAR_ACCESS_CONTROL_TAG */
- VAR_LOCAL_ZONE_OVERRIDE = 477, /* VAR_LOCAL_ZONE_OVERRIDE */
- VAR_ACCESS_CONTROL_TAG_ACTION = 478, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- VAR_ACCESS_CONTROL_TAG_DATA = 479, /* VAR_ACCESS_CONTROL_TAG_DATA */
- VAR_VIEW = 480, /* VAR_VIEW */
- VAR_ACCESS_CONTROL_VIEW = 481, /* VAR_ACCESS_CONTROL_VIEW */
- VAR_VIEW_FIRST = 482, /* VAR_VIEW_FIRST */
- VAR_SERVE_EXPIRED = 483, /* VAR_SERVE_EXPIRED */
- VAR_SERVE_EXPIRED_TTL = 484, /* VAR_SERVE_EXPIRED_TTL */
- VAR_SERVE_EXPIRED_TTL_RESET = 485, /* VAR_SERVE_EXPIRED_TTL_RESET */
- VAR_SERVE_EXPIRED_REPLY_TTL = 486, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 487, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- VAR_SERVE_ORIGINAL_TTL = 488, /* VAR_SERVE_ORIGINAL_TTL */
- VAR_FAKE_DSA = 489, /* VAR_FAKE_DSA */
- VAR_FAKE_SHA1 = 490, /* VAR_FAKE_SHA1 */
- VAR_LOG_IDENTITY = 491, /* VAR_LOG_IDENTITY */
- VAR_HIDE_TRUSTANCHOR = 492, /* VAR_HIDE_TRUSTANCHOR */
- VAR_HIDE_HTTP_USER_AGENT = 493, /* VAR_HIDE_HTTP_USER_AGENT */
- VAR_HTTP_USER_AGENT = 494, /* VAR_HTTP_USER_AGENT */
- VAR_TRUST_ANCHOR_SIGNALING = 495, /* VAR_TRUST_ANCHOR_SIGNALING */
- VAR_AGGRESSIVE_NSEC = 496, /* VAR_AGGRESSIVE_NSEC */
- VAR_USE_SYSTEMD = 497, /* VAR_USE_SYSTEMD */
- VAR_SHM_ENABLE = 498, /* VAR_SHM_ENABLE */
- VAR_SHM_KEY = 499, /* VAR_SHM_KEY */
- VAR_ROOT_KEY_SENTINEL = 500, /* VAR_ROOT_KEY_SENTINEL */
- VAR_DNSCRYPT = 501, /* VAR_DNSCRYPT */
- VAR_DNSCRYPT_ENABLE = 502, /* VAR_DNSCRYPT_ENABLE */
- VAR_DNSCRYPT_PORT = 503, /* VAR_DNSCRYPT_PORT */
- VAR_DNSCRYPT_PROVIDER = 504, /* VAR_DNSCRYPT_PROVIDER */
- VAR_DNSCRYPT_SECRET_KEY = 505, /* VAR_DNSCRYPT_SECRET_KEY */
- VAR_DNSCRYPT_PROVIDER_CERT = 506, /* VAR_DNSCRYPT_PROVIDER_CERT */
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 507, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 508, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 509, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 510, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 511, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- VAR_PAD_RESPONSES = 512, /* VAR_PAD_RESPONSES */
- VAR_PAD_RESPONSES_BLOCK_SIZE = 513, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- VAR_PAD_QUERIES = 514, /* VAR_PAD_QUERIES */
- VAR_PAD_QUERIES_BLOCK_SIZE = 515, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- VAR_IPSECMOD_ENABLED = 516, /* VAR_IPSECMOD_ENABLED */
- VAR_IPSECMOD_HOOK = 517, /* VAR_IPSECMOD_HOOK */
- VAR_IPSECMOD_IGNORE_BOGUS = 518, /* VAR_IPSECMOD_IGNORE_BOGUS */
- VAR_IPSECMOD_MAX_TTL = 519, /* VAR_IPSECMOD_MAX_TTL */
- VAR_IPSECMOD_WHITELIST = 520, /* VAR_IPSECMOD_WHITELIST */
- VAR_IPSECMOD_STRICT = 521, /* VAR_IPSECMOD_STRICT */
- VAR_CACHEDB = 522, /* VAR_CACHEDB */
- VAR_CACHEDB_BACKEND = 523, /* VAR_CACHEDB_BACKEND */
- VAR_CACHEDB_SECRETSEED = 524, /* VAR_CACHEDB_SECRETSEED */
- VAR_CACHEDB_REDISHOST = 525, /* VAR_CACHEDB_REDISHOST */
- VAR_CACHEDB_REDISPORT = 526, /* VAR_CACHEDB_REDISPORT */
- VAR_CACHEDB_REDISTIMEOUT = 527, /* VAR_CACHEDB_REDISTIMEOUT */
- VAR_CACHEDB_REDISEXPIRERECORDS = 528, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 529, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- VAR_FOR_UPSTREAM = 530, /* VAR_FOR_UPSTREAM */
- VAR_AUTH_ZONE = 531, /* VAR_AUTH_ZONE */
- VAR_ZONEFILE = 532, /* VAR_ZONEFILE */
- VAR_MASTER = 533, /* VAR_MASTER */
- VAR_URL = 534, /* VAR_URL */
- VAR_FOR_DOWNSTREAM = 535, /* VAR_FOR_DOWNSTREAM */
- VAR_FALLBACK_ENABLED = 536, /* VAR_FALLBACK_ENABLED */
- VAR_TLS_ADDITIONAL_PORT = 537, /* VAR_TLS_ADDITIONAL_PORT */
- VAR_LOW_RTT = 538, /* VAR_LOW_RTT */
- VAR_LOW_RTT_PERMIL = 539, /* VAR_LOW_RTT_PERMIL */
- VAR_FAST_SERVER_PERMIL = 540, /* VAR_FAST_SERVER_PERMIL */
- VAR_FAST_SERVER_NUM = 541, /* VAR_FAST_SERVER_NUM */
- VAR_ALLOW_NOTIFY = 542, /* VAR_ALLOW_NOTIFY */
- VAR_TLS_WIN_CERT = 543, /* VAR_TLS_WIN_CERT */
- VAR_TCP_CONNECTION_LIMIT = 544, /* VAR_TCP_CONNECTION_LIMIT */
- VAR_FORWARD_NO_CACHE = 545, /* VAR_FORWARD_NO_CACHE */
- VAR_STUB_NO_CACHE = 546, /* VAR_STUB_NO_CACHE */
- VAR_LOG_SERVFAIL = 547, /* VAR_LOG_SERVFAIL */
- VAR_DENY_ANY = 548, /* VAR_DENY_ANY */
- VAR_UNKNOWN_SERVER_TIME_LIMIT = 549, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- VAR_LOG_TAG_QUERYREPLY = 550, /* VAR_LOG_TAG_QUERYREPLY */
- VAR_STREAM_WAIT_SIZE = 551, /* VAR_STREAM_WAIT_SIZE */
- VAR_TLS_CIPHERS = 552, /* VAR_TLS_CIPHERS */
- VAR_TLS_CIPHERSUITES = 553, /* VAR_TLS_CIPHERSUITES */
- VAR_TLS_USE_SNI = 554, /* VAR_TLS_USE_SNI */
- VAR_IPSET = 555, /* VAR_IPSET */
- VAR_IPSET_NAME_V4 = 556, /* VAR_IPSET_NAME_V4 */
- VAR_IPSET_NAME_V6 = 557, /* VAR_IPSET_NAME_V6 */
- VAR_TLS_SESSION_TICKET_KEYS = 558, /* VAR_TLS_SESSION_TICKET_KEYS */
- VAR_RPZ = 559, /* VAR_RPZ */
- VAR_TAGS = 560, /* VAR_TAGS */
- VAR_RPZ_ACTION_OVERRIDE = 561, /* VAR_RPZ_ACTION_OVERRIDE */
- VAR_RPZ_CNAME_OVERRIDE = 562, /* VAR_RPZ_CNAME_OVERRIDE */
- VAR_RPZ_LOG = 563, /* VAR_RPZ_LOG */
- VAR_RPZ_LOG_NAME = 564, /* VAR_RPZ_LOG_NAME */
- VAR_DYNLIB = 565, /* VAR_DYNLIB */
- VAR_DYNLIB_FILE = 566, /* VAR_DYNLIB_FILE */
- VAR_EDNS_CLIENT_STRING = 567, /* VAR_EDNS_CLIENT_STRING */
- VAR_EDNS_CLIENT_STRING_OPCODE = 568, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- VAR_NSID = 569, /* VAR_NSID */
- VAR_ZONEMD_PERMISSIVE_MODE = 570, /* VAR_ZONEMD_PERMISSIVE_MODE */
- VAR_ZONEMD_CHECK = 571, /* VAR_ZONEMD_CHECK */
- VAR_ZONEMD_REJECT_ABSENCE = 572 /* VAR_ZONEMD_REJECT_ABSENCE */
+ VAR_STUB_TCP_UPSTREAM = 401, /* VAR_STUB_TCP_UPSTREAM */
+ VAR_FORWARD_TCP_UPSTREAM = 402, /* VAR_FORWARD_TCP_UPSTREAM */
+ VAR_HTTPS_PORT = 403, /* VAR_HTTPS_PORT */
+ VAR_HTTP_ENDPOINT = 404, /* VAR_HTTP_ENDPOINT */
+ VAR_HTTP_MAX_STREAMS = 405, /* VAR_HTTP_MAX_STREAMS */
+ VAR_HTTP_QUERY_BUFFER_SIZE = 406, /* VAR_HTTP_QUERY_BUFFER_SIZE */
+ VAR_HTTP_RESPONSE_BUFFER_SIZE = 407, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
+ VAR_HTTP_NODELAY = 408, /* VAR_HTTP_NODELAY */
+ VAR_HTTP_NOTLS_DOWNSTREAM = 409, /* VAR_HTTP_NOTLS_DOWNSTREAM */
+ VAR_STUB_FIRST = 410, /* VAR_STUB_FIRST */
+ VAR_MINIMAL_RESPONSES = 411, /* VAR_MINIMAL_RESPONSES */
+ VAR_RRSET_ROUNDROBIN = 412, /* VAR_RRSET_ROUNDROBIN */
+ VAR_MAX_UDP_SIZE = 413, /* VAR_MAX_UDP_SIZE */
+ VAR_DELAY_CLOSE = 414, /* VAR_DELAY_CLOSE */
+ VAR_UDP_CONNECT = 415, /* VAR_UDP_CONNECT */
+ VAR_UNBLOCK_LAN_ZONES = 416, /* VAR_UNBLOCK_LAN_ZONES */
+ VAR_INSECURE_LAN_ZONES = 417, /* VAR_INSECURE_LAN_ZONES */
+ VAR_INFRA_CACHE_MIN_RTT = 418, /* VAR_INFRA_CACHE_MIN_RTT */
+ VAR_INFRA_KEEP_PROBING = 419, /* VAR_INFRA_KEEP_PROBING */
+ VAR_DNS64_PREFIX = 420, /* VAR_DNS64_PREFIX */
+ VAR_DNS64_SYNTHALL = 421, /* VAR_DNS64_SYNTHALL */
+ VAR_DNS64_IGNORE_AAAA = 422, /* VAR_DNS64_IGNORE_AAAA */
+ VAR_DNSTAP = 423, /* VAR_DNSTAP */
+ VAR_DNSTAP_ENABLE = 424, /* VAR_DNSTAP_ENABLE */
+ VAR_DNSTAP_SOCKET_PATH = 425, /* VAR_DNSTAP_SOCKET_PATH */
+ VAR_DNSTAP_IP = 426, /* VAR_DNSTAP_IP */
+ VAR_DNSTAP_TLS = 427, /* VAR_DNSTAP_TLS */
+ VAR_DNSTAP_TLS_SERVER_NAME = 428, /* VAR_DNSTAP_TLS_SERVER_NAME */
+ VAR_DNSTAP_TLS_CERT_BUNDLE = 429, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
+ VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
+ VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
+ VAR_DNSTAP_SEND_IDENTITY = 432, /* VAR_DNSTAP_SEND_IDENTITY */
+ VAR_DNSTAP_SEND_VERSION = 433, /* VAR_DNSTAP_SEND_VERSION */
+ VAR_DNSTAP_BIDIRECTIONAL = 434, /* VAR_DNSTAP_BIDIRECTIONAL */
+ VAR_DNSTAP_IDENTITY = 435, /* VAR_DNSTAP_IDENTITY */
+ VAR_DNSTAP_VERSION = 436, /* VAR_DNSTAP_VERSION */
+ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
+ VAR_RESPONSE_IP_TAG = 443, /* VAR_RESPONSE_IP_TAG */
+ VAR_RESPONSE_IP = 444, /* VAR_RESPONSE_IP */
+ VAR_RESPONSE_IP_DATA = 445, /* VAR_RESPONSE_IP_DATA */
+ VAR_HARDEN_ALGO_DOWNGRADE = 446, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ VAR_IP_TRANSPARENT = 447, /* VAR_IP_TRANSPARENT */
+ VAR_IP_DSCP = 448, /* VAR_IP_DSCP */
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 449, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ VAR_IP_RATELIMIT = 450, /* VAR_IP_RATELIMIT */
+ VAR_IP_RATELIMIT_SLABS = 451, /* VAR_IP_RATELIMIT_SLABS */
+ VAR_IP_RATELIMIT_SIZE = 452, /* VAR_IP_RATELIMIT_SIZE */
+ VAR_RATELIMIT = 453, /* VAR_RATELIMIT */
+ VAR_RATELIMIT_SLABS = 454, /* VAR_RATELIMIT_SLABS */
+ VAR_RATELIMIT_SIZE = 455, /* VAR_RATELIMIT_SIZE */
+ VAR_OUTBOUND_MSG_RETRY = 456, /* VAR_OUTBOUND_MSG_RETRY */
+ VAR_RATELIMIT_FOR_DOMAIN = 457, /* VAR_RATELIMIT_FOR_DOMAIN */
+ VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */
+ VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */
+ VAR_SEND_CLIENT_SUBNET = 461, /* VAR_SEND_CLIENT_SUBNET */
+ VAR_CLIENT_SUBNET_ZONE = 462, /* VAR_CLIENT_SUBNET_ZONE */
+ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 463, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ VAR_CLIENT_SUBNET_OPCODE = 464, /* VAR_CLIENT_SUBNET_OPCODE */
+ VAR_MAX_CLIENT_SUBNET_IPV4 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ VAR_MAX_CLIENT_SUBNET_IPV6 = 466, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 468, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 470, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ VAR_CAPS_WHITELIST = 471, /* VAR_CAPS_WHITELIST */
+ VAR_CACHE_MAX_NEGATIVE_TTL = 472, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ VAR_PERMIT_SMALL_HOLDDOWN = 473, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ VAR_QNAME_MINIMISATION = 474, /* VAR_QNAME_MINIMISATION */
+ VAR_QNAME_MINIMISATION_STRICT = 475, /* VAR_QNAME_MINIMISATION_STRICT */
+ VAR_IP_FREEBIND = 476, /* VAR_IP_FREEBIND */
+ VAR_DEFINE_TAG = 477, /* VAR_DEFINE_TAG */
+ VAR_LOCAL_ZONE_TAG = 478, /* VAR_LOCAL_ZONE_TAG */
+ VAR_ACCESS_CONTROL_TAG = 479, /* VAR_ACCESS_CONTROL_TAG */
+ VAR_LOCAL_ZONE_OVERRIDE = 480, /* VAR_LOCAL_ZONE_OVERRIDE */
+ VAR_ACCESS_CONTROL_TAG_ACTION = 481, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ VAR_ACCESS_CONTROL_TAG_DATA = 482, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ VAR_VIEW = 483, /* VAR_VIEW */
+ VAR_ACCESS_CONTROL_VIEW = 484, /* VAR_ACCESS_CONTROL_VIEW */
+ VAR_VIEW_FIRST = 485, /* VAR_VIEW_FIRST */
+ VAR_SERVE_EXPIRED = 486, /* VAR_SERVE_EXPIRED */
+ VAR_SERVE_EXPIRED_TTL = 487, /* VAR_SERVE_EXPIRED_TTL */
+ VAR_SERVE_EXPIRED_TTL_RESET = 488, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ VAR_SERVE_EXPIRED_REPLY_TTL = 489, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 490, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ VAR_SERVE_ORIGINAL_TTL = 491, /* VAR_SERVE_ORIGINAL_TTL */
+ VAR_FAKE_DSA = 492, /* VAR_FAKE_DSA */
+ VAR_FAKE_SHA1 = 493, /* VAR_FAKE_SHA1 */
+ VAR_LOG_IDENTITY = 494, /* VAR_LOG_IDENTITY */
+ VAR_HIDE_TRUSTANCHOR = 495, /* VAR_HIDE_TRUSTANCHOR */
+ VAR_HIDE_HTTP_USER_AGENT = 496, /* VAR_HIDE_HTTP_USER_AGENT */
+ VAR_HTTP_USER_AGENT = 497, /* VAR_HTTP_USER_AGENT */
+ VAR_TRUST_ANCHOR_SIGNALING = 498, /* VAR_TRUST_ANCHOR_SIGNALING */
+ VAR_AGGRESSIVE_NSEC = 499, /* VAR_AGGRESSIVE_NSEC */
+ VAR_USE_SYSTEMD = 500, /* VAR_USE_SYSTEMD */
+ VAR_SHM_ENABLE = 501, /* VAR_SHM_ENABLE */
+ VAR_SHM_KEY = 502, /* VAR_SHM_KEY */
+ VAR_ROOT_KEY_SENTINEL = 503, /* VAR_ROOT_KEY_SENTINEL */
+ VAR_DNSCRYPT = 504, /* VAR_DNSCRYPT */
+ VAR_DNSCRYPT_ENABLE = 505, /* VAR_DNSCRYPT_ENABLE */
+ VAR_DNSCRYPT_PORT = 506, /* VAR_DNSCRYPT_PORT */
+ VAR_DNSCRYPT_PROVIDER = 507, /* VAR_DNSCRYPT_PROVIDER */
+ VAR_DNSCRYPT_SECRET_KEY = 508, /* VAR_DNSCRYPT_SECRET_KEY */
+ VAR_DNSCRYPT_PROVIDER_CERT = 509, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 510, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 512, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 514, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ VAR_PAD_RESPONSES = 515, /* VAR_PAD_RESPONSES */
+ VAR_PAD_RESPONSES_BLOCK_SIZE = 516, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ VAR_PAD_QUERIES = 517, /* VAR_PAD_QUERIES */
+ VAR_PAD_QUERIES_BLOCK_SIZE = 518, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ VAR_IPSECMOD_ENABLED = 519, /* VAR_IPSECMOD_ENABLED */
+ VAR_IPSECMOD_HOOK = 520, /* VAR_IPSECMOD_HOOK */
+ VAR_IPSECMOD_IGNORE_BOGUS = 521, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ VAR_IPSECMOD_MAX_TTL = 522, /* VAR_IPSECMOD_MAX_TTL */
+ VAR_IPSECMOD_WHITELIST = 523, /* VAR_IPSECMOD_WHITELIST */
+ VAR_IPSECMOD_STRICT = 524, /* VAR_IPSECMOD_STRICT */
+ VAR_CACHEDB = 525, /* VAR_CACHEDB */
+ VAR_CACHEDB_BACKEND = 526, /* VAR_CACHEDB_BACKEND */
+ VAR_CACHEDB_SECRETSEED = 527, /* VAR_CACHEDB_SECRETSEED */
+ VAR_CACHEDB_REDISHOST = 528, /* VAR_CACHEDB_REDISHOST */
+ VAR_CACHEDB_REDISPORT = 529, /* VAR_CACHEDB_REDISPORT */
+ VAR_CACHEDB_REDISTIMEOUT = 530, /* VAR_CACHEDB_REDISTIMEOUT */
+ VAR_CACHEDB_REDISEXPIRERECORDS = 531, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 532, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ VAR_FOR_UPSTREAM = 533, /* VAR_FOR_UPSTREAM */
+ VAR_AUTH_ZONE = 534, /* VAR_AUTH_ZONE */
+ VAR_ZONEFILE = 535, /* VAR_ZONEFILE */
+ VAR_MASTER = 536, /* VAR_MASTER */
+ VAR_URL = 537, /* VAR_URL */
+ VAR_FOR_DOWNSTREAM = 538, /* VAR_FOR_DOWNSTREAM */
+ VAR_FALLBACK_ENABLED = 539, /* VAR_FALLBACK_ENABLED */
+ VAR_TLS_ADDITIONAL_PORT = 540, /* VAR_TLS_ADDITIONAL_PORT */
+ VAR_LOW_RTT = 541, /* VAR_LOW_RTT */
+ VAR_LOW_RTT_PERMIL = 542, /* VAR_LOW_RTT_PERMIL */
+ VAR_FAST_SERVER_PERMIL = 543, /* VAR_FAST_SERVER_PERMIL */
+ VAR_FAST_SERVER_NUM = 544, /* VAR_FAST_SERVER_NUM */
+ VAR_ALLOW_NOTIFY = 545, /* VAR_ALLOW_NOTIFY */
+ VAR_TLS_WIN_CERT = 546, /* VAR_TLS_WIN_CERT */
+ VAR_TCP_CONNECTION_LIMIT = 547, /* VAR_TCP_CONNECTION_LIMIT */
+ VAR_FORWARD_NO_CACHE = 548, /* VAR_FORWARD_NO_CACHE */
+ VAR_STUB_NO_CACHE = 549, /* VAR_STUB_NO_CACHE */
+ VAR_LOG_SERVFAIL = 550, /* VAR_LOG_SERVFAIL */
+ VAR_DENY_ANY = 551, /* VAR_DENY_ANY */
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 552, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ VAR_LOG_TAG_QUERYREPLY = 553, /* VAR_LOG_TAG_QUERYREPLY */
+ VAR_STREAM_WAIT_SIZE = 554, /* VAR_STREAM_WAIT_SIZE */
+ VAR_TLS_CIPHERS = 555, /* VAR_TLS_CIPHERS */
+ VAR_TLS_CIPHERSUITES = 556, /* VAR_TLS_CIPHERSUITES */
+ VAR_TLS_USE_SNI = 557, /* VAR_TLS_USE_SNI */
+ VAR_IPSET = 558, /* VAR_IPSET */
+ VAR_IPSET_NAME_V4 = 559, /* VAR_IPSET_NAME_V4 */
+ VAR_IPSET_NAME_V6 = 560, /* VAR_IPSET_NAME_V6 */
+ VAR_TLS_SESSION_TICKET_KEYS = 561, /* VAR_TLS_SESSION_TICKET_KEYS */
+ VAR_RPZ = 562, /* VAR_RPZ */
+ VAR_TAGS = 563, /* VAR_TAGS */
+ VAR_RPZ_ACTION_OVERRIDE = 564, /* VAR_RPZ_ACTION_OVERRIDE */
+ VAR_RPZ_CNAME_OVERRIDE = 565, /* VAR_RPZ_CNAME_OVERRIDE */
+ VAR_RPZ_LOG = 566, /* VAR_RPZ_LOG */
+ VAR_RPZ_LOG_NAME = 567, /* VAR_RPZ_LOG_NAME */
+ VAR_DYNLIB = 568, /* VAR_DYNLIB */
+ VAR_DYNLIB_FILE = 569, /* VAR_DYNLIB_FILE */
+ VAR_EDNS_CLIENT_STRING = 570, /* VAR_EDNS_CLIENT_STRING */
+ VAR_EDNS_CLIENT_STRING_OPCODE = 571, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ VAR_NSID = 572, /* VAR_NSID */
+ VAR_ZONEMD_PERMISSIVE_MODE = 573, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ VAR_ZONEMD_CHECK = 574, /* VAR_ZONEMD_CHECK */
+ VAR_ZONEMD_REJECT_ABSENCE = 575 /* VAR_ZONEMD_REJECT_ABSENCE */
};
typedef enum yytokentype yytoken_kind_t;
#endif
@@ -605,178 +608,181 @@ extern int yydebug;
#define VAR_STUB_SSL_UPSTREAM 398
#define VAR_FORWARD_SSL_UPSTREAM 399
#define VAR_TLS_CERT_BUNDLE 400
-#define VAR_HTTPS_PORT 401
-#define VAR_HTTP_ENDPOINT 402
-#define VAR_HTTP_MAX_STREAMS 403
-#define VAR_HTTP_QUERY_BUFFER_SIZE 404
-#define VAR_HTTP_RESPONSE_BUFFER_SIZE 405
-#define VAR_HTTP_NODELAY 406
-#define VAR_HTTP_NOTLS_DOWNSTREAM 407
-#define VAR_STUB_FIRST 408
-#define VAR_MINIMAL_RESPONSES 409
-#define VAR_RRSET_ROUNDROBIN 410
-#define VAR_MAX_UDP_SIZE 411
-#define VAR_DELAY_CLOSE 412
-#define VAR_UDP_CONNECT 413
-#define VAR_UNBLOCK_LAN_ZONES 414
-#define VAR_INSECURE_LAN_ZONES 415
-#define VAR_INFRA_CACHE_MIN_RTT 416
-#define VAR_INFRA_KEEP_PROBING 417
-#define VAR_DNS64_PREFIX 418
-#define VAR_DNS64_SYNTHALL 419
-#define VAR_DNS64_IGNORE_AAAA 420
-#define VAR_DNSTAP 421
-#define VAR_DNSTAP_ENABLE 422
-#define VAR_DNSTAP_SOCKET_PATH 423
-#define VAR_DNSTAP_IP 424
-#define VAR_DNSTAP_TLS 425
-#define VAR_DNSTAP_TLS_SERVER_NAME 426
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 427
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 428
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 429
-#define VAR_DNSTAP_SEND_IDENTITY 430
-#define VAR_DNSTAP_SEND_VERSION 431
-#define VAR_DNSTAP_BIDIRECTIONAL 432
-#define VAR_DNSTAP_IDENTITY 433
-#define VAR_DNSTAP_VERSION 434
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 435
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 436
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 437
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 438
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 439
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 440
-#define VAR_RESPONSE_IP_TAG 441
-#define VAR_RESPONSE_IP 442
-#define VAR_RESPONSE_IP_DATA 443
-#define VAR_HARDEN_ALGO_DOWNGRADE 444
-#define VAR_IP_TRANSPARENT 445
-#define VAR_IP_DSCP 446
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 447
-#define VAR_IP_RATELIMIT 448
-#define VAR_IP_RATELIMIT_SLABS 449
-#define VAR_IP_RATELIMIT_SIZE 450
-#define VAR_RATELIMIT 451
-#define VAR_RATELIMIT_SLABS 452
-#define VAR_RATELIMIT_SIZE 453
-#define VAR_RATELIMIT_FOR_DOMAIN 454
-#define VAR_RATELIMIT_BELOW_DOMAIN 455
-#define VAR_IP_RATELIMIT_FACTOR 456
-#define VAR_RATELIMIT_FACTOR 457
-#define VAR_SEND_CLIENT_SUBNET 458
-#define VAR_CLIENT_SUBNET_ZONE 459
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 460
-#define VAR_CLIENT_SUBNET_OPCODE 461
-#define VAR_MAX_CLIENT_SUBNET_IPV4 462
-#define VAR_MAX_CLIENT_SUBNET_IPV6 463
-#define VAR_MIN_CLIENT_SUBNET_IPV4 464
-#define VAR_MIN_CLIENT_SUBNET_IPV6 465
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 466
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 467
-#define VAR_CAPS_WHITELIST 468
-#define VAR_CACHE_MAX_NEGATIVE_TTL 469
-#define VAR_PERMIT_SMALL_HOLDDOWN 470
-#define VAR_QNAME_MINIMISATION 471
-#define VAR_QNAME_MINIMISATION_STRICT 472
-#define VAR_IP_FREEBIND 473
-#define VAR_DEFINE_TAG 474
-#define VAR_LOCAL_ZONE_TAG 475
-#define VAR_ACCESS_CONTROL_TAG 476
-#define VAR_LOCAL_ZONE_OVERRIDE 477
-#define VAR_ACCESS_CONTROL_TAG_ACTION 478
-#define VAR_ACCESS_CONTROL_TAG_DATA 479
-#define VAR_VIEW 480
-#define VAR_ACCESS_CONTROL_VIEW 481
-#define VAR_VIEW_FIRST 482
-#define VAR_SERVE_EXPIRED 483
-#define VAR_SERVE_EXPIRED_TTL 484
-#define VAR_SERVE_EXPIRED_TTL_RESET 485
-#define VAR_SERVE_EXPIRED_REPLY_TTL 486
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 487
-#define VAR_SERVE_ORIGINAL_TTL 488
-#define VAR_FAKE_DSA 489
-#define VAR_FAKE_SHA1 490
-#define VAR_LOG_IDENTITY 491
-#define VAR_HIDE_TRUSTANCHOR 492
-#define VAR_HIDE_HTTP_USER_AGENT 493
-#define VAR_HTTP_USER_AGENT 494
-#define VAR_TRUST_ANCHOR_SIGNALING 495
-#define VAR_AGGRESSIVE_NSEC 496
-#define VAR_USE_SYSTEMD 497
-#define VAR_SHM_ENABLE 498
-#define VAR_SHM_KEY 499
-#define VAR_ROOT_KEY_SENTINEL 500
-#define VAR_DNSCRYPT 501
-#define VAR_DNSCRYPT_ENABLE 502
-#define VAR_DNSCRYPT_PORT 503
-#define VAR_DNSCRYPT_PROVIDER 504
-#define VAR_DNSCRYPT_SECRET_KEY 505
-#define VAR_DNSCRYPT_PROVIDER_CERT 506
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 507
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 508
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 509
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 510
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 511
-#define VAR_PAD_RESPONSES 512
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 513
-#define VAR_PAD_QUERIES 514
-#define VAR_PAD_QUERIES_BLOCK_SIZE 515
-#define VAR_IPSECMOD_ENABLED 516
-#define VAR_IPSECMOD_HOOK 517
-#define VAR_IPSECMOD_IGNORE_BOGUS 518
-#define VAR_IPSECMOD_MAX_TTL 519
-#define VAR_IPSECMOD_WHITELIST 520
-#define VAR_IPSECMOD_STRICT 521
-#define VAR_CACHEDB 522
-#define VAR_CACHEDB_BACKEND 523
-#define VAR_CACHEDB_SECRETSEED 524
-#define VAR_CACHEDB_REDISHOST 525
-#define VAR_CACHEDB_REDISPORT 526
-#define VAR_CACHEDB_REDISTIMEOUT 527
-#define VAR_CACHEDB_REDISEXPIRERECORDS 528
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 529
-#define VAR_FOR_UPSTREAM 530
-#define VAR_AUTH_ZONE 531
-#define VAR_ZONEFILE 532
-#define VAR_MASTER 533
-#define VAR_URL 534
-#define VAR_FOR_DOWNSTREAM 535
-#define VAR_FALLBACK_ENABLED 536
-#define VAR_TLS_ADDITIONAL_PORT 537
-#define VAR_LOW_RTT 538
-#define VAR_LOW_RTT_PERMIL 539
-#define VAR_FAST_SERVER_PERMIL 540
-#define VAR_FAST_SERVER_NUM 541
-#define VAR_ALLOW_NOTIFY 542
-#define VAR_TLS_WIN_CERT 543
-#define VAR_TCP_CONNECTION_LIMIT 544
-#define VAR_FORWARD_NO_CACHE 545
-#define VAR_STUB_NO_CACHE 546
-#define VAR_LOG_SERVFAIL 547
-#define VAR_DENY_ANY 548
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 549
-#define VAR_LOG_TAG_QUERYREPLY 550
-#define VAR_STREAM_WAIT_SIZE 551
-#define VAR_TLS_CIPHERS 552
-#define VAR_TLS_CIPHERSUITES 553
-#define VAR_TLS_USE_SNI 554
-#define VAR_IPSET 555
-#define VAR_IPSET_NAME_V4 556
-#define VAR_IPSET_NAME_V6 557
-#define VAR_TLS_SESSION_TICKET_KEYS 558
-#define VAR_RPZ 559
-#define VAR_TAGS 560
-#define VAR_RPZ_ACTION_OVERRIDE 561
-#define VAR_RPZ_CNAME_OVERRIDE 562
-#define VAR_RPZ_LOG 563
-#define VAR_RPZ_LOG_NAME 564
-#define VAR_DYNLIB 565
-#define VAR_DYNLIB_FILE 566
-#define VAR_EDNS_CLIENT_STRING 567
-#define VAR_EDNS_CLIENT_STRING_OPCODE 568
-#define VAR_NSID 569
-#define VAR_ZONEMD_PERMISSIVE_MODE 570
-#define VAR_ZONEMD_CHECK 571
-#define VAR_ZONEMD_REJECT_ABSENCE 572
+#define VAR_STUB_TCP_UPSTREAM 401
+#define VAR_FORWARD_TCP_UPSTREAM 402
+#define VAR_HTTPS_PORT 403
+#define VAR_HTTP_ENDPOINT 404
+#define VAR_HTTP_MAX_STREAMS 405
+#define VAR_HTTP_QUERY_BUFFER_SIZE 406
+#define VAR_HTTP_RESPONSE_BUFFER_SIZE 407
+#define VAR_HTTP_NODELAY 408
+#define VAR_HTTP_NOTLS_DOWNSTREAM 409
+#define VAR_STUB_FIRST 410
+#define VAR_MINIMAL_RESPONSES 411
+#define VAR_RRSET_ROUNDROBIN 412
+#define VAR_MAX_UDP_SIZE 413
+#define VAR_DELAY_CLOSE 414
+#define VAR_UDP_CONNECT 415
+#define VAR_UNBLOCK_LAN_ZONES 416
+#define VAR_INSECURE_LAN_ZONES 417
+#define VAR_INFRA_CACHE_MIN_RTT 418
+#define VAR_INFRA_KEEP_PROBING 419
+#define VAR_DNS64_PREFIX 420
+#define VAR_DNS64_SYNTHALL 421
+#define VAR_DNS64_IGNORE_AAAA 422
+#define VAR_DNSTAP 423
+#define VAR_DNSTAP_ENABLE 424
+#define VAR_DNSTAP_SOCKET_PATH 425
+#define VAR_DNSTAP_IP 426
+#define VAR_DNSTAP_TLS 427
+#define VAR_DNSTAP_TLS_SERVER_NAME 428
+#define VAR_DNSTAP_TLS_CERT_BUNDLE 429
+#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430
+#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431
+#define VAR_DNSTAP_SEND_IDENTITY 432
+#define VAR_DNSTAP_SEND_VERSION 433
+#define VAR_DNSTAP_BIDIRECTIONAL 434
+#define VAR_DNSTAP_IDENTITY 435
+#define VAR_DNSTAP_VERSION 436
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442
+#define VAR_RESPONSE_IP_TAG 443
+#define VAR_RESPONSE_IP 444
+#define VAR_RESPONSE_IP_DATA 445
+#define VAR_HARDEN_ALGO_DOWNGRADE 446
+#define VAR_IP_TRANSPARENT 447
+#define VAR_IP_DSCP 448
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 449
+#define VAR_IP_RATELIMIT 450
+#define VAR_IP_RATELIMIT_SLABS 451
+#define VAR_IP_RATELIMIT_SIZE 452
+#define VAR_RATELIMIT 453
+#define VAR_RATELIMIT_SLABS 454
+#define VAR_RATELIMIT_SIZE 455
+#define VAR_OUTBOUND_MSG_RETRY 456
+#define VAR_RATELIMIT_FOR_DOMAIN 457
+#define VAR_RATELIMIT_BELOW_DOMAIN 458
+#define VAR_IP_RATELIMIT_FACTOR 459
+#define VAR_RATELIMIT_FACTOR 460
+#define VAR_SEND_CLIENT_SUBNET 461
+#define VAR_CLIENT_SUBNET_ZONE 462
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 463
+#define VAR_CLIENT_SUBNET_OPCODE 464
+#define VAR_MAX_CLIENT_SUBNET_IPV4 465
+#define VAR_MAX_CLIENT_SUBNET_IPV6 466
+#define VAR_MIN_CLIENT_SUBNET_IPV4 467
+#define VAR_MIN_CLIENT_SUBNET_IPV6 468
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 469
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 470
+#define VAR_CAPS_WHITELIST 471
+#define VAR_CACHE_MAX_NEGATIVE_TTL 472
+#define VAR_PERMIT_SMALL_HOLDDOWN 473
+#define VAR_QNAME_MINIMISATION 474
+#define VAR_QNAME_MINIMISATION_STRICT 475
+#define VAR_IP_FREEBIND 476
+#define VAR_DEFINE_TAG 477
+#define VAR_LOCAL_ZONE_TAG 478
+#define VAR_ACCESS_CONTROL_TAG 479
+#define VAR_LOCAL_ZONE_OVERRIDE 480
+#define VAR_ACCESS_CONTROL_TAG_ACTION 481
+#define VAR_ACCESS_CONTROL_TAG_DATA 482
+#define VAR_VIEW 483
+#define VAR_ACCESS_CONTROL_VIEW 484
+#define VAR_VIEW_FIRST 485
+#define VAR_SERVE_EXPIRED 486
+#define VAR_SERVE_EXPIRED_TTL 487
+#define VAR_SERVE_EXPIRED_TTL_RESET 488
+#define VAR_SERVE_EXPIRED_REPLY_TTL 489
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 490
+#define VAR_SERVE_ORIGINAL_TTL 491
+#define VAR_FAKE_DSA 492
+#define VAR_FAKE_SHA1 493
+#define VAR_LOG_IDENTITY 494
+#define VAR_HIDE_TRUSTANCHOR 495
+#define VAR_HIDE_HTTP_USER_AGENT 496
+#define VAR_HTTP_USER_AGENT 497
+#define VAR_TRUST_ANCHOR_SIGNALING 498
+#define VAR_AGGRESSIVE_NSEC 499
+#define VAR_USE_SYSTEMD 500
+#define VAR_SHM_ENABLE 501
+#define VAR_SHM_KEY 502
+#define VAR_ROOT_KEY_SENTINEL 503
+#define VAR_DNSCRYPT 504
+#define VAR_DNSCRYPT_ENABLE 505
+#define VAR_DNSCRYPT_PORT 506
+#define VAR_DNSCRYPT_PROVIDER 507
+#define VAR_DNSCRYPT_SECRET_KEY 508
+#define VAR_DNSCRYPT_PROVIDER_CERT 509
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 510
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 511
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 512
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 513
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 514
+#define VAR_PAD_RESPONSES 515
+#define VAR_PAD_RESPONSES_BLOCK_SIZE 516
+#define VAR_PAD_QUERIES 517
+#define VAR_PAD_QUERIES_BLOCK_SIZE 518
+#define VAR_IPSECMOD_ENABLED 519
+#define VAR_IPSECMOD_HOOK 520
+#define VAR_IPSECMOD_IGNORE_BOGUS 521
+#define VAR_IPSECMOD_MAX_TTL 522
+#define VAR_IPSECMOD_WHITELIST 523
+#define VAR_IPSECMOD_STRICT 524
+#define VAR_CACHEDB 525
+#define VAR_CACHEDB_BACKEND 526
+#define VAR_CACHEDB_SECRETSEED 527
+#define VAR_CACHEDB_REDISHOST 528
+#define VAR_CACHEDB_REDISPORT 529
+#define VAR_CACHEDB_REDISTIMEOUT 530
+#define VAR_CACHEDB_REDISEXPIRERECORDS 531
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 532
+#define VAR_FOR_UPSTREAM 533
+#define VAR_AUTH_ZONE 534
+#define VAR_ZONEFILE 535
+#define VAR_MASTER 536
+#define VAR_URL 537
+#define VAR_FOR_DOWNSTREAM 538
+#define VAR_FALLBACK_ENABLED 539
+#define VAR_TLS_ADDITIONAL_PORT 540
+#define VAR_LOW_RTT 541
+#define VAR_LOW_RTT_PERMIL 542
+#define VAR_FAST_SERVER_PERMIL 543
+#define VAR_FAST_SERVER_NUM 544
+#define VAR_ALLOW_NOTIFY 545
+#define VAR_TLS_WIN_CERT 546
+#define VAR_TCP_CONNECTION_LIMIT 547
+#define VAR_FORWARD_NO_CACHE 548
+#define VAR_STUB_NO_CACHE 549
+#define VAR_LOG_SERVFAIL 550
+#define VAR_DENY_ANY 551
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 552
+#define VAR_LOG_TAG_QUERYREPLY 553
+#define VAR_STREAM_WAIT_SIZE 554
+#define VAR_TLS_CIPHERS 555
+#define VAR_TLS_CIPHERSUITES 556
+#define VAR_TLS_USE_SNI 557
+#define VAR_IPSET 558
+#define VAR_IPSET_NAME_V4 559
+#define VAR_IPSET_NAME_V6 560
+#define VAR_TLS_SESSION_TICKET_KEYS 561
+#define VAR_RPZ 562
+#define VAR_TAGS 563
+#define VAR_RPZ_ACTION_OVERRIDE 564
+#define VAR_RPZ_CNAME_OVERRIDE 565
+#define VAR_RPZ_LOG 566
+#define VAR_RPZ_LOG_NAME 567
+#define VAR_DYNLIB 568
+#define VAR_DYNLIB_FILE 569
+#define VAR_EDNS_CLIENT_STRING 570
+#define VAR_EDNS_CLIENT_STRING_OPCODE 571
+#define VAR_NSID 572
+#define VAR_ZONEMD_PERMISSIVE_MODE 573
+#define VAR_ZONEMD_CHECK 574
+#define VAR_ZONEMD_REJECT_ABSENCE 575
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -786,7 +792,7 @@ union YYSTYPE
char* str;
-#line 790 "util/configparser.c"
+#line 796 "util/configparser.c"
};
typedef union YYSTYPE YYSTYPE;
@@ -950,521 +956,527 @@ enum yysymbol_kind_t
YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 143, /* VAR_STUB_SSL_UPSTREAM */
YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 144, /* VAR_FORWARD_SSL_UPSTREAM */
YYSYMBOL_VAR_TLS_CERT_BUNDLE = 145, /* VAR_TLS_CERT_BUNDLE */
- YYSYMBOL_VAR_HTTPS_PORT = 146, /* VAR_HTTPS_PORT */
- YYSYMBOL_VAR_HTTP_ENDPOINT = 147, /* VAR_HTTP_ENDPOINT */
- YYSYMBOL_VAR_HTTP_MAX_STREAMS = 148, /* VAR_HTTP_MAX_STREAMS */
- YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 149, /* VAR_HTTP_QUERY_BUFFER_SIZE */
- YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 150, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
- YYSYMBOL_VAR_HTTP_NODELAY = 151, /* VAR_HTTP_NODELAY */
- YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 152, /* VAR_HTTP_NOTLS_DOWNSTREAM */
- YYSYMBOL_VAR_STUB_FIRST = 153, /* VAR_STUB_FIRST */
- YYSYMBOL_VAR_MINIMAL_RESPONSES = 154, /* VAR_MINIMAL_RESPONSES */
- YYSYMBOL_VAR_RRSET_ROUNDROBIN = 155, /* VAR_RRSET_ROUNDROBIN */
- YYSYMBOL_VAR_MAX_UDP_SIZE = 156, /* VAR_MAX_UDP_SIZE */
- YYSYMBOL_VAR_DELAY_CLOSE = 157, /* VAR_DELAY_CLOSE */
- YYSYMBOL_VAR_UDP_CONNECT = 158, /* VAR_UDP_CONNECT */
- YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 159, /* VAR_UNBLOCK_LAN_ZONES */
- YYSYMBOL_VAR_INSECURE_LAN_ZONES = 160, /* VAR_INSECURE_LAN_ZONES */
- YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 161, /* VAR_INFRA_CACHE_MIN_RTT */
- YYSYMBOL_VAR_INFRA_KEEP_PROBING = 162, /* VAR_INFRA_KEEP_PROBING */
- YYSYMBOL_VAR_DNS64_PREFIX = 163, /* VAR_DNS64_PREFIX */
- YYSYMBOL_VAR_DNS64_SYNTHALL = 164, /* VAR_DNS64_SYNTHALL */
- YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 165, /* VAR_DNS64_IGNORE_AAAA */
- YYSYMBOL_VAR_DNSTAP = 166, /* VAR_DNSTAP */
- YYSYMBOL_VAR_DNSTAP_ENABLE = 167, /* VAR_DNSTAP_ENABLE */
- YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 168, /* VAR_DNSTAP_SOCKET_PATH */
- YYSYMBOL_VAR_DNSTAP_IP = 169, /* VAR_DNSTAP_IP */
- YYSYMBOL_VAR_DNSTAP_TLS = 170, /* VAR_DNSTAP_TLS */
- YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 171, /* VAR_DNSTAP_TLS_SERVER_NAME */
- YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 172, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
- YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 173, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
- YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 174, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
- YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 175, /* VAR_DNSTAP_SEND_IDENTITY */
- YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 176, /* VAR_DNSTAP_SEND_VERSION */
- YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 177, /* VAR_DNSTAP_BIDIRECTIONAL */
- YYSYMBOL_VAR_DNSTAP_IDENTITY = 178, /* VAR_DNSTAP_IDENTITY */
- YYSYMBOL_VAR_DNSTAP_VERSION = 179, /* VAR_DNSTAP_VERSION */
- YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 180, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
- YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 181, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
- YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 182, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
- YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 183, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
- YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 184, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
- YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 185, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- YYSYMBOL_VAR_RESPONSE_IP_TAG = 186, /* VAR_RESPONSE_IP_TAG */
- YYSYMBOL_VAR_RESPONSE_IP = 187, /* VAR_RESPONSE_IP */
- YYSYMBOL_VAR_RESPONSE_IP_DATA = 188, /* VAR_RESPONSE_IP_DATA */
- YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 189, /* VAR_HARDEN_ALGO_DOWNGRADE */
- YYSYMBOL_VAR_IP_TRANSPARENT = 190, /* VAR_IP_TRANSPARENT */
- YYSYMBOL_VAR_IP_DSCP = 191, /* VAR_IP_DSCP */
- YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 192, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- YYSYMBOL_VAR_IP_RATELIMIT = 193, /* VAR_IP_RATELIMIT */
- YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 194, /* VAR_IP_RATELIMIT_SLABS */
- YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 195, /* VAR_IP_RATELIMIT_SIZE */
- YYSYMBOL_VAR_RATELIMIT = 196, /* VAR_RATELIMIT */
- YYSYMBOL_VAR_RATELIMIT_SLABS = 197, /* VAR_RATELIMIT_SLABS */
- YYSYMBOL_VAR_RATELIMIT_SIZE = 198, /* VAR_RATELIMIT_SIZE */
- YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 199, /* VAR_RATELIMIT_FOR_DOMAIN */
- YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 200, /* VAR_RATELIMIT_BELOW_DOMAIN */
- YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 201, /* VAR_IP_RATELIMIT_FACTOR */
- YYSYMBOL_VAR_RATELIMIT_FACTOR = 202, /* VAR_RATELIMIT_FACTOR */
- YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 203, /* VAR_SEND_CLIENT_SUBNET */
- YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 204, /* VAR_CLIENT_SUBNET_ZONE */
- YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 205, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 206, /* VAR_CLIENT_SUBNET_OPCODE */
- YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 207, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 208, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 209, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 210, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 211, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 212, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- YYSYMBOL_VAR_CAPS_WHITELIST = 213, /* VAR_CAPS_WHITELIST */
- YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 214, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 215, /* VAR_PERMIT_SMALL_HOLDDOWN */
- YYSYMBOL_VAR_QNAME_MINIMISATION = 216, /* VAR_QNAME_MINIMISATION */
- YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 217, /* VAR_QNAME_MINIMISATION_STRICT */
- YYSYMBOL_VAR_IP_FREEBIND = 218, /* VAR_IP_FREEBIND */
- YYSYMBOL_VAR_DEFINE_TAG = 219, /* VAR_DEFINE_TAG */
- YYSYMBOL_VAR_LOCAL_ZONE_TAG = 220, /* VAR_LOCAL_ZONE_TAG */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 221, /* VAR_ACCESS_CONTROL_TAG */
- YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 222, /* VAR_LOCAL_ZONE_OVERRIDE */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 223, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 224, /* VAR_ACCESS_CONTROL_TAG_DATA */
- YYSYMBOL_VAR_VIEW = 225, /* VAR_VIEW */
- YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 226, /* VAR_ACCESS_CONTROL_VIEW */
- YYSYMBOL_VAR_VIEW_FIRST = 227, /* VAR_VIEW_FIRST */
- YYSYMBOL_VAR_SERVE_EXPIRED = 228, /* VAR_SERVE_EXPIRED */
- YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 229, /* VAR_SERVE_EXPIRED_TTL */
- YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 230, /* VAR_SERVE_EXPIRED_TTL_RESET */
- YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 231, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 232, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 233, /* VAR_SERVE_ORIGINAL_TTL */
- YYSYMBOL_VAR_FAKE_DSA = 234, /* VAR_FAKE_DSA */
- YYSYMBOL_VAR_FAKE_SHA1 = 235, /* VAR_FAKE_SHA1 */
- YYSYMBOL_VAR_LOG_IDENTITY = 236, /* VAR_LOG_IDENTITY */
- YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 237, /* VAR_HIDE_TRUSTANCHOR */
- YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 238, /* VAR_HIDE_HTTP_USER_AGENT */
- YYSYMBOL_VAR_HTTP_USER_AGENT = 239, /* VAR_HTTP_USER_AGENT */
- YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 240, /* VAR_TRUST_ANCHOR_SIGNALING */
- YYSYMBOL_VAR_AGGRESSIVE_NSEC = 241, /* VAR_AGGRESSIVE_NSEC */
- YYSYMBOL_VAR_USE_SYSTEMD = 242, /* VAR_USE_SYSTEMD */
- YYSYMBOL_VAR_SHM_ENABLE = 243, /* VAR_SHM_ENABLE */
- YYSYMBOL_VAR_SHM_KEY = 244, /* VAR_SHM_KEY */
- YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 245, /* VAR_ROOT_KEY_SENTINEL */
- YYSYMBOL_VAR_DNSCRYPT = 246, /* VAR_DNSCRYPT */
- YYSYMBOL_VAR_DNSCRYPT_ENABLE = 247, /* VAR_DNSCRYPT_ENABLE */
- YYSYMBOL_VAR_DNSCRYPT_PORT = 248, /* VAR_DNSCRYPT_PORT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 249, /* VAR_DNSCRYPT_PROVIDER */
- YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 250, /* VAR_DNSCRYPT_SECRET_KEY */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 251, /* VAR_DNSCRYPT_PROVIDER_CERT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 252, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 253, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 254, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 255, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 256, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- YYSYMBOL_VAR_PAD_RESPONSES = 257, /* VAR_PAD_RESPONSES */
- YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 258, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- YYSYMBOL_VAR_PAD_QUERIES = 259, /* VAR_PAD_QUERIES */
- YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 260, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- YYSYMBOL_VAR_IPSECMOD_ENABLED = 261, /* VAR_IPSECMOD_ENABLED */
- YYSYMBOL_VAR_IPSECMOD_HOOK = 262, /* VAR_IPSECMOD_HOOK */
- YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 263, /* VAR_IPSECMOD_IGNORE_BOGUS */
- YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 264, /* VAR_IPSECMOD_MAX_TTL */
- YYSYMBOL_VAR_IPSECMOD_WHITELIST = 265, /* VAR_IPSECMOD_WHITELIST */
- YYSYMBOL_VAR_IPSECMOD_STRICT = 266, /* VAR_IPSECMOD_STRICT */
- YYSYMBOL_VAR_CACHEDB = 267, /* VAR_CACHEDB */
- YYSYMBOL_VAR_CACHEDB_BACKEND = 268, /* VAR_CACHEDB_BACKEND */
- YYSYMBOL_VAR_CACHEDB_SECRETSEED = 269, /* VAR_CACHEDB_SECRETSEED */
- YYSYMBOL_VAR_CACHEDB_REDISHOST = 270, /* VAR_CACHEDB_REDISHOST */
- YYSYMBOL_VAR_CACHEDB_REDISPORT = 271, /* VAR_CACHEDB_REDISPORT */
- YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 272, /* VAR_CACHEDB_REDISTIMEOUT */
- YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 273, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 274, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- YYSYMBOL_VAR_FOR_UPSTREAM = 275, /* VAR_FOR_UPSTREAM */
- YYSYMBOL_VAR_AUTH_ZONE = 276, /* VAR_AUTH_ZONE */
- YYSYMBOL_VAR_ZONEFILE = 277, /* VAR_ZONEFILE */
- YYSYMBOL_VAR_MASTER = 278, /* VAR_MASTER */
- YYSYMBOL_VAR_URL = 279, /* VAR_URL */
- YYSYMBOL_VAR_FOR_DOWNSTREAM = 280, /* VAR_FOR_DOWNSTREAM */
- YYSYMBOL_VAR_FALLBACK_ENABLED = 281, /* VAR_FALLBACK_ENABLED */
- YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 282, /* VAR_TLS_ADDITIONAL_PORT */
- YYSYMBOL_VAR_LOW_RTT = 283, /* VAR_LOW_RTT */
- YYSYMBOL_VAR_LOW_RTT_PERMIL = 284, /* VAR_LOW_RTT_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_PERMIL = 285, /* VAR_FAST_SERVER_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_NUM = 286, /* VAR_FAST_SERVER_NUM */
- YYSYMBOL_VAR_ALLOW_NOTIFY = 287, /* VAR_ALLOW_NOTIFY */
- YYSYMBOL_VAR_TLS_WIN_CERT = 288, /* VAR_TLS_WIN_CERT */
- YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 289, /* VAR_TCP_CONNECTION_LIMIT */
- YYSYMBOL_VAR_FORWARD_NO_CACHE = 290, /* VAR_FORWARD_NO_CACHE */
- YYSYMBOL_VAR_STUB_NO_CACHE = 291, /* VAR_STUB_NO_CACHE */
- YYSYMBOL_VAR_LOG_SERVFAIL = 292, /* VAR_LOG_SERVFAIL */
- YYSYMBOL_VAR_DENY_ANY = 293, /* VAR_DENY_ANY */
- YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 294, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 295, /* VAR_LOG_TAG_QUERYREPLY */
- YYSYMBOL_VAR_STREAM_WAIT_SIZE = 296, /* VAR_STREAM_WAIT_SIZE */
- YYSYMBOL_VAR_TLS_CIPHERS = 297, /* VAR_TLS_CIPHERS */
- YYSYMBOL_VAR_TLS_CIPHERSUITES = 298, /* VAR_TLS_CIPHERSUITES */
- YYSYMBOL_VAR_TLS_USE_SNI = 299, /* VAR_TLS_USE_SNI */
- YYSYMBOL_VAR_IPSET = 300, /* VAR_IPSET */
- YYSYMBOL_VAR_IPSET_NAME_V4 = 301, /* VAR_IPSET_NAME_V4 */
- YYSYMBOL_VAR_IPSET_NAME_V6 = 302, /* VAR_IPSET_NAME_V6 */
- YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 303, /* VAR_TLS_SESSION_TICKET_KEYS */
- YYSYMBOL_VAR_RPZ = 304, /* VAR_RPZ */
- YYSYMBOL_VAR_TAGS = 305, /* VAR_TAGS */
- YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 306, /* VAR_RPZ_ACTION_OVERRIDE */
- YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 307, /* VAR_RPZ_CNAME_OVERRIDE */
- YYSYMBOL_VAR_RPZ_LOG = 308, /* VAR_RPZ_LOG */
- YYSYMBOL_VAR_RPZ_LOG_NAME = 309, /* VAR_RPZ_LOG_NAME */
- YYSYMBOL_VAR_DYNLIB = 310, /* VAR_DYNLIB */
- YYSYMBOL_VAR_DYNLIB_FILE = 311, /* VAR_DYNLIB_FILE */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING = 312, /* VAR_EDNS_CLIENT_STRING */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 313, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- YYSYMBOL_VAR_NSID = 314, /* VAR_NSID */
- YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 315, /* VAR_ZONEMD_PERMISSIVE_MODE */
- YYSYMBOL_VAR_ZONEMD_CHECK = 316, /* VAR_ZONEMD_CHECK */
- YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 317, /* VAR_ZONEMD_REJECT_ABSENCE */
- YYSYMBOL_YYACCEPT = 318, /* $accept */
- YYSYMBOL_toplevelvars = 319, /* toplevelvars */
- YYSYMBOL_toplevelvar = 320, /* toplevelvar */
- YYSYMBOL_force_toplevel = 321, /* force_toplevel */
- YYSYMBOL_serverstart = 322, /* serverstart */
- YYSYMBOL_contents_server = 323, /* contents_server */
- YYSYMBOL_content_server = 324, /* content_server */
- YYSYMBOL_stubstart = 325, /* stubstart */
- YYSYMBOL_contents_stub = 326, /* contents_stub */
- YYSYMBOL_content_stub = 327, /* content_stub */
- YYSYMBOL_forwardstart = 328, /* forwardstart */
- YYSYMBOL_contents_forward = 329, /* contents_forward */
- YYSYMBOL_content_forward = 330, /* content_forward */
- YYSYMBOL_viewstart = 331, /* viewstart */
- YYSYMBOL_contents_view = 332, /* contents_view */
- YYSYMBOL_content_view = 333, /* content_view */
- YYSYMBOL_authstart = 334, /* authstart */
- YYSYMBOL_contents_auth = 335, /* contents_auth */
- YYSYMBOL_content_auth = 336, /* content_auth */
- YYSYMBOL_rpz_tag = 337, /* rpz_tag */
- YYSYMBOL_rpz_action_override = 338, /* rpz_action_override */
- YYSYMBOL_rpz_cname_override = 339, /* rpz_cname_override */
- YYSYMBOL_rpz_log = 340, /* rpz_log */
- YYSYMBOL_rpz_log_name = 341, /* rpz_log_name */
- YYSYMBOL_rpzstart = 342, /* rpzstart */
- YYSYMBOL_contents_rpz = 343, /* contents_rpz */
- YYSYMBOL_content_rpz = 344, /* content_rpz */
- YYSYMBOL_server_num_threads = 345, /* server_num_threads */
- YYSYMBOL_server_verbosity = 346, /* server_verbosity */
- YYSYMBOL_server_statistics_interval = 347, /* server_statistics_interval */
- YYSYMBOL_server_statistics_cumulative = 348, /* server_statistics_cumulative */
- YYSYMBOL_server_extended_statistics = 349, /* server_extended_statistics */
- YYSYMBOL_server_shm_enable = 350, /* server_shm_enable */
- YYSYMBOL_server_shm_key = 351, /* server_shm_key */
- YYSYMBOL_server_port = 352, /* server_port */
- YYSYMBOL_server_send_client_subnet = 353, /* server_send_client_subnet */
- YYSYMBOL_server_client_subnet_zone = 354, /* server_client_subnet_zone */
- YYSYMBOL_server_client_subnet_always_forward = 355, /* server_client_subnet_always_forward */
- YYSYMBOL_server_client_subnet_opcode = 356, /* server_client_subnet_opcode */
- YYSYMBOL_server_max_client_subnet_ipv4 = 357, /* server_max_client_subnet_ipv4 */
- YYSYMBOL_server_max_client_subnet_ipv6 = 358, /* server_max_client_subnet_ipv6 */
- YYSYMBOL_server_min_client_subnet_ipv4 = 359, /* server_min_client_subnet_ipv4 */
- YYSYMBOL_server_min_client_subnet_ipv6 = 360, /* server_min_client_subnet_ipv6 */
- YYSYMBOL_server_max_ecs_tree_size_ipv4 = 361, /* server_max_ecs_tree_size_ipv4 */
- YYSYMBOL_server_max_ecs_tree_size_ipv6 = 362, /* server_max_ecs_tree_size_ipv6 */
- YYSYMBOL_server_interface = 363, /* server_interface */
- YYSYMBOL_server_outgoing_interface = 364, /* server_outgoing_interface */
- YYSYMBOL_server_outgoing_range = 365, /* server_outgoing_range */
- YYSYMBOL_server_outgoing_port_permit = 366, /* server_outgoing_port_permit */
- YYSYMBOL_server_outgoing_port_avoid = 367, /* server_outgoing_port_avoid */
- YYSYMBOL_server_outgoing_num_tcp = 368, /* server_outgoing_num_tcp */
- YYSYMBOL_server_incoming_num_tcp = 369, /* server_incoming_num_tcp */
- YYSYMBOL_server_interface_automatic = 370, /* server_interface_automatic */
- YYSYMBOL_server_do_ip4 = 371, /* server_do_ip4 */
- YYSYMBOL_server_do_ip6 = 372, /* server_do_ip6 */
- YYSYMBOL_server_do_udp = 373, /* server_do_udp */
- YYSYMBOL_server_do_tcp = 374, /* server_do_tcp */
- YYSYMBOL_server_prefer_ip4 = 375, /* server_prefer_ip4 */
- YYSYMBOL_server_prefer_ip6 = 376, /* server_prefer_ip6 */
- YYSYMBOL_server_tcp_mss = 377, /* server_tcp_mss */
- YYSYMBOL_server_outgoing_tcp_mss = 378, /* server_outgoing_tcp_mss */
- YYSYMBOL_server_tcp_idle_timeout = 379, /* server_tcp_idle_timeout */
- YYSYMBOL_server_max_reuse_tcp_queries = 380, /* server_max_reuse_tcp_queries */
- YYSYMBOL_server_tcp_reuse_timeout = 381, /* server_tcp_reuse_timeout */
- YYSYMBOL_server_tcp_auth_query_timeout = 382, /* server_tcp_auth_query_timeout */
- YYSYMBOL_server_tcp_keepalive = 383, /* server_tcp_keepalive */
- YYSYMBOL_server_tcp_keepalive_timeout = 384, /* server_tcp_keepalive_timeout */
- YYSYMBOL_server_tcp_upstream = 385, /* server_tcp_upstream */
- YYSYMBOL_server_udp_upstream_without_downstream = 386, /* server_udp_upstream_without_downstream */
- YYSYMBOL_server_ssl_upstream = 387, /* server_ssl_upstream */
- YYSYMBOL_server_ssl_service_key = 388, /* server_ssl_service_key */
- YYSYMBOL_server_ssl_service_pem = 389, /* server_ssl_service_pem */
- YYSYMBOL_server_ssl_port = 390, /* server_ssl_port */
- YYSYMBOL_server_tls_cert_bundle = 391, /* server_tls_cert_bundle */
- YYSYMBOL_server_tls_win_cert = 392, /* server_tls_win_cert */
- YYSYMBOL_server_tls_additional_port = 393, /* server_tls_additional_port */
- YYSYMBOL_server_tls_ciphers = 394, /* server_tls_ciphers */
- YYSYMBOL_server_tls_ciphersuites = 395, /* server_tls_ciphersuites */
- YYSYMBOL_server_tls_session_ticket_keys = 396, /* server_tls_session_ticket_keys */
- YYSYMBOL_server_tls_use_sni = 397, /* server_tls_use_sni */
- YYSYMBOL_server_https_port = 398, /* server_https_port */
- YYSYMBOL_server_http_endpoint = 399, /* server_http_endpoint */
- YYSYMBOL_server_http_max_streams = 400, /* server_http_max_streams */
- YYSYMBOL_server_http_query_buffer_size = 401, /* server_http_query_buffer_size */
- YYSYMBOL_server_http_response_buffer_size = 402, /* server_http_response_buffer_size */
- YYSYMBOL_server_http_nodelay = 403, /* server_http_nodelay */
- YYSYMBOL_server_http_notls_downstream = 404, /* server_http_notls_downstream */
- YYSYMBOL_server_use_systemd = 405, /* server_use_systemd */
- YYSYMBOL_server_do_daemonize = 406, /* server_do_daemonize */
- YYSYMBOL_server_use_syslog = 407, /* server_use_syslog */
- YYSYMBOL_server_log_time_ascii = 408, /* server_log_time_ascii */
- YYSYMBOL_server_log_queries = 409, /* server_log_queries */
- YYSYMBOL_server_log_replies = 410, /* server_log_replies */
- YYSYMBOL_server_log_tag_queryreply = 411, /* server_log_tag_queryreply */
- YYSYMBOL_server_log_servfail = 412, /* server_log_servfail */
- YYSYMBOL_server_log_local_actions = 413, /* server_log_local_actions */
- YYSYMBOL_server_chroot = 414, /* server_chroot */
- YYSYMBOL_server_username = 415, /* server_username */
- YYSYMBOL_server_directory = 416, /* server_directory */
- YYSYMBOL_server_logfile = 417, /* server_logfile */
- YYSYMBOL_server_pidfile = 418, /* server_pidfile */
- YYSYMBOL_server_root_hints = 419, /* server_root_hints */
- YYSYMBOL_server_dlv_anchor_file = 420, /* server_dlv_anchor_file */
- YYSYMBOL_server_dlv_anchor = 421, /* server_dlv_anchor */
- YYSYMBOL_server_auto_trust_anchor_file = 422, /* server_auto_trust_anchor_file */
- YYSYMBOL_server_trust_anchor_file = 423, /* server_trust_anchor_file */
- YYSYMBOL_server_trusted_keys_file = 424, /* server_trusted_keys_file */
- YYSYMBOL_server_trust_anchor = 425, /* server_trust_anchor */
- YYSYMBOL_server_trust_anchor_signaling = 426, /* server_trust_anchor_signaling */
- YYSYMBOL_server_root_key_sentinel = 427, /* server_root_key_sentinel */
- YYSYMBOL_server_domain_insecure = 428, /* server_domain_insecure */
- YYSYMBOL_server_hide_identity = 429, /* server_hide_identity */
- YYSYMBOL_server_hide_version = 430, /* server_hide_version */
- YYSYMBOL_server_hide_trustanchor = 431, /* server_hide_trustanchor */
- YYSYMBOL_server_hide_http_user_agent = 432, /* server_hide_http_user_agent */
- YYSYMBOL_server_identity = 433, /* server_identity */
- YYSYMBOL_server_version = 434, /* server_version */
- YYSYMBOL_server_http_user_agent = 435, /* server_http_user_agent */
- YYSYMBOL_server_nsid = 436, /* server_nsid */
- YYSYMBOL_server_so_rcvbuf = 437, /* server_so_rcvbuf */
- YYSYMBOL_server_so_sndbuf = 438, /* server_so_sndbuf */
- YYSYMBOL_server_so_reuseport = 439, /* server_so_reuseport */
- YYSYMBOL_server_ip_transparent = 440, /* server_ip_transparent */
- YYSYMBOL_server_ip_freebind = 441, /* server_ip_freebind */
- YYSYMBOL_server_ip_dscp = 442, /* server_ip_dscp */
- YYSYMBOL_server_stream_wait_size = 443, /* server_stream_wait_size */
- YYSYMBOL_server_edns_buffer_size = 444, /* server_edns_buffer_size */
- YYSYMBOL_server_msg_buffer_size = 445, /* server_msg_buffer_size */
- YYSYMBOL_server_msg_cache_size = 446, /* server_msg_cache_size */
- YYSYMBOL_server_msg_cache_slabs = 447, /* server_msg_cache_slabs */
- YYSYMBOL_server_num_queries_per_thread = 448, /* server_num_queries_per_thread */
- YYSYMBOL_server_jostle_timeout = 449, /* server_jostle_timeout */
- YYSYMBOL_server_delay_close = 450, /* server_delay_close */
- YYSYMBOL_server_udp_connect = 451, /* server_udp_connect */
- YYSYMBOL_server_unblock_lan_zones = 452, /* server_unblock_lan_zones */
- YYSYMBOL_server_insecure_lan_zones = 453, /* server_insecure_lan_zones */
- YYSYMBOL_server_rrset_cache_size = 454, /* server_rrset_cache_size */
- YYSYMBOL_server_rrset_cache_slabs = 455, /* server_rrset_cache_slabs */
- YYSYMBOL_server_infra_host_ttl = 456, /* server_infra_host_ttl */
- YYSYMBOL_server_infra_lame_ttl = 457, /* server_infra_lame_ttl */
- YYSYMBOL_server_infra_cache_numhosts = 458, /* server_infra_cache_numhosts */
- YYSYMBOL_server_infra_cache_lame_size = 459, /* server_infra_cache_lame_size */
- YYSYMBOL_server_infra_cache_slabs = 460, /* server_infra_cache_slabs */
- YYSYMBOL_server_infra_cache_min_rtt = 461, /* server_infra_cache_min_rtt */
- YYSYMBOL_server_infra_keep_probing = 462, /* server_infra_keep_probing */
- YYSYMBOL_server_target_fetch_policy = 463, /* server_target_fetch_policy */
- YYSYMBOL_server_harden_short_bufsize = 464, /* server_harden_short_bufsize */
- YYSYMBOL_server_harden_large_queries = 465, /* server_harden_large_queries */
- YYSYMBOL_server_harden_glue = 466, /* server_harden_glue */
- YYSYMBOL_server_harden_dnssec_stripped = 467, /* server_harden_dnssec_stripped */
- YYSYMBOL_server_harden_below_nxdomain = 468, /* server_harden_below_nxdomain */
- YYSYMBOL_server_harden_referral_path = 469, /* server_harden_referral_path */
- YYSYMBOL_server_harden_algo_downgrade = 470, /* server_harden_algo_downgrade */
- YYSYMBOL_server_use_caps_for_id = 471, /* server_use_caps_for_id */
- YYSYMBOL_server_caps_whitelist = 472, /* server_caps_whitelist */
- YYSYMBOL_server_private_address = 473, /* server_private_address */
- YYSYMBOL_server_private_domain = 474, /* server_private_domain */
- YYSYMBOL_server_prefetch = 475, /* server_prefetch */
- YYSYMBOL_server_prefetch_key = 476, /* server_prefetch_key */
- YYSYMBOL_server_deny_any = 477, /* server_deny_any */
- YYSYMBOL_server_unwanted_reply_threshold = 478, /* server_unwanted_reply_threshold */
- YYSYMBOL_server_do_not_query_address = 479, /* server_do_not_query_address */
- YYSYMBOL_server_do_not_query_localhost = 480, /* server_do_not_query_localhost */
- YYSYMBOL_server_access_control = 481, /* server_access_control */
- YYSYMBOL_server_module_conf = 482, /* server_module_conf */
- YYSYMBOL_server_val_override_date = 483, /* server_val_override_date */
- YYSYMBOL_server_val_sig_skew_min = 484, /* server_val_sig_skew_min */
- YYSYMBOL_server_val_sig_skew_max = 485, /* server_val_sig_skew_max */
- YYSYMBOL_server_val_max_restart = 486, /* server_val_max_restart */
- YYSYMBOL_server_cache_max_ttl = 487, /* server_cache_max_ttl */
- YYSYMBOL_server_cache_max_negative_ttl = 488, /* server_cache_max_negative_ttl */
- YYSYMBOL_server_cache_min_ttl = 489, /* server_cache_min_ttl */
- YYSYMBOL_server_bogus_ttl = 490, /* server_bogus_ttl */
- YYSYMBOL_server_val_clean_additional = 491, /* server_val_clean_additional */
- YYSYMBOL_server_val_permissive_mode = 492, /* server_val_permissive_mode */
- YYSYMBOL_server_aggressive_nsec = 493, /* server_aggressive_nsec */
- YYSYMBOL_server_ignore_cd_flag = 494, /* server_ignore_cd_flag */
- YYSYMBOL_server_serve_expired = 495, /* server_serve_expired */
- YYSYMBOL_server_serve_expired_ttl = 496, /* server_serve_expired_ttl */
- YYSYMBOL_server_serve_expired_ttl_reset = 497, /* server_serve_expired_ttl_reset */
- YYSYMBOL_server_serve_expired_reply_ttl = 498, /* server_serve_expired_reply_ttl */
- YYSYMBOL_server_serve_expired_client_timeout = 499, /* server_serve_expired_client_timeout */
- YYSYMBOL_server_serve_original_ttl = 500, /* server_serve_original_ttl */
- YYSYMBOL_server_fake_dsa = 501, /* server_fake_dsa */
- YYSYMBOL_server_fake_sha1 = 502, /* server_fake_sha1 */
- YYSYMBOL_server_val_log_level = 503, /* server_val_log_level */
- YYSYMBOL_server_val_nsec3_keysize_iterations = 504, /* server_val_nsec3_keysize_iterations */
- YYSYMBOL_server_zonemd_permissive_mode = 505, /* server_zonemd_permissive_mode */
- YYSYMBOL_server_add_holddown = 506, /* server_add_holddown */
- YYSYMBOL_server_del_holddown = 507, /* server_del_holddown */
- YYSYMBOL_server_keep_missing = 508, /* server_keep_missing */
- YYSYMBOL_server_permit_small_holddown = 509, /* server_permit_small_holddown */
- YYSYMBOL_server_key_cache_size = 510, /* server_key_cache_size */
- YYSYMBOL_server_key_cache_slabs = 511, /* server_key_cache_slabs */
- YYSYMBOL_server_neg_cache_size = 512, /* server_neg_cache_size */
- YYSYMBOL_server_local_zone = 513, /* server_local_zone */
- YYSYMBOL_server_local_data = 514, /* server_local_data */
- YYSYMBOL_server_local_data_ptr = 515, /* server_local_data_ptr */
- YYSYMBOL_server_minimal_responses = 516, /* server_minimal_responses */
- YYSYMBOL_server_rrset_roundrobin = 517, /* server_rrset_roundrobin */
- YYSYMBOL_server_unknown_server_time_limit = 518, /* server_unknown_server_time_limit */
- YYSYMBOL_server_max_udp_size = 519, /* server_max_udp_size */
- YYSYMBOL_server_dns64_prefix = 520, /* server_dns64_prefix */
- YYSYMBOL_server_dns64_synthall = 521, /* server_dns64_synthall */
- YYSYMBOL_server_dns64_ignore_aaaa = 522, /* server_dns64_ignore_aaaa */
- YYSYMBOL_server_define_tag = 523, /* server_define_tag */
- YYSYMBOL_server_local_zone_tag = 524, /* server_local_zone_tag */
- YYSYMBOL_server_access_control_tag = 525, /* server_access_control_tag */
- YYSYMBOL_server_access_control_tag_action = 526, /* server_access_control_tag_action */
- YYSYMBOL_server_access_control_tag_data = 527, /* server_access_control_tag_data */
- YYSYMBOL_server_local_zone_override = 528, /* server_local_zone_override */
- YYSYMBOL_server_access_control_view = 529, /* server_access_control_view */
- YYSYMBOL_server_response_ip_tag = 530, /* server_response_ip_tag */
- YYSYMBOL_server_ip_ratelimit = 531, /* server_ip_ratelimit */
- YYSYMBOL_server_ratelimit = 532, /* server_ratelimit */
- YYSYMBOL_server_ip_ratelimit_size = 533, /* server_ip_ratelimit_size */
- YYSYMBOL_server_ratelimit_size = 534, /* server_ratelimit_size */
- YYSYMBOL_server_ip_ratelimit_slabs = 535, /* server_ip_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_slabs = 536, /* server_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_for_domain = 537, /* server_ratelimit_for_domain */
- YYSYMBOL_server_ratelimit_below_domain = 538, /* server_ratelimit_below_domain */
- YYSYMBOL_server_ip_ratelimit_factor = 539, /* server_ip_ratelimit_factor */
- YYSYMBOL_server_ratelimit_factor = 540, /* server_ratelimit_factor */
- YYSYMBOL_server_low_rtt = 541, /* server_low_rtt */
- YYSYMBOL_server_fast_server_num = 542, /* server_fast_server_num */
- YYSYMBOL_server_fast_server_permil = 543, /* server_fast_server_permil */
- YYSYMBOL_server_qname_minimisation = 544, /* server_qname_minimisation */
- YYSYMBOL_server_qname_minimisation_strict = 545, /* server_qname_minimisation_strict */
- YYSYMBOL_server_pad_responses = 546, /* server_pad_responses */
- YYSYMBOL_server_pad_responses_block_size = 547, /* server_pad_responses_block_size */
- YYSYMBOL_server_pad_queries = 548, /* server_pad_queries */
- YYSYMBOL_server_pad_queries_block_size = 549, /* server_pad_queries_block_size */
- YYSYMBOL_server_ipsecmod_enabled = 550, /* server_ipsecmod_enabled */
- YYSYMBOL_server_ipsecmod_ignore_bogus = 551, /* server_ipsecmod_ignore_bogus */
- YYSYMBOL_server_ipsecmod_hook = 552, /* server_ipsecmod_hook */
- YYSYMBOL_server_ipsecmod_max_ttl = 553, /* server_ipsecmod_max_ttl */
- YYSYMBOL_server_ipsecmod_whitelist = 554, /* server_ipsecmod_whitelist */
- YYSYMBOL_server_ipsecmod_strict = 555, /* server_ipsecmod_strict */
- YYSYMBOL_server_edns_client_string = 556, /* server_edns_client_string */
- YYSYMBOL_server_edns_client_string_opcode = 557, /* server_edns_client_string_opcode */
- YYSYMBOL_stub_name = 558, /* stub_name */
- YYSYMBOL_stub_host = 559, /* stub_host */
- YYSYMBOL_stub_addr = 560, /* stub_addr */
- YYSYMBOL_stub_first = 561, /* stub_first */
- YYSYMBOL_stub_no_cache = 562, /* stub_no_cache */
- YYSYMBOL_stub_ssl_upstream = 563, /* stub_ssl_upstream */
- YYSYMBOL_stub_prime = 564, /* stub_prime */
- YYSYMBOL_forward_name = 565, /* forward_name */
- YYSYMBOL_forward_host = 566, /* forward_host */
- YYSYMBOL_forward_addr = 567, /* forward_addr */
- YYSYMBOL_forward_first = 568, /* forward_first */
- YYSYMBOL_forward_no_cache = 569, /* forward_no_cache */
- YYSYMBOL_forward_ssl_upstream = 570, /* forward_ssl_upstream */
- YYSYMBOL_auth_name = 571, /* auth_name */
- YYSYMBOL_auth_zonefile = 572, /* auth_zonefile */
- YYSYMBOL_auth_master = 573, /* auth_master */
- YYSYMBOL_auth_url = 574, /* auth_url */
- YYSYMBOL_auth_allow_notify = 575, /* auth_allow_notify */
- YYSYMBOL_auth_zonemd_check = 576, /* auth_zonemd_check */
- YYSYMBOL_auth_zonemd_reject_absence = 577, /* auth_zonemd_reject_absence */
- YYSYMBOL_auth_for_downstream = 578, /* auth_for_downstream */
- YYSYMBOL_auth_for_upstream = 579, /* auth_for_upstream */
- YYSYMBOL_auth_fallback_enabled = 580, /* auth_fallback_enabled */
- YYSYMBOL_view_name = 581, /* view_name */
- YYSYMBOL_view_local_zone = 582, /* view_local_zone */
- YYSYMBOL_view_response_ip = 583, /* view_response_ip */
- YYSYMBOL_view_response_ip_data = 584, /* view_response_ip_data */
- YYSYMBOL_view_local_data = 585, /* view_local_data */
- YYSYMBOL_view_local_data_ptr = 586, /* view_local_data_ptr */
- YYSYMBOL_view_first = 587, /* view_first */
- YYSYMBOL_rcstart = 588, /* rcstart */
- YYSYMBOL_contents_rc = 589, /* contents_rc */
- YYSYMBOL_content_rc = 590, /* content_rc */
- YYSYMBOL_rc_control_enable = 591, /* rc_control_enable */
- YYSYMBOL_rc_control_port = 592, /* rc_control_port */
- YYSYMBOL_rc_control_interface = 593, /* rc_control_interface */
- YYSYMBOL_rc_control_use_cert = 594, /* rc_control_use_cert */
- YYSYMBOL_rc_server_key_file = 595, /* rc_server_key_file */
- YYSYMBOL_rc_server_cert_file = 596, /* rc_server_cert_file */
- YYSYMBOL_rc_control_key_file = 597, /* rc_control_key_file */
- YYSYMBOL_rc_control_cert_file = 598, /* rc_control_cert_file */
- YYSYMBOL_dtstart = 599, /* dtstart */
- YYSYMBOL_contents_dt = 600, /* contents_dt */
- YYSYMBOL_content_dt = 601, /* content_dt */
- YYSYMBOL_dt_dnstap_enable = 602, /* dt_dnstap_enable */
- YYSYMBOL_dt_dnstap_bidirectional = 603, /* dt_dnstap_bidirectional */
- YYSYMBOL_dt_dnstap_socket_path = 604, /* dt_dnstap_socket_path */
- YYSYMBOL_dt_dnstap_ip = 605, /* dt_dnstap_ip */
- YYSYMBOL_dt_dnstap_tls = 606, /* dt_dnstap_tls */
- YYSYMBOL_dt_dnstap_tls_server_name = 607, /* dt_dnstap_tls_server_name */
- YYSYMBOL_dt_dnstap_tls_cert_bundle = 608, /* dt_dnstap_tls_cert_bundle */
- YYSYMBOL_dt_dnstap_tls_client_key_file = 609, /* dt_dnstap_tls_client_key_file */
- YYSYMBOL_dt_dnstap_tls_client_cert_file = 610, /* dt_dnstap_tls_client_cert_file */
- YYSYMBOL_dt_dnstap_send_identity = 611, /* dt_dnstap_send_identity */
- YYSYMBOL_dt_dnstap_send_version = 612, /* dt_dnstap_send_version */
- YYSYMBOL_dt_dnstap_identity = 613, /* dt_dnstap_identity */
- YYSYMBOL_dt_dnstap_version = 614, /* dt_dnstap_version */
- YYSYMBOL_dt_dnstap_log_resolver_query_messages = 615, /* dt_dnstap_log_resolver_query_messages */
- YYSYMBOL_dt_dnstap_log_resolver_response_messages = 616, /* dt_dnstap_log_resolver_response_messages */
- YYSYMBOL_dt_dnstap_log_client_query_messages = 617, /* dt_dnstap_log_client_query_messages */
- YYSYMBOL_dt_dnstap_log_client_response_messages = 618, /* dt_dnstap_log_client_response_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 619, /* dt_dnstap_log_forwarder_query_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 620, /* dt_dnstap_log_forwarder_response_messages */
- YYSYMBOL_pythonstart = 621, /* pythonstart */
- YYSYMBOL_contents_py = 622, /* contents_py */
- YYSYMBOL_content_py = 623, /* content_py */
- YYSYMBOL_py_script = 624, /* py_script */
- YYSYMBOL_dynlibstart = 625, /* dynlibstart */
- YYSYMBOL_contents_dl = 626, /* contents_dl */
- YYSYMBOL_content_dl = 627, /* content_dl */
- YYSYMBOL_dl_file = 628, /* dl_file */
- YYSYMBOL_server_disable_dnssec_lame_check = 629, /* server_disable_dnssec_lame_check */
- YYSYMBOL_server_log_identity = 630, /* server_log_identity */
- YYSYMBOL_server_response_ip = 631, /* server_response_ip */
- YYSYMBOL_server_response_ip_data = 632, /* server_response_ip_data */
- YYSYMBOL_dnscstart = 633, /* dnscstart */
- YYSYMBOL_contents_dnsc = 634, /* contents_dnsc */
- YYSYMBOL_content_dnsc = 635, /* content_dnsc */
- YYSYMBOL_dnsc_dnscrypt_enable = 636, /* dnsc_dnscrypt_enable */
- YYSYMBOL_dnsc_dnscrypt_port = 637, /* dnsc_dnscrypt_port */
- YYSYMBOL_dnsc_dnscrypt_provider = 638, /* dnsc_dnscrypt_provider */
- YYSYMBOL_dnsc_dnscrypt_provider_cert = 639, /* dnsc_dnscrypt_provider_cert */
- YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 640, /* dnsc_dnscrypt_provider_cert_rotated */
- YYSYMBOL_dnsc_dnscrypt_secret_key = 641, /* dnsc_dnscrypt_secret_key */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 642, /* dnsc_dnscrypt_shared_secret_cache_size */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 643, /* dnsc_dnscrypt_shared_secret_cache_slabs */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 644, /* dnsc_dnscrypt_nonce_cache_size */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 645, /* dnsc_dnscrypt_nonce_cache_slabs */
- YYSYMBOL_cachedbstart = 646, /* cachedbstart */
- YYSYMBOL_contents_cachedb = 647, /* contents_cachedb */
- YYSYMBOL_content_cachedb = 648, /* content_cachedb */
- YYSYMBOL_cachedb_backend_name = 649, /* cachedb_backend_name */
- YYSYMBOL_cachedb_secret_seed = 650, /* cachedb_secret_seed */
- YYSYMBOL_redis_server_host = 651, /* redis_server_host */
- YYSYMBOL_redis_server_port = 652, /* redis_server_port */
- YYSYMBOL_redis_timeout = 653, /* redis_timeout */
- YYSYMBOL_redis_expire_records = 654, /* redis_expire_records */
- YYSYMBOL_server_tcp_connection_limit = 655, /* server_tcp_connection_limit */
- YYSYMBOL_ipsetstart = 656, /* ipsetstart */
- YYSYMBOL_contents_ipset = 657, /* contents_ipset */
- YYSYMBOL_content_ipset = 658, /* content_ipset */
- YYSYMBOL_ipset_name_v4 = 659, /* ipset_name_v4 */
- YYSYMBOL_ipset_name_v6 = 660 /* ipset_name_v6 */
+ YYSYMBOL_VAR_STUB_TCP_UPSTREAM = 146, /* VAR_STUB_TCP_UPSTREAM */
+ YYSYMBOL_VAR_FORWARD_TCP_UPSTREAM = 147, /* VAR_FORWARD_TCP_UPSTREAM */
+ YYSYMBOL_VAR_HTTPS_PORT = 148, /* VAR_HTTPS_PORT */
+ YYSYMBOL_VAR_HTTP_ENDPOINT = 149, /* VAR_HTTP_ENDPOINT */
+ YYSYMBOL_VAR_HTTP_MAX_STREAMS = 150, /* VAR_HTTP_MAX_STREAMS */
+ YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 151, /* VAR_HTTP_QUERY_BUFFER_SIZE */
+ YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 152, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
+ YYSYMBOL_VAR_HTTP_NODELAY = 153, /* VAR_HTTP_NODELAY */
+ YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 154, /* VAR_HTTP_NOTLS_DOWNSTREAM */
+ YYSYMBOL_VAR_STUB_FIRST = 155, /* VAR_STUB_FIRST */
+ YYSYMBOL_VAR_MINIMAL_RESPONSES = 156, /* VAR_MINIMAL_RESPONSES */
+ YYSYMBOL_VAR_RRSET_ROUNDROBIN = 157, /* VAR_RRSET_ROUNDROBIN */
+ YYSYMBOL_VAR_MAX_UDP_SIZE = 158, /* VAR_MAX_UDP_SIZE */
+ YYSYMBOL_VAR_DELAY_CLOSE = 159, /* VAR_DELAY_CLOSE */
+ YYSYMBOL_VAR_UDP_CONNECT = 160, /* VAR_UDP_CONNECT */
+ YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 161, /* VAR_UNBLOCK_LAN_ZONES */
+ YYSYMBOL_VAR_INSECURE_LAN_ZONES = 162, /* VAR_INSECURE_LAN_ZONES */
+ YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 163, /* VAR_INFRA_CACHE_MIN_RTT */
+ YYSYMBOL_VAR_INFRA_KEEP_PROBING = 164, /* VAR_INFRA_KEEP_PROBING */
+ YYSYMBOL_VAR_DNS64_PREFIX = 165, /* VAR_DNS64_PREFIX */
+ YYSYMBOL_VAR_DNS64_SYNTHALL = 166, /* VAR_DNS64_SYNTHALL */
+ YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 167, /* VAR_DNS64_IGNORE_AAAA */
+ YYSYMBOL_VAR_DNSTAP = 168, /* VAR_DNSTAP */
+ YYSYMBOL_VAR_DNSTAP_ENABLE = 169, /* VAR_DNSTAP_ENABLE */
+ YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 170, /* VAR_DNSTAP_SOCKET_PATH */
+ YYSYMBOL_VAR_DNSTAP_IP = 171, /* VAR_DNSTAP_IP */
+ YYSYMBOL_VAR_DNSTAP_TLS = 172, /* VAR_DNSTAP_TLS */
+ YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 173, /* VAR_DNSTAP_TLS_SERVER_NAME */
+ YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 174, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
+ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 175, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
+ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 176, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
+ YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 177, /* VAR_DNSTAP_SEND_IDENTITY */
+ YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 178, /* VAR_DNSTAP_SEND_VERSION */
+ YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 179, /* VAR_DNSTAP_BIDIRECTIONAL */
+ YYSYMBOL_VAR_DNSTAP_IDENTITY = 180, /* VAR_DNSTAP_IDENTITY */
+ YYSYMBOL_VAR_DNSTAP_VERSION = 181, /* VAR_DNSTAP_VERSION */
+ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 182, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 183, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 184, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 185, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 186, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
+ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 187, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
+ YYSYMBOL_VAR_RESPONSE_IP_TAG = 188, /* VAR_RESPONSE_IP_TAG */
+ YYSYMBOL_VAR_RESPONSE_IP = 189, /* VAR_RESPONSE_IP */
+ YYSYMBOL_VAR_RESPONSE_IP_DATA = 190, /* VAR_RESPONSE_IP_DATA */
+ YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 191, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ YYSYMBOL_VAR_IP_TRANSPARENT = 192, /* VAR_IP_TRANSPARENT */
+ YYSYMBOL_VAR_IP_DSCP = 193, /* VAR_IP_DSCP */
+ YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 194, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ YYSYMBOL_VAR_IP_RATELIMIT = 195, /* VAR_IP_RATELIMIT */
+ YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 196, /* VAR_IP_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 197, /* VAR_IP_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_RATELIMIT = 198, /* VAR_RATELIMIT */
+ YYSYMBOL_VAR_RATELIMIT_SLABS = 199, /* VAR_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_RATELIMIT_SIZE = 200, /* VAR_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_OUTBOUND_MSG_RETRY = 201, /* VAR_OUTBOUND_MSG_RETRY */
+ YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 202, /* VAR_RATELIMIT_FOR_DOMAIN */
+ YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 203, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 204, /* VAR_IP_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_RATELIMIT_FACTOR = 205, /* VAR_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 206, /* VAR_SEND_CLIENT_SUBNET */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 207, /* VAR_CLIENT_SUBNET_ZONE */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 208, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 209, /* VAR_CLIENT_SUBNET_OPCODE */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 210, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 211, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 212, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 213, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 214, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 215, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ YYSYMBOL_VAR_CAPS_WHITELIST = 216, /* VAR_CAPS_WHITELIST */
+ YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 217, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 218, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ YYSYMBOL_VAR_QNAME_MINIMISATION = 219, /* VAR_QNAME_MINIMISATION */
+ YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 220, /* VAR_QNAME_MINIMISATION_STRICT */
+ YYSYMBOL_VAR_IP_FREEBIND = 221, /* VAR_IP_FREEBIND */
+ YYSYMBOL_VAR_DEFINE_TAG = 222, /* VAR_DEFINE_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_TAG = 223, /* VAR_LOCAL_ZONE_TAG */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 224, /* VAR_ACCESS_CONTROL_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 225, /* VAR_LOCAL_ZONE_OVERRIDE */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 226, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 227, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ YYSYMBOL_VAR_VIEW = 228, /* VAR_VIEW */
+ YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 229, /* VAR_ACCESS_CONTROL_VIEW */
+ YYSYMBOL_VAR_VIEW_FIRST = 230, /* VAR_VIEW_FIRST */
+ YYSYMBOL_VAR_SERVE_EXPIRED = 231, /* VAR_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 232, /* VAR_SERVE_EXPIRED_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 233, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 234, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 235, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 236, /* VAR_SERVE_ORIGINAL_TTL */
+ YYSYMBOL_VAR_FAKE_DSA = 237, /* VAR_FAKE_DSA */
+ YYSYMBOL_VAR_FAKE_SHA1 = 238, /* VAR_FAKE_SHA1 */
+ YYSYMBOL_VAR_LOG_IDENTITY = 239, /* VAR_LOG_IDENTITY */
+ YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 240, /* VAR_HIDE_TRUSTANCHOR */
+ YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 241, /* VAR_HIDE_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_HTTP_USER_AGENT = 242, /* VAR_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 243, /* VAR_TRUST_ANCHOR_SIGNALING */
+ YYSYMBOL_VAR_AGGRESSIVE_NSEC = 244, /* VAR_AGGRESSIVE_NSEC */
+ YYSYMBOL_VAR_USE_SYSTEMD = 245, /* VAR_USE_SYSTEMD */
+ YYSYMBOL_VAR_SHM_ENABLE = 246, /* VAR_SHM_ENABLE */
+ YYSYMBOL_VAR_SHM_KEY = 247, /* VAR_SHM_KEY */
+ YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 248, /* VAR_ROOT_KEY_SENTINEL */
+ YYSYMBOL_VAR_DNSCRYPT = 249, /* VAR_DNSCRYPT */
+ YYSYMBOL_VAR_DNSCRYPT_ENABLE = 250, /* VAR_DNSCRYPT_ENABLE */
+ YYSYMBOL_VAR_DNSCRYPT_PORT = 251, /* VAR_DNSCRYPT_PORT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 252, /* VAR_DNSCRYPT_PROVIDER */
+ YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 253, /* VAR_DNSCRYPT_SECRET_KEY */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 254, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 255, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 256, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 257, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 258, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 259, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ YYSYMBOL_VAR_PAD_RESPONSES = 260, /* VAR_PAD_RESPONSES */
+ YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 261, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ YYSYMBOL_VAR_PAD_QUERIES = 262, /* VAR_PAD_QUERIES */
+ YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 263, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ YYSYMBOL_VAR_IPSECMOD_ENABLED = 264, /* VAR_IPSECMOD_ENABLED */
+ YYSYMBOL_VAR_IPSECMOD_HOOK = 265, /* VAR_IPSECMOD_HOOK */
+ YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 266, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 267, /* VAR_IPSECMOD_MAX_TTL */
+ YYSYMBOL_VAR_IPSECMOD_WHITELIST = 268, /* VAR_IPSECMOD_WHITELIST */
+ YYSYMBOL_VAR_IPSECMOD_STRICT = 269, /* VAR_IPSECMOD_STRICT */
+ YYSYMBOL_VAR_CACHEDB = 270, /* VAR_CACHEDB */
+ YYSYMBOL_VAR_CACHEDB_BACKEND = 271, /* VAR_CACHEDB_BACKEND */
+ YYSYMBOL_VAR_CACHEDB_SECRETSEED = 272, /* VAR_CACHEDB_SECRETSEED */
+ YYSYMBOL_VAR_CACHEDB_REDISHOST = 273, /* VAR_CACHEDB_REDISHOST */
+ YYSYMBOL_VAR_CACHEDB_REDISPORT = 274, /* VAR_CACHEDB_REDISPORT */
+ YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 275, /* VAR_CACHEDB_REDISTIMEOUT */
+ YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 276, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 277, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ YYSYMBOL_VAR_FOR_UPSTREAM = 278, /* VAR_FOR_UPSTREAM */
+ YYSYMBOL_VAR_AUTH_ZONE = 279, /* VAR_AUTH_ZONE */
+ YYSYMBOL_VAR_ZONEFILE = 280, /* VAR_ZONEFILE */
+ YYSYMBOL_VAR_MASTER = 281, /* VAR_MASTER */
+ YYSYMBOL_VAR_URL = 282, /* VAR_URL */
+ YYSYMBOL_VAR_FOR_DOWNSTREAM = 283, /* VAR_FOR_DOWNSTREAM */
+ YYSYMBOL_VAR_FALLBACK_ENABLED = 284, /* VAR_FALLBACK_ENABLED */
+ YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 285, /* VAR_TLS_ADDITIONAL_PORT */
+ YYSYMBOL_VAR_LOW_RTT = 286, /* VAR_LOW_RTT */
+ YYSYMBOL_VAR_LOW_RTT_PERMIL = 287, /* VAR_LOW_RTT_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_PERMIL = 288, /* VAR_FAST_SERVER_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_NUM = 289, /* VAR_FAST_SERVER_NUM */
+ YYSYMBOL_VAR_ALLOW_NOTIFY = 290, /* VAR_ALLOW_NOTIFY */
+ YYSYMBOL_VAR_TLS_WIN_CERT = 291, /* VAR_TLS_WIN_CERT */
+ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 292, /* VAR_TCP_CONNECTION_LIMIT */
+ YYSYMBOL_VAR_FORWARD_NO_CACHE = 293, /* VAR_FORWARD_NO_CACHE */
+ YYSYMBOL_VAR_STUB_NO_CACHE = 294, /* VAR_STUB_NO_CACHE */
+ YYSYMBOL_VAR_LOG_SERVFAIL = 295, /* VAR_LOG_SERVFAIL */
+ YYSYMBOL_VAR_DENY_ANY = 296, /* VAR_DENY_ANY */
+ YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 297, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 298, /* VAR_LOG_TAG_QUERYREPLY */
+ YYSYMBOL_VAR_STREAM_WAIT_SIZE = 299, /* VAR_STREAM_WAIT_SIZE */
+ YYSYMBOL_VAR_TLS_CIPHERS = 300, /* VAR_TLS_CIPHERS */
+ YYSYMBOL_VAR_TLS_CIPHERSUITES = 301, /* VAR_TLS_CIPHERSUITES */
+ YYSYMBOL_VAR_TLS_USE_SNI = 302, /* VAR_TLS_USE_SNI */
+ YYSYMBOL_VAR_IPSET = 303, /* VAR_IPSET */
+ YYSYMBOL_VAR_IPSET_NAME_V4 = 304, /* VAR_IPSET_NAME_V4 */
+ YYSYMBOL_VAR_IPSET_NAME_V6 = 305, /* VAR_IPSET_NAME_V6 */
+ YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 306, /* VAR_TLS_SESSION_TICKET_KEYS */
+ YYSYMBOL_VAR_RPZ = 307, /* VAR_RPZ */
+ YYSYMBOL_VAR_TAGS = 308, /* VAR_TAGS */
+ YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 309, /* VAR_RPZ_ACTION_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 310, /* VAR_RPZ_CNAME_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_LOG = 311, /* VAR_RPZ_LOG */
+ YYSYMBOL_VAR_RPZ_LOG_NAME = 312, /* VAR_RPZ_LOG_NAME */
+ YYSYMBOL_VAR_DYNLIB = 313, /* VAR_DYNLIB */
+ YYSYMBOL_VAR_DYNLIB_FILE = 314, /* VAR_DYNLIB_FILE */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING = 315, /* VAR_EDNS_CLIENT_STRING */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 316, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ YYSYMBOL_VAR_NSID = 317, /* VAR_NSID */
+ YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 318, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ YYSYMBOL_VAR_ZONEMD_CHECK = 319, /* VAR_ZONEMD_CHECK */
+ YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 320, /* VAR_ZONEMD_REJECT_ABSENCE */
+ YYSYMBOL_YYACCEPT = 321, /* $accept */
+ YYSYMBOL_toplevelvars = 322, /* toplevelvars */
+ YYSYMBOL_toplevelvar = 323, /* toplevelvar */
+ YYSYMBOL_force_toplevel = 324, /* force_toplevel */
+ YYSYMBOL_serverstart = 325, /* serverstart */
+ YYSYMBOL_contents_server = 326, /* contents_server */
+ YYSYMBOL_content_server = 327, /* content_server */
+ YYSYMBOL_stubstart = 328, /* stubstart */
+ YYSYMBOL_contents_stub = 329, /* contents_stub */
+ YYSYMBOL_content_stub = 330, /* content_stub */
+ YYSYMBOL_forwardstart = 331, /* forwardstart */
+ YYSYMBOL_contents_forward = 332, /* contents_forward */
+ YYSYMBOL_content_forward = 333, /* content_forward */
+ YYSYMBOL_viewstart = 334, /* viewstart */
+ YYSYMBOL_contents_view = 335, /* contents_view */
+ YYSYMBOL_content_view = 336, /* content_view */
+ YYSYMBOL_authstart = 337, /* authstart */
+ YYSYMBOL_contents_auth = 338, /* contents_auth */
+ YYSYMBOL_content_auth = 339, /* content_auth */
+ YYSYMBOL_rpz_tag = 340, /* rpz_tag */
+ YYSYMBOL_rpz_action_override = 341, /* rpz_action_override */
+ YYSYMBOL_rpz_cname_override = 342, /* rpz_cname_override */
+ YYSYMBOL_rpz_log = 343, /* rpz_log */
+ YYSYMBOL_rpz_log_name = 344, /* rpz_log_name */
+ YYSYMBOL_rpzstart = 345, /* rpzstart */
+ YYSYMBOL_contents_rpz = 346, /* contents_rpz */
+ YYSYMBOL_content_rpz = 347, /* content_rpz */
+ YYSYMBOL_server_num_threads = 348, /* server_num_threads */
+ YYSYMBOL_server_verbosity = 349, /* server_verbosity */
+ YYSYMBOL_server_statistics_interval = 350, /* server_statistics_interval */
+ YYSYMBOL_server_statistics_cumulative = 351, /* server_statistics_cumulative */
+ YYSYMBOL_server_extended_statistics = 352, /* server_extended_statistics */
+ YYSYMBOL_server_shm_enable = 353, /* server_shm_enable */
+ YYSYMBOL_server_shm_key = 354, /* server_shm_key */
+ YYSYMBOL_server_port = 355, /* server_port */
+ YYSYMBOL_server_send_client_subnet = 356, /* server_send_client_subnet */
+ YYSYMBOL_server_client_subnet_zone = 357, /* server_client_subnet_zone */
+ YYSYMBOL_server_client_subnet_always_forward = 358, /* server_client_subnet_always_forward */
+ YYSYMBOL_server_client_subnet_opcode = 359, /* server_client_subnet_opcode */
+ YYSYMBOL_server_max_client_subnet_ipv4 = 360, /* server_max_client_subnet_ipv4 */
+ YYSYMBOL_server_max_client_subnet_ipv6 = 361, /* server_max_client_subnet_ipv6 */
+ YYSYMBOL_server_min_client_subnet_ipv4 = 362, /* server_min_client_subnet_ipv4 */
+ YYSYMBOL_server_min_client_subnet_ipv6 = 363, /* server_min_client_subnet_ipv6 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 364, /* server_max_ecs_tree_size_ipv4 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 365, /* server_max_ecs_tree_size_ipv6 */
+ YYSYMBOL_server_interface = 366, /* server_interface */
+ YYSYMBOL_server_outgoing_interface = 367, /* server_outgoing_interface */
+ YYSYMBOL_server_outgoing_range = 368, /* server_outgoing_range */
+ YYSYMBOL_server_outgoing_port_permit = 369, /* server_outgoing_port_permit */
+ YYSYMBOL_server_outgoing_port_avoid = 370, /* server_outgoing_port_avoid */
+ YYSYMBOL_server_outgoing_num_tcp = 371, /* server_outgoing_num_tcp */
+ YYSYMBOL_server_incoming_num_tcp = 372, /* server_incoming_num_tcp */
+ YYSYMBOL_server_interface_automatic = 373, /* server_interface_automatic */
+ YYSYMBOL_server_do_ip4 = 374, /* server_do_ip4 */
+ YYSYMBOL_server_do_ip6 = 375, /* server_do_ip6 */
+ YYSYMBOL_server_do_udp = 376, /* server_do_udp */
+ YYSYMBOL_server_do_tcp = 377, /* server_do_tcp */
+ YYSYMBOL_server_prefer_ip4 = 378, /* server_prefer_ip4 */
+ YYSYMBOL_server_prefer_ip6 = 379, /* server_prefer_ip6 */
+ YYSYMBOL_server_tcp_mss = 380, /* server_tcp_mss */
+ YYSYMBOL_server_outgoing_tcp_mss = 381, /* server_outgoing_tcp_mss */
+ YYSYMBOL_server_tcp_idle_timeout = 382, /* server_tcp_idle_timeout */
+ YYSYMBOL_server_max_reuse_tcp_queries = 383, /* server_max_reuse_tcp_queries */
+ YYSYMBOL_server_tcp_reuse_timeout = 384, /* server_tcp_reuse_timeout */
+ YYSYMBOL_server_tcp_auth_query_timeout = 385, /* server_tcp_auth_query_timeout */
+ YYSYMBOL_server_tcp_keepalive = 386, /* server_tcp_keepalive */
+ YYSYMBOL_server_tcp_keepalive_timeout = 387, /* server_tcp_keepalive_timeout */
+ YYSYMBOL_server_tcp_upstream = 388, /* server_tcp_upstream */
+ YYSYMBOL_server_udp_upstream_without_downstream = 389, /* server_udp_upstream_without_downstream */
+ YYSYMBOL_server_ssl_upstream = 390, /* server_ssl_upstream */
+ YYSYMBOL_server_ssl_service_key = 391, /* server_ssl_service_key */
+ YYSYMBOL_server_ssl_service_pem = 392, /* server_ssl_service_pem */
+ YYSYMBOL_server_ssl_port = 393, /* server_ssl_port */
+ YYSYMBOL_server_tls_cert_bundle = 394, /* server_tls_cert_bundle */
+ YYSYMBOL_server_tls_win_cert = 395, /* server_tls_win_cert */
+ YYSYMBOL_server_tls_additional_port = 396, /* server_tls_additional_port */
+ YYSYMBOL_server_tls_ciphers = 397, /* server_tls_ciphers */
+ YYSYMBOL_server_tls_ciphersuites = 398, /* server_tls_ciphersuites */
+ YYSYMBOL_server_tls_session_ticket_keys = 399, /* server_tls_session_ticket_keys */
+ YYSYMBOL_server_tls_use_sni = 400, /* server_tls_use_sni */
+ YYSYMBOL_server_https_port = 401, /* server_https_port */
+ YYSYMBOL_server_http_endpoint = 402, /* server_http_endpoint */
+ YYSYMBOL_server_http_max_streams = 403, /* server_http_max_streams */
+ YYSYMBOL_server_http_query_buffer_size = 404, /* server_http_query_buffer_size */
+ YYSYMBOL_server_http_response_buffer_size = 405, /* server_http_response_buffer_size */
+ YYSYMBOL_server_http_nodelay = 406, /* server_http_nodelay */
+ YYSYMBOL_server_http_notls_downstream = 407, /* server_http_notls_downstream */
+ YYSYMBOL_server_use_systemd = 408, /* server_use_systemd */
+ YYSYMBOL_server_do_daemonize = 409, /* server_do_daemonize */
+ YYSYMBOL_server_use_syslog = 410, /* server_use_syslog */
+ YYSYMBOL_server_log_time_ascii = 411, /* server_log_time_ascii */
+ YYSYMBOL_server_log_queries = 412, /* server_log_queries */
+ YYSYMBOL_server_log_replies = 413, /* server_log_replies */
+ YYSYMBOL_server_log_tag_queryreply = 414, /* server_log_tag_queryreply */
+ YYSYMBOL_server_log_servfail = 415, /* server_log_servfail */
+ YYSYMBOL_server_log_local_actions = 416, /* server_log_local_actions */
+ YYSYMBOL_server_chroot = 417, /* server_chroot */
+ YYSYMBOL_server_username = 418, /* server_username */
+ YYSYMBOL_server_directory = 419, /* server_directory */
+ YYSYMBOL_server_logfile = 420, /* server_logfile */
+ YYSYMBOL_server_pidfile = 421, /* server_pidfile */
+ YYSYMBOL_server_root_hints = 422, /* server_root_hints */
+ YYSYMBOL_server_dlv_anchor_file = 423, /* server_dlv_anchor_file */
+ YYSYMBOL_server_dlv_anchor = 424, /* server_dlv_anchor */
+ YYSYMBOL_server_auto_trust_anchor_file = 425, /* server_auto_trust_anchor_file */
+ YYSYMBOL_server_trust_anchor_file = 426, /* server_trust_anchor_file */
+ YYSYMBOL_server_trusted_keys_file = 427, /* server_trusted_keys_file */
+ YYSYMBOL_server_trust_anchor = 428, /* server_trust_anchor */
+ YYSYMBOL_server_trust_anchor_signaling = 429, /* server_trust_anchor_signaling */
+ YYSYMBOL_server_root_key_sentinel = 430, /* server_root_key_sentinel */
+ YYSYMBOL_server_domain_insecure = 431, /* server_domain_insecure */
+ YYSYMBOL_server_hide_identity = 432, /* server_hide_identity */
+ YYSYMBOL_server_hide_version = 433, /* server_hide_version */
+ YYSYMBOL_server_hide_trustanchor = 434, /* server_hide_trustanchor */
+ YYSYMBOL_server_hide_http_user_agent = 435, /* server_hide_http_user_agent */
+ YYSYMBOL_server_identity = 436, /* server_identity */
+ YYSYMBOL_server_version = 437, /* server_version */
+ YYSYMBOL_server_http_user_agent = 438, /* server_http_user_agent */
+ YYSYMBOL_server_nsid = 439, /* server_nsid */
+ YYSYMBOL_server_so_rcvbuf = 440, /* server_so_rcvbuf */
+ YYSYMBOL_server_so_sndbuf = 441, /* server_so_sndbuf */
+ YYSYMBOL_server_so_reuseport = 442, /* server_so_reuseport */
+ YYSYMBOL_server_ip_transparent = 443, /* server_ip_transparent */
+ YYSYMBOL_server_ip_freebind = 444, /* server_ip_freebind */
+ YYSYMBOL_server_ip_dscp = 445, /* server_ip_dscp */
+ YYSYMBOL_server_stream_wait_size = 446, /* server_stream_wait_size */
+ YYSYMBOL_server_edns_buffer_size = 447, /* server_edns_buffer_size */
+ YYSYMBOL_server_msg_buffer_size = 448, /* server_msg_buffer_size */
+ YYSYMBOL_server_msg_cache_size = 449, /* server_msg_cache_size */
+ YYSYMBOL_server_msg_cache_slabs = 450, /* server_msg_cache_slabs */
+ YYSYMBOL_server_num_queries_per_thread = 451, /* server_num_queries_per_thread */
+ YYSYMBOL_server_jostle_timeout = 452, /* server_jostle_timeout */
+ YYSYMBOL_server_delay_close = 453, /* server_delay_close */
+ YYSYMBOL_server_udp_connect = 454, /* server_udp_connect */
+ YYSYMBOL_server_unblock_lan_zones = 455, /* server_unblock_lan_zones */
+ YYSYMBOL_server_insecure_lan_zones = 456, /* server_insecure_lan_zones */
+ YYSYMBOL_server_rrset_cache_size = 457, /* server_rrset_cache_size */
+ YYSYMBOL_server_rrset_cache_slabs = 458, /* server_rrset_cache_slabs */
+ YYSYMBOL_server_infra_host_ttl = 459, /* server_infra_host_ttl */
+ YYSYMBOL_server_infra_lame_ttl = 460, /* server_infra_lame_ttl */
+ YYSYMBOL_server_infra_cache_numhosts = 461, /* server_infra_cache_numhosts */
+ YYSYMBOL_server_infra_cache_lame_size = 462, /* server_infra_cache_lame_size */
+ YYSYMBOL_server_infra_cache_slabs = 463, /* server_infra_cache_slabs */
+ YYSYMBOL_server_infra_cache_min_rtt = 464, /* server_infra_cache_min_rtt */
+ YYSYMBOL_server_infra_keep_probing = 465, /* server_infra_keep_probing */
+ YYSYMBOL_server_target_fetch_policy = 466, /* server_target_fetch_policy */
+ YYSYMBOL_server_harden_short_bufsize = 467, /* server_harden_short_bufsize */
+ YYSYMBOL_server_harden_large_queries = 468, /* server_harden_large_queries */
+ YYSYMBOL_server_harden_glue = 469, /* server_harden_glue */
+ YYSYMBOL_server_harden_dnssec_stripped = 470, /* server_harden_dnssec_stripped */
+ YYSYMBOL_server_harden_below_nxdomain = 471, /* server_harden_below_nxdomain */
+ YYSYMBOL_server_harden_referral_path = 472, /* server_harden_referral_path */
+ YYSYMBOL_server_harden_algo_downgrade = 473, /* server_harden_algo_downgrade */
+ YYSYMBOL_server_use_caps_for_id = 474, /* server_use_caps_for_id */
+ YYSYMBOL_server_caps_whitelist = 475, /* server_caps_whitelist */
+ YYSYMBOL_server_private_address = 476, /* server_private_address */
+ YYSYMBOL_server_private_domain = 477, /* server_private_domain */
+ YYSYMBOL_server_prefetch = 478, /* server_prefetch */
+ YYSYMBOL_server_prefetch_key = 479, /* server_prefetch_key */
+ YYSYMBOL_server_deny_any = 480, /* server_deny_any */
+ YYSYMBOL_server_unwanted_reply_threshold = 481, /* server_unwanted_reply_threshold */
+ YYSYMBOL_server_do_not_query_address = 482, /* server_do_not_query_address */
+ YYSYMBOL_server_do_not_query_localhost = 483, /* server_do_not_query_localhost */
+ YYSYMBOL_server_access_control = 484, /* server_access_control */
+ YYSYMBOL_server_module_conf = 485, /* server_module_conf */
+ YYSYMBOL_server_val_override_date = 486, /* server_val_override_date */
+ YYSYMBOL_server_val_sig_skew_min = 487, /* server_val_sig_skew_min */
+ YYSYMBOL_server_val_sig_skew_max = 488, /* server_val_sig_skew_max */
+ YYSYMBOL_server_val_max_restart = 489, /* server_val_max_restart */
+ YYSYMBOL_server_cache_max_ttl = 490, /* server_cache_max_ttl */
+ YYSYMBOL_server_cache_max_negative_ttl = 491, /* server_cache_max_negative_ttl */
+ YYSYMBOL_server_cache_min_ttl = 492, /* server_cache_min_ttl */
+ YYSYMBOL_server_bogus_ttl = 493, /* server_bogus_ttl */
+ YYSYMBOL_server_val_clean_additional = 494, /* server_val_clean_additional */
+ YYSYMBOL_server_val_permissive_mode = 495, /* server_val_permissive_mode */
+ YYSYMBOL_server_aggressive_nsec = 496, /* server_aggressive_nsec */
+ YYSYMBOL_server_ignore_cd_flag = 497, /* server_ignore_cd_flag */
+ YYSYMBOL_server_serve_expired = 498, /* server_serve_expired */
+ YYSYMBOL_server_serve_expired_ttl = 499, /* server_serve_expired_ttl */
+ YYSYMBOL_server_serve_expired_ttl_reset = 500, /* server_serve_expired_ttl_reset */
+ YYSYMBOL_server_serve_expired_reply_ttl = 501, /* server_serve_expired_reply_ttl */
+ YYSYMBOL_server_serve_expired_client_timeout = 502, /* server_serve_expired_client_timeout */
+ YYSYMBOL_server_serve_original_ttl = 503, /* server_serve_original_ttl */
+ YYSYMBOL_server_fake_dsa = 504, /* server_fake_dsa */
+ YYSYMBOL_server_fake_sha1 = 505, /* server_fake_sha1 */
+ YYSYMBOL_server_val_log_level = 506, /* server_val_log_level */
+ YYSYMBOL_server_val_nsec3_keysize_iterations = 507, /* server_val_nsec3_keysize_iterations */
+ YYSYMBOL_server_zonemd_permissive_mode = 508, /* server_zonemd_permissive_mode */
+ YYSYMBOL_server_add_holddown = 509, /* server_add_holddown */
+ YYSYMBOL_server_del_holddown = 510, /* server_del_holddown */
+ YYSYMBOL_server_keep_missing = 511, /* server_keep_missing */
+ YYSYMBOL_server_permit_small_holddown = 512, /* server_permit_small_holddown */
+ YYSYMBOL_server_key_cache_size = 513, /* server_key_cache_size */
+ YYSYMBOL_server_key_cache_slabs = 514, /* server_key_cache_slabs */
+ YYSYMBOL_server_neg_cache_size = 515, /* server_neg_cache_size */
+ YYSYMBOL_server_local_zone = 516, /* server_local_zone */
+ YYSYMBOL_server_local_data = 517, /* server_local_data */
+ YYSYMBOL_server_local_data_ptr = 518, /* server_local_data_ptr */
+ YYSYMBOL_server_minimal_responses = 519, /* server_minimal_responses */
+ YYSYMBOL_server_rrset_roundrobin = 520, /* server_rrset_roundrobin */
+ YYSYMBOL_server_unknown_server_time_limit = 521, /* server_unknown_server_time_limit */
+ YYSYMBOL_server_max_udp_size = 522, /* server_max_udp_size */
+ YYSYMBOL_server_dns64_prefix = 523, /* server_dns64_prefix */
+ YYSYMBOL_server_dns64_synthall = 524, /* server_dns64_synthall */
+ YYSYMBOL_server_dns64_ignore_aaaa = 525, /* server_dns64_ignore_aaaa */
+ YYSYMBOL_server_define_tag = 526, /* server_define_tag */
+ YYSYMBOL_server_local_zone_tag = 527, /* server_local_zone_tag */
+ YYSYMBOL_server_access_control_tag = 528, /* server_access_control_tag */
+ YYSYMBOL_server_access_control_tag_action = 529, /* server_access_control_tag_action */
+ YYSYMBOL_server_access_control_tag_data = 530, /* server_access_control_tag_data */
+ YYSYMBOL_server_local_zone_override = 531, /* server_local_zone_override */
+ YYSYMBOL_server_access_control_view = 532, /* server_access_control_view */
+ YYSYMBOL_server_response_ip_tag = 533, /* server_response_ip_tag */
+ YYSYMBOL_server_ip_ratelimit = 534, /* server_ip_ratelimit */
+ YYSYMBOL_server_ratelimit = 535, /* server_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_size = 536, /* server_ip_ratelimit_size */
+ YYSYMBOL_server_ratelimit_size = 537, /* server_ratelimit_size */
+ YYSYMBOL_server_ip_ratelimit_slabs = 538, /* server_ip_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_slabs = 539, /* server_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_for_domain = 540, /* server_ratelimit_for_domain */
+ YYSYMBOL_server_ratelimit_below_domain = 541, /* server_ratelimit_below_domain */
+ YYSYMBOL_server_ip_ratelimit_factor = 542, /* server_ip_ratelimit_factor */
+ YYSYMBOL_server_ratelimit_factor = 543, /* server_ratelimit_factor */
+ YYSYMBOL_server_outbound_msg_retry = 544, /* server_outbound_msg_retry */
+ YYSYMBOL_server_low_rtt = 545, /* server_low_rtt */
+ YYSYMBOL_server_fast_server_num = 546, /* server_fast_server_num */
+ YYSYMBOL_server_fast_server_permil = 547, /* server_fast_server_permil */
+ YYSYMBOL_server_qname_minimisation = 548, /* server_qname_minimisation */
+ YYSYMBOL_server_qname_minimisation_strict = 549, /* server_qname_minimisation_strict */
+ YYSYMBOL_server_pad_responses = 550, /* server_pad_responses */
+ YYSYMBOL_server_pad_responses_block_size = 551, /* server_pad_responses_block_size */
+ YYSYMBOL_server_pad_queries = 552, /* server_pad_queries */
+ YYSYMBOL_server_pad_queries_block_size = 553, /* server_pad_queries_block_size */
+ YYSYMBOL_server_ipsecmod_enabled = 554, /* server_ipsecmod_enabled */
+ YYSYMBOL_server_ipsecmod_ignore_bogus = 555, /* server_ipsecmod_ignore_bogus */
+ YYSYMBOL_server_ipsecmod_hook = 556, /* server_ipsecmod_hook */
+ YYSYMBOL_server_ipsecmod_max_ttl = 557, /* server_ipsecmod_max_ttl */
+ YYSYMBOL_server_ipsecmod_whitelist = 558, /* server_ipsecmod_whitelist */
+ YYSYMBOL_server_ipsecmod_strict = 559, /* server_ipsecmod_strict */
+ YYSYMBOL_server_edns_client_string = 560, /* server_edns_client_string */
+ YYSYMBOL_server_edns_client_string_opcode = 561, /* server_edns_client_string_opcode */
+ YYSYMBOL_stub_name = 562, /* stub_name */
+ YYSYMBOL_stub_host = 563, /* stub_host */
+ YYSYMBOL_stub_addr = 564, /* stub_addr */
+ YYSYMBOL_stub_first = 565, /* stub_first */
+ YYSYMBOL_stub_no_cache = 566, /* stub_no_cache */
+ YYSYMBOL_stub_ssl_upstream = 567, /* stub_ssl_upstream */
+ YYSYMBOL_stub_tcp_upstream = 568, /* stub_tcp_upstream */
+ YYSYMBOL_stub_prime = 569, /* stub_prime */
+ YYSYMBOL_forward_name = 570, /* forward_name */
+ YYSYMBOL_forward_host = 571, /* forward_host */
+ YYSYMBOL_forward_addr = 572, /* forward_addr */
+ YYSYMBOL_forward_first = 573, /* forward_first */
+ YYSYMBOL_forward_no_cache = 574, /* forward_no_cache */
+ YYSYMBOL_forward_ssl_upstream = 575, /* forward_ssl_upstream */
+ YYSYMBOL_forward_tcp_upstream = 576, /* forward_tcp_upstream */
+ YYSYMBOL_auth_name = 577, /* auth_name */
+ YYSYMBOL_auth_zonefile = 578, /* auth_zonefile */
+ YYSYMBOL_auth_master = 579, /* auth_master */
+ YYSYMBOL_auth_url = 580, /* auth_url */
+ YYSYMBOL_auth_allow_notify = 581, /* auth_allow_notify */
+ YYSYMBOL_auth_zonemd_check = 582, /* auth_zonemd_check */
+ YYSYMBOL_auth_zonemd_reject_absence = 583, /* auth_zonemd_reject_absence */
+ YYSYMBOL_auth_for_downstream = 584, /* auth_for_downstream */
+ YYSYMBOL_auth_for_upstream = 585, /* auth_for_upstream */
+ YYSYMBOL_auth_fallback_enabled = 586, /* auth_fallback_enabled */
+ YYSYMBOL_view_name = 587, /* view_name */
+ YYSYMBOL_view_local_zone = 588, /* view_local_zone */
+ YYSYMBOL_view_response_ip = 589, /* view_response_ip */
+ YYSYMBOL_view_response_ip_data = 590, /* view_response_ip_data */
+ YYSYMBOL_view_local_data = 591, /* view_local_data */
+ YYSYMBOL_view_local_data_ptr = 592, /* view_local_data_ptr */
+ YYSYMBOL_view_first = 593, /* view_first */
+ YYSYMBOL_rcstart = 594, /* rcstart */
+ YYSYMBOL_contents_rc = 595, /* contents_rc */
+ YYSYMBOL_content_rc = 596, /* content_rc */
+ YYSYMBOL_rc_control_enable = 597, /* rc_control_enable */
+ YYSYMBOL_rc_control_port = 598, /* rc_control_port */
+ YYSYMBOL_rc_control_interface = 599, /* rc_control_interface */
+ YYSYMBOL_rc_control_use_cert = 600, /* rc_control_use_cert */
+ YYSYMBOL_rc_server_key_file = 601, /* rc_server_key_file */
+ YYSYMBOL_rc_server_cert_file = 602, /* rc_server_cert_file */
+ YYSYMBOL_rc_control_key_file = 603, /* rc_control_key_file */
+ YYSYMBOL_rc_control_cert_file = 604, /* rc_control_cert_file */
+ YYSYMBOL_dtstart = 605, /* dtstart */
+ YYSYMBOL_contents_dt = 606, /* contents_dt */
+ YYSYMBOL_content_dt = 607, /* content_dt */
+ YYSYMBOL_dt_dnstap_enable = 608, /* dt_dnstap_enable */
+ YYSYMBOL_dt_dnstap_bidirectional = 609, /* dt_dnstap_bidirectional */
+ YYSYMBOL_dt_dnstap_socket_path = 610, /* dt_dnstap_socket_path */
+ YYSYMBOL_dt_dnstap_ip = 611, /* dt_dnstap_ip */
+ YYSYMBOL_dt_dnstap_tls = 612, /* dt_dnstap_tls */
+ YYSYMBOL_dt_dnstap_tls_server_name = 613, /* dt_dnstap_tls_server_name */
+ YYSYMBOL_dt_dnstap_tls_cert_bundle = 614, /* dt_dnstap_tls_cert_bundle */
+ YYSYMBOL_dt_dnstap_tls_client_key_file = 615, /* dt_dnstap_tls_client_key_file */
+ YYSYMBOL_dt_dnstap_tls_client_cert_file = 616, /* dt_dnstap_tls_client_cert_file */
+ YYSYMBOL_dt_dnstap_send_identity = 617, /* dt_dnstap_send_identity */
+ YYSYMBOL_dt_dnstap_send_version = 618, /* dt_dnstap_send_version */
+ YYSYMBOL_dt_dnstap_identity = 619, /* dt_dnstap_identity */
+ YYSYMBOL_dt_dnstap_version = 620, /* dt_dnstap_version */
+ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 621, /* dt_dnstap_log_resolver_query_messages */
+ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 622, /* dt_dnstap_log_resolver_response_messages */
+ YYSYMBOL_dt_dnstap_log_client_query_messages = 623, /* dt_dnstap_log_client_query_messages */
+ YYSYMBOL_dt_dnstap_log_client_response_messages = 624, /* dt_dnstap_log_client_response_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 625, /* dt_dnstap_log_forwarder_query_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 626, /* dt_dnstap_log_forwarder_response_messages */
+ YYSYMBOL_pythonstart = 627, /* pythonstart */
+ YYSYMBOL_contents_py = 628, /* contents_py */
+ YYSYMBOL_content_py = 629, /* content_py */
+ YYSYMBOL_py_script = 630, /* py_script */
+ YYSYMBOL_dynlibstart = 631, /* dynlibstart */
+ YYSYMBOL_contents_dl = 632, /* contents_dl */
+ YYSYMBOL_content_dl = 633, /* content_dl */
+ YYSYMBOL_dl_file = 634, /* dl_file */
+ YYSYMBOL_server_disable_dnssec_lame_check = 635, /* server_disable_dnssec_lame_check */
+ YYSYMBOL_server_log_identity = 636, /* server_log_identity */
+ YYSYMBOL_server_response_ip = 637, /* server_response_ip */
+ YYSYMBOL_server_response_ip_data = 638, /* server_response_ip_data */
+ YYSYMBOL_dnscstart = 639, /* dnscstart */
+ YYSYMBOL_contents_dnsc = 640, /* contents_dnsc */
+ YYSYMBOL_content_dnsc = 641, /* content_dnsc */
+ YYSYMBOL_dnsc_dnscrypt_enable = 642, /* dnsc_dnscrypt_enable */
+ YYSYMBOL_dnsc_dnscrypt_port = 643, /* dnsc_dnscrypt_port */
+ YYSYMBOL_dnsc_dnscrypt_provider = 644, /* dnsc_dnscrypt_provider */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert = 645, /* dnsc_dnscrypt_provider_cert */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 646, /* dnsc_dnscrypt_provider_cert_rotated */
+ YYSYMBOL_dnsc_dnscrypt_secret_key = 647, /* dnsc_dnscrypt_secret_key */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 648, /* dnsc_dnscrypt_shared_secret_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 649, /* dnsc_dnscrypt_shared_secret_cache_slabs */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 650, /* dnsc_dnscrypt_nonce_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 651, /* dnsc_dnscrypt_nonce_cache_slabs */
+ YYSYMBOL_cachedbstart = 652, /* cachedbstart */
+ YYSYMBOL_contents_cachedb = 653, /* contents_cachedb */
+ YYSYMBOL_content_cachedb = 654, /* content_cachedb */
+ YYSYMBOL_cachedb_backend_name = 655, /* cachedb_backend_name */
+ YYSYMBOL_cachedb_secret_seed = 656, /* cachedb_secret_seed */
+ YYSYMBOL_redis_server_host = 657, /* redis_server_host */
+ YYSYMBOL_redis_server_port = 658, /* redis_server_port */
+ YYSYMBOL_redis_timeout = 659, /* redis_timeout */
+ YYSYMBOL_redis_expire_records = 660, /* redis_expire_records */
+ YYSYMBOL_server_tcp_connection_limit = 661, /* server_tcp_connection_limit */
+ YYSYMBOL_ipsetstart = 662, /* ipsetstart */
+ YYSYMBOL_contents_ipset = 663, /* contents_ipset */
+ YYSYMBOL_content_ipset = 664, /* content_ipset */
+ YYSYMBOL_ipset_name_v4 = 665, /* ipset_name_v4 */
+ YYSYMBOL_ipset_name_v6 = 666 /* ipset_name_v6 */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -1774,18 +1786,18 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 672
+#define YYLAST 678
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 318
+#define YYNTOKENS 321
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 343
+#define YYNNTS 346
/* YYNRULES -- Number of rules. */
-#define YYNRULES 662
+#define YYNRULES 668
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 984
+#define YYNSTATES 993
-#define YYMAXUTOK 572
+#define YYMAXUTOK 575
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1856,80 +1868,80 @@ static const yytype_int16 yytranslate[] =
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317
+ 315, 316, 317, 318, 319, 320
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 190, 190, 190, 191, 191, 192, 192, 193, 193,
- 193, 194, 194, 195, 195, 196, 196, 197, 199, 205,
- 210, 211, 212, 212, 212, 213, 213, 214, 214, 214,
- 215, 215, 216, 216, 216, 217, 217, 218, 218, 218,
- 219, 219, 219, 220, 220, 221, 221, 222, 222, 223,
- 223, 224, 224, 225, 225, 226, 226, 227, 227, 228,
- 228, 228, 229, 229, 230, 230, 230, 231, 231, 231,
- 232, 232, 233, 233, 234, 234, 235, 235, 236, 236,
- 236, 237, 237, 238, 238, 239, 239, 239, 240, 240,
- 241, 241, 242, 242, 243, 243, 243, 244, 244, 245,
- 245, 246, 246, 247, 247, 248, 248, 249, 249, 250,
- 250, 251, 251, 252, 252, 252, 253, 253, 253, 254,
- 254, 254, 255, 255, 255, 255, 256, 257, 257, 257,
- 258, 258, 258, 259, 259, 260, 260, 261, 261, 261,
- 262, 262, 262, 263, 263, 264, 264, 264, 265, 265,
- 266, 266, 266, 267, 267, 268, 268, 269, 269, 270,
- 271, 271, 272, 272, 273, 273, 274, 275, 275, 276,
- 276, 277, 277, 278, 278, 279, 279, 280, 280, 280,
- 281, 281, 282, 282, 283, 283, 284, 285, 285, 286,
- 286, 287, 288, 288, 289, 289, 290, 290, 291, 291,
- 292, 292, 292, 293, 293, 293, 294, 294, 295, 296,
- 296, 297, 297, 298, 298, 299, 299, 300, 300, 300,
- 301, 301, 301, 302, 302, 302, 303, 303, 304, 304,
- 305, 305, 306, 306, 307, 307, 308, 308, 309, 309,
- 312, 324, 325, 326, 326, 326, 326, 326, 327, 327,
- 329, 341, 342, 343, 343, 343, 343, 344, 344, 346,
- 360, 361, 362, 362, 362, 362, 363, 363, 363, 365,
- 384, 385, 386, 386, 386, 386, 387, 387, 387, 388,
- 388, 388, 391, 410, 427, 435, 445, 453, 470, 471,
- 472, 472, 472, 472, 472, 473, 473, 473, 474, 474,
- 476, 485, 494, 505, 514, 523, 532, 543, 552, 564,
- 578, 593, 604, 621, 638, 655, 672, 687, 702, 715,
- 730, 739, 748, 757, 766, 775, 784, 793, 802, 811,
- 820, 829, 838, 847, 856, 869, 880, 891, 902, 911,
- 924, 933, 942, 951, 958, 965, 974, 981, 990, 998,
- 1005, 1012, 1020, 1029, 1037, 1053, 1061, 1069, 1077, 1085,
- 1093, 1102, 1111, 1125, 1134, 1143, 1152, 1161, 1170, 1179,
- 1186, 1193, 1219, 1227, 1234, 1241, 1248, 1255, 1263, 1271,
- 1279, 1286, 1297, 1308, 1315, 1324, 1333, 1342, 1351, 1358,
- 1365, 1372, 1388, 1396, 1404, 1414, 1424, 1434, 1448, 1456,
- 1469, 1480, 1488, 1501, 1510, 1519, 1528, 1537, 1547, 1557,
- 1565, 1578, 1587, 1595, 1604, 1612, 1625, 1634, 1644, 1651,
- 1661, 1671, 1681, 1691, 1701, 1711, 1721, 1731, 1738, 1745,
- 1752, 1761, 1770, 1779, 1788, 1795, 1805, 1825, 1832, 1850,
- 1863, 1876, 1889, 1898, 1907, 1916, 1925, 1935, 1945, 1956,
- 1965, 1974, 1983, 1992, 2001, 2010, 2019, 2032, 2045, 2054,
- 2061, 2070, 2079, 2088, 2097, 2106, 2114, 2127, 2135, 2180,
- 2187, 2202, 2212, 2222, 2229, 2236, 2243, 2252, 2260, 2274,
- 2295, 2316, 2328, 2340, 2352, 2361, 2382, 2392, 2401, 2409,
- 2417, 2430, 2443, 2458, 2473, 2482, 2491, 2497, 2506, 2515,
- 2525, 2535, 2545, 2554, 2564, 2573, 2586, 2599, 2611, 2625,
- 2637, 2651, 2660, 2672, 2682, 2689, 2696, 2705, 2714, 2724,
- 2734, 2744, 2751, 2758, 2767, 2776, 2786, 2796, 2803, 2810,
- 2817, 2825, 2835, 2845, 2855, 2865, 2875, 2885, 2931, 2941,
- 2949, 2957, 2972, 2981, 2986, 2987, 2988, 2988, 2988, 2989,
- 2989, 2989, 2990, 2990, 2992, 3002, 3011, 3018, 3025, 3032,
- 3039, 3046, 3053, 3058, 3059, 3060, 3060, 3060, 3061, 3061,
- 3061, 3062, 3063, 3063, 3064, 3064, 3065, 3065, 3066, 3067,
- 3068, 3069, 3070, 3071, 3073, 3082, 3092, 3099, 3106, 3115,
- 3122, 3129, 3136, 3143, 3152, 3161, 3168, 3175, 3185, 3195,
- 3205, 3215, 3225, 3235, 3240, 3241, 3242, 3244, 3250, 3255,
- 3256, 3257, 3259, 3265, 3275, 3282, 3291, 3299, 3304, 3305,
- 3307, 3307, 3307, 3308, 3308, 3309, 3310, 3311, 3312, 3313,
- 3315, 3325, 3334, 3341, 3350, 3357, 3366, 3374, 3387, 3395,
- 3408, 3413, 3414, 3415, 3415, 3416, 3416, 3416, 3417, 3419,
- 3431, 3443, 3455, 3470, 3483, 3496, 3507, 3512, 3513, 3514,
- 3514, 3516, 3531
+ 0, 192, 192, 192, 193, 193, 194, 194, 195, 195,
+ 195, 196, 196, 197, 197, 198, 198, 199, 201, 207,
+ 212, 213, 214, 214, 214, 215, 215, 216, 216, 216,
+ 217, 217, 218, 218, 218, 219, 219, 220, 220, 220,
+ 221, 221, 221, 222, 222, 223, 223, 224, 224, 225,
+ 225, 226, 226, 227, 227, 228, 228, 229, 229, 230,
+ 230, 230, 231, 231, 232, 232, 232, 233, 233, 233,
+ 234, 234, 235, 235, 236, 236, 237, 237, 238, 238,
+ 238, 239, 239, 240, 240, 241, 241, 241, 242, 242,
+ 243, 243, 244, 244, 245, 245, 245, 246, 246, 247,
+ 247, 248, 248, 249, 249, 250, 250, 251, 251, 252,
+ 252, 253, 253, 254, 254, 254, 255, 255, 255, 256,
+ 256, 256, 257, 257, 257, 257, 258, 259, 259, 259,
+ 260, 260, 260, 261, 261, 262, 262, 263, 263, 263,
+ 264, 264, 264, 265, 265, 266, 266, 266, 267, 267,
+ 268, 268, 268, 269, 269, 270, 270, 271, 271, 272,
+ 273, 273, 274, 274, 275, 275, 276, 276, 277, 277,
+ 278, 278, 279, 279, 280, 280, 281, 281, 282, 282,
+ 282, 283, 283, 284, 284, 285, 285, 286, 287, 287,
+ 288, 288, 289, 290, 290, 291, 291, 292, 292, 293,
+ 293, 294, 294, 294, 295, 295, 295, 296, 296, 297,
+ 298, 298, 299, 299, 300, 300, 301, 301, 302, 302,
+ 302, 303, 303, 303, 304, 304, 304, 305, 305, 306,
+ 306, 307, 307, 308, 308, 309, 309, 310, 310, 311,
+ 311, 314, 327, 328, 329, 329, 329, 329, 329, 330,
+ 330, 330, 332, 345, 346, 347, 347, 347, 347, 348,
+ 348, 348, 350, 365, 366, 367, 367, 367, 367, 368,
+ 368, 368, 370, 390, 391, 392, 392, 392, 392, 393,
+ 393, 393, 394, 394, 394, 397, 416, 433, 441, 451,
+ 459, 477, 478, 479, 479, 479, 479, 479, 480, 480,
+ 480, 481, 481, 483, 492, 501, 512, 521, 530, 539,
+ 550, 559, 571, 585, 600, 611, 628, 645, 662, 679,
+ 694, 709, 722, 737, 746, 755, 764, 773, 782, 791,
+ 800, 809, 818, 827, 836, 845, 854, 863, 876, 887,
+ 898, 909, 918, 931, 940, 949, 958, 965, 972, 981,
+ 988, 997, 1005, 1012, 1019, 1027, 1036, 1044, 1060, 1068,
+ 1076, 1084, 1092, 1100, 1109, 1118, 1132, 1141, 1150, 1159,
+ 1168, 1177, 1186, 1193, 1200, 1226, 1234, 1241, 1248, 1255,
+ 1262, 1270, 1278, 1286, 1293, 1304, 1315, 1322, 1331, 1340,
+ 1349, 1358, 1365, 1372, 1379, 1395, 1403, 1411, 1421, 1431,
+ 1441, 1455, 1463, 1476, 1487, 1495, 1508, 1517, 1526, 1535,
+ 1544, 1554, 1564, 1572, 1585, 1594, 1602, 1611, 1619, 1632,
+ 1641, 1651, 1658, 1668, 1678, 1688, 1698, 1708, 1718, 1728,
+ 1738, 1745, 1752, 1759, 1768, 1777, 1786, 1795, 1802, 1812,
+ 1832, 1839, 1857, 1870, 1883, 1896, 1905, 1914, 1923, 1932,
+ 1942, 1952, 1963, 1972, 1981, 1990, 1999, 2008, 2017, 2026,
+ 2039, 2052, 2061, 2068, 2077, 2086, 2095, 2104, 2113, 2121,
+ 2134, 2142, 2187, 2194, 2209, 2219, 2229, 2236, 2243, 2250,
+ 2259, 2267, 2281, 2302, 2323, 2335, 2347, 2359, 2368, 2389,
+ 2398, 2407, 2415, 2423, 2436, 2449, 2464, 2479, 2488, 2497,
+ 2506, 2512, 2521, 2530, 2540, 2550, 2560, 2569, 2579, 2588,
+ 2601, 2614, 2626, 2640, 2652, 2666, 2675, 2687, 2697, 2704,
+ 2711, 2720, 2729, 2739, 2749, 2759, 2769, 2776, 2783, 2792,
+ 2801, 2811, 2821, 2831, 2838, 2845, 2852, 2860, 2870, 2880,
+ 2890, 2900, 2910, 2920, 2966, 2976, 2984, 2992, 3007, 3016,
+ 3021, 3022, 3023, 3023, 3023, 3024, 3024, 3024, 3025, 3025,
+ 3027, 3037, 3046, 3053, 3060, 3067, 3074, 3081, 3088, 3093,
+ 3094, 3095, 3095, 3095, 3096, 3096, 3096, 3097, 3098, 3098,
+ 3099, 3099, 3100, 3100, 3101, 3102, 3103, 3104, 3105, 3106,
+ 3108, 3117, 3127, 3134, 3141, 3150, 3157, 3164, 3171, 3178,
+ 3187, 3196, 3203, 3210, 3220, 3230, 3240, 3250, 3260, 3270,
+ 3275, 3276, 3277, 3279, 3285, 3290, 3291, 3292, 3294, 3300,
+ 3310, 3317, 3326, 3334, 3339, 3340, 3342, 3342, 3342, 3343,
+ 3343, 3344, 3345, 3346, 3347, 3348, 3350, 3360, 3369, 3376,
+ 3385, 3392, 3401, 3409, 3422, 3430, 3443, 3448, 3449, 3450,
+ 3450, 3451, 3451, 3451, 3452, 3454, 3466, 3478, 3490, 3505,
+ 3518, 3531, 3542, 3547, 3548, 3549, 3549, 3551, 3566
};
#endif
@@ -1993,7 +2005,8 @@ static const char *const yytname[] =
"VAR_SSL_UPSTREAM", "VAR_TCP_AUTH_QUERY_TIMEOUT", "VAR_SSL_SERVICE_KEY",
"VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
"VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
- "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
+ "VAR_TLS_CERT_BUNDLE", "VAR_STUB_TCP_UPSTREAM",
+ "VAR_FORWARD_TCP_UPSTREAM", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
"VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE",
"VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY",
"VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
@@ -2017,20 +2030,21 @@ static const char *const yytname[] =
"VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
"VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
"VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
- "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
- "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
- "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
- "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
- "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
- "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
- "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
- "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
- "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
- "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
- "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
- "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
- "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
- "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
+ "VAR_OUTBOUND_MSG_RETRY", "VAR_RATELIMIT_FOR_DOMAIN",
+ "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR",
+ "VAR_RATELIMIT_FACTOR", "VAR_SEND_CLIENT_SUBNET",
+ "VAR_CLIENT_SUBNET_ZONE", "VAR_CLIENT_SUBNET_ALWAYS_FORWARD",
+ "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4",
+ "VAR_MAX_CLIENT_SUBNET_IPV6", "VAR_MIN_CLIENT_SUBNET_IPV4",
+ "VAR_MIN_CLIENT_SUBNET_IPV6", "VAR_MAX_ECS_TREE_SIZE_IPV4",
+ "VAR_MAX_ECS_TREE_SIZE_IPV6", "VAR_CAPS_WHITELIST",
+ "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN",
+ "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT",
+ "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG",
+ "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE",
+ "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA",
+ "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
+ "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
"VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
"VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_SERVE_ORIGINAL_TTL",
"VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY",
@@ -2156,18 +2170,19 @@ static const char *const yytname[] =
"server_ratelimit_size", "server_ip_ratelimit_slabs",
"server_ratelimit_slabs", "server_ratelimit_for_domain",
"server_ratelimit_below_domain", "server_ip_ratelimit_factor",
- "server_ratelimit_factor", "server_low_rtt", "server_fast_server_num",
- "server_fast_server_permil", "server_qname_minimisation",
- "server_qname_minimisation_strict", "server_pad_responses",
- "server_pad_responses_block_size", "server_pad_queries",
- "server_pad_queries_block_size", "server_ipsecmod_enabled",
- "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
- "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
- "server_ipsecmod_strict", "server_edns_client_string",
- "server_edns_client_string_opcode", "stub_name", "stub_host",
- "stub_addr", "stub_first", "stub_no_cache", "stub_ssl_upstream",
- "stub_prime", "forward_name", "forward_host", "forward_addr",
- "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name",
+ "server_ratelimit_factor", "server_outbound_msg_retry", "server_low_rtt",
+ "server_fast_server_num", "server_fast_server_permil",
+ "server_qname_minimisation", "server_qname_minimisation_strict",
+ "server_pad_responses", "server_pad_responses_block_size",
+ "server_pad_queries", "server_pad_queries_block_size",
+ "server_ipsecmod_enabled", "server_ipsecmod_ignore_bogus",
+ "server_ipsecmod_hook", "server_ipsecmod_max_ttl",
+ "server_ipsecmod_whitelist", "server_ipsecmod_strict",
+ "server_edns_client_string", "server_edns_client_string_opcode",
+ "stub_name", "stub_host", "stub_addr", "stub_first", "stub_no_cache",
+ "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name",
+ "forward_host", "forward_addr", "forward_first", "forward_no_cache",
+ "forward_ssl_upstream", "forward_tcp_upstream", "auth_name",
"auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
"auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream",
"auth_for_upstream", "auth_fallback_enabled", "view_name",
@@ -2247,11 +2262,12 @@ static const yytype_int16 yytoknum[] =
535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
- 565, 566, 567, 568, 569, 570, 571, 572
+ 565, 566, 567, 568, 569, 570, 571, 572, 573, 574,
+ 575
};
#endif
-#define YYPACT_NINF (-302)
+#define YYPACT_NINF (-305)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -2265,105 +2281,106 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -302, 0, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, 298, -43, -38, -42, -44, -28, -29, -149,
- -109, -301, -194, -192, -293, 3, 4, 27, 28, 31,
+ -305, 0, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, 301, -43, -38, -42, -44, -28, -29, -151,
+ -109, -304, -197, -195, -296, 3, 4, 27, 28, 31,
32, 33, 34, 35, 37, 38, 39, 40, 41, 53,
54, 55, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 87, 88, 89, 91,
- 92, 93, 95, 97, 98, 99, 101, 102, 103, 105,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 132, 133, 134, 137,
- 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
- 210, 211, 212, 213, 214, 216, 217, 218, 219, 220,
- 222, 228, 229, 230, 231, 232, 234, 235, 237, 243,
- 244, 245, 246, 247, 248, 250, 251, 252, 253, 254,
- 255, 256, 258, 259, 260, 261, 264, 265, 272, 273,
- 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 291, 292, 293, 295,
- 296, 297, 299, 333, 334, 335, 336, 340, 341, 342,
- 384, 385, 386, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, 387, 388, 389, 390, 391, 392, 398, -302,
- -302, -302, -302, -302, -302, -302, -302, 402, 403, 430,
- 431, 432, 441, -302, -302, -302, -302, -302, -302, -302,
- 454, 455, 456, 457, 458, 459, 460, -302, -302, -302,
- -302, -302, -302, -302, -302, 461, 462, 463, 464, 465,
- 466, 467, 468, 469, 470, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, 471, 472, 473, 513,
- 515, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, 534, 535, 536, 537, 538, 539, 540, 541,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, 542,
- 543, 544, 555, 556, 557, 558, 559, 560, 561, 563,
- 564, 565, 566, 567, 568, 569, 572, 575, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, 578, -302,
- -302, 579, -302, -302, 588, 589, 590, 592, 593, 594,
- 595, 596, 597, 598, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, 599, 604, 605, 606, 607,
- 608, -302, -302, -302, -302, -302, -302, -302, 609, 610,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, 611, 612, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, 613, 614, 615, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, 616, 617, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, 618, 619, 620,
- 621, 622, 623, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, 624, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, 625, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, 626, -302, -302, 627, 628,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, 629, 630, 631, -302, -302, -302, -302, -302,
- -302, -302, -302, -302
+ 92, 95, 97, 98, 100, 101, 103, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 159, 160,
+ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 219, 220, 221, 222,
+ 223, 225, 231, 232, 233, 234, 235, 237, 238, 240,
+ 246, 247, 248, 249, 250, 251, 253, 254, 255, 256,
+ 257, 258, 259, 261, 262, 263, 264, 267, 268, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 294, 295, 296,
+ 298, 299, 300, 302, 336, 337, 338, 339, 343, 344,
+ 345, 387, 388, 389, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 390, 391, 392, 393, 394, 395,
+ 401, 405, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, 406, 433, 434, 435, 437, 438, 446, -305, -305,
+ -305, -305, -305, -305, -305, -305, 459, 460, 461, 462,
+ 463, 464, 465, -305, -305, -305, -305, -305, -305, -305,
+ -305, 466, 467, 468, 469, 470, 471, 472, 473, 474,
+ 475, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, 476, 477, 478, 519, 521, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, 540, 541,
+ 542, 543, 544, 545, 546, 547, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, 548, 549, 550, 561, 562,
+ 563, 564, 565, 566, 567, 569, 570, 571, 572, 573,
+ 574, 575, 578, 581, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 584, -305, -305, 585, -305, -305,
+ 594, 595, 596, 598, 599, 600, 601, 602, 603, 604,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, 605, 610, 611, 612, 613, 614, -305, -305, -305,
+ -305, -305, -305, -305, 615, 616, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, 617,
+ 618, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, 619,
+ 620, 621, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, 622, 623, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 624, 625, 626, 627, 628, 629,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 630, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 631, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, 632, -305, -305, 633, 634, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, 635, 636, 637, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -2371,10 +2388,10 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_int16 yydefact[] =
{
- 2, 0, 1, 18, 19, 240, 250, 543, 603, 562,
- 259, 617, 640, 269, 656, 287, 608, 3, 17, 21,
- 242, 252, 261, 271, 289, 545, 564, 605, 610, 619,
- 642, 658, 4, 5, 6, 10, 14, 15, 8, 9,
+ 2, 0, 1, 18, 19, 241, 252, 549, 609, 568,
+ 262, 623, 646, 272, 662, 290, 614, 3, 17, 21,
+ 243, 254, 264, 274, 292, 551, 570, 611, 616, 625,
+ 648, 664, 4, 5, 6, 10, 14, 15, 8, 9,
7, 16, 11, 12, 13, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2397,159 +2414,160 @@ static const yytype_int16 yydefact[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 20, 22, 23, 88, 91, 100, 203,
- 204, 24, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 37, 79, 25, 92, 93, 48, 72, 87,
- 26, 27, 30, 31, 28, 29, 32, 33, 34, 237,
- 238, 239, 35, 36, 124, 215, 125, 127, 128, 129,
- 217, 222, 218, 229, 230, 231, 232, 130, 131, 132,
- 133, 134, 135, 136, 199, 89, 78, 104, 122, 123,
- 227, 224, 126, 38, 39, 40, 41, 42, 80, 94,
- 95, 111, 66, 76, 67, 207, 208, 105, 58, 59,
- 206, 62, 60, 61, 63, 235, 115, 119, 140, 150,
- 177, 153, 228, 116, 73, 43, 44, 45, 102, 141,
- 142, 143, 144, 46, 47, 49, 50, 52, 53, 51,
- 148, 154, 54, 55, 56, 64, 83, 120, 97, 149,
- 90, 173, 98, 99, 117, 118, 225, 103, 57, 81,
- 84, 65, 68, 106, 107, 108, 82, 174, 109, 69,
- 70, 71, 216, 121, 191, 192, 193, 194, 195, 196,
- 197, 205, 110, 77, 236, 112, 113, 114, 175, 74,
- 75, 96, 85, 86, 101, 137, 138, 226, 139, 145,
- 146, 147, 178, 179, 181, 183, 184, 182, 185, 200,
- 151, 152, 157, 158, 155, 156, 159, 160, 162, 161,
- 219, 221, 220, 176, 186, 187, 188, 189, 190, 209,
- 211, 210, 212, 213, 214, 233, 234, 180, 198, 201,
- 202, 223, 0, 0, 0, 0, 0, 0, 0, 241,
- 243, 244, 245, 247, 248, 249, 246, 0, 0, 0,
- 0, 0, 0, 251, 253, 254, 255, 256, 257, 258,
- 0, 0, 0, 0, 0, 0, 0, 260, 262, 263,
- 266, 267, 264, 268, 265, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 270, 272, 273, 274, 275,
- 279, 280, 281, 276, 277, 278, 0, 0, 0, 0,
- 0, 292, 296, 297, 298, 299, 288, 290, 291, 293,
- 294, 295, 0, 0, 0, 0, 0, 0, 0, 0,
- 544, 546, 548, 547, 553, 549, 550, 551, 552, 0,
+ 0, 0, 0, 0, 20, 22, 23, 88, 91, 100,
+ 204, 205, 24, 164, 165, 166, 167, 168, 169, 170,
+ 171, 172, 173, 37, 79, 25, 92, 93, 48, 72,
+ 87, 26, 27, 30, 31, 28, 29, 32, 33, 34,
+ 238, 239, 240, 35, 36, 124, 216, 125, 127, 128,
+ 129, 218, 223, 219, 230, 231, 232, 233, 130, 131,
+ 132, 133, 134, 135, 136, 200, 89, 78, 104, 122,
+ 123, 228, 225, 126, 38, 39, 40, 41, 42, 80,
+ 94, 95, 111, 66, 76, 67, 208, 209, 105, 58,
+ 59, 207, 62, 60, 61, 63, 236, 115, 119, 140,
+ 150, 178, 153, 229, 116, 73, 43, 44, 45, 102,
+ 141, 142, 143, 144, 46, 47, 49, 50, 52, 53,
+ 51, 148, 154, 54, 55, 56, 64, 83, 120, 97,
+ 149, 90, 174, 98, 99, 117, 118, 226, 103, 57,
+ 81, 84, 65, 68, 106, 107, 108, 82, 175, 109,
+ 69, 70, 71, 217, 121, 192, 193, 194, 195, 196,
+ 197, 198, 206, 110, 77, 237, 112, 113, 114, 176,
+ 74, 75, 96, 85, 86, 101, 137, 138, 227, 139,
+ 145, 146, 147, 179, 180, 182, 184, 185, 183, 186,
+ 201, 151, 152, 157, 158, 155, 156, 159, 160, 162,
+ 161, 163, 220, 222, 221, 177, 187, 188, 189, 190,
+ 191, 210, 212, 211, 213, 214, 215, 234, 235, 181,
+ 199, 202, 203, 224, 0, 0, 0, 0, 0, 0,
+ 0, 0, 242, 244, 245, 246, 248, 249, 250, 251,
+ 247, 0, 0, 0, 0, 0, 0, 0, 253, 255,
+ 256, 257, 258, 259, 260, 261, 0, 0, 0, 0,
+ 0, 0, 0, 263, 265, 266, 269, 270, 267, 271,
+ 268, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 273, 275, 276, 277, 278, 282, 283, 284, 279,
+ 280, 281, 0, 0, 0, 0, 0, 295, 299, 300,
+ 301, 302, 291, 293, 294, 296, 297, 298, 0, 0,
+ 0, 0, 0, 0, 0, 0, 550, 552, 554, 553,
+ 559, 555, 556, 557, 558, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 563, 565,
- 567, 566, 568, 569, 570, 571, 572, 573, 574, 575,
- 576, 577, 578, 579, 580, 581, 582, 583, 0, 604,
- 606, 0, 609, 611, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 618, 620, 621, 622, 624, 625,
- 623, 626, 627, 628, 629, 0, 0, 0, 0, 0,
- 0, 641, 643, 644, 645, 646, 647, 648, 0, 0,
- 657, 659, 660, 301, 300, 307, 320, 318, 330, 326,
- 327, 331, 328, 329, 332, 333, 334, 338, 339, 369,
- 370, 371, 372, 373, 401, 402, 403, 409, 410, 323,
- 411, 412, 415, 413, 414, 418, 419, 420, 434, 384,
- 385, 388, 389, 421, 437, 378, 380, 438, 445, 446,
- 447, 324, 400, 465, 466, 379, 459, 362, 319, 374,
- 435, 442, 422, 0, 0, 469, 325, 302, 361, 426,
- 303, 321, 322, 375, 376, 467, 424, 428, 429, 336,
- 335, 304, 470, 404, 433, 363, 383, 439, 440, 441,
- 444, 458, 377, 463, 461, 462, 392, 399, 430, 431,
- 393, 394, 423, 449, 364, 365, 368, 340, 342, 337,
- 343, 344, 345, 346, 353, 354, 355, 356, 357, 358,
- 359, 471, 472, 474, 405, 406, 407, 408, 416, 417,
- 475, 476, 477, 0, 0, 0, 425, 395, 397, 613,
- 486, 490, 488, 487, 491, 489, 0, 0, 494, 495,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 427, 443, 464, 499, 500, 396, 478, 0, 0, 0,
- 0, 0, 0, 450, 451, 452, 453, 454, 455, 456,
- 457, 614, 386, 387, 390, 381, 448, 360, 305, 306,
- 382, 501, 502, 503, 504, 505, 507, 506, 508, 509,
- 510, 341, 348, 496, 498, 497, 347, 0, 367, 432,
- 473, 366, 398, 349, 350, 352, 351, 0, 512, 391,
- 460, 513, 514, 515, 519, 518, 516, 517, 520, 521,
- 522, 523, 525, 524, 536, 0, 540, 541, 0, 0,
- 542, 526, 534, 527, 528, 529, 533, 535, 530, 531,
- 532, 282, 283, 284, 285, 286, 554, 556, 555, 558,
- 559, 560, 561, 557, 584, 586, 587, 588, 589, 590,
- 591, 592, 593, 594, 585, 595, 596, 597, 598, 599,
- 600, 601, 602, 607, 612, 630, 631, 632, 635, 633,
- 634, 636, 637, 638, 639, 649, 650, 651, 652, 653,
- 654, 661, 662, 436, 468, 485, 615, 616, 492, 493,
- 479, 480, 0, 0, 0, 484, 655, 511, 537, 538,
- 539, 483, 481, 482
+ 0, 0, 0, 0, 569, 571, 573, 572, 574, 575,
+ 576, 577, 578, 579, 580, 581, 582, 583, 584, 585,
+ 586, 587, 588, 589, 0, 610, 612, 0, 615, 617,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 624, 626, 627, 628, 630, 631, 629, 632, 633, 634,
+ 635, 0, 0, 0, 0, 0, 0, 647, 649, 650,
+ 651, 652, 653, 654, 0, 0, 663, 665, 666, 304,
+ 303, 310, 323, 321, 333, 329, 330, 334, 331, 332,
+ 335, 336, 337, 341, 342, 372, 373, 374, 375, 376,
+ 404, 405, 406, 412, 413, 326, 414, 415, 418, 416,
+ 417, 421, 422, 423, 437, 387, 388, 391, 392, 424,
+ 440, 381, 383, 441, 448, 449, 450, 327, 403, 468,
+ 469, 382, 462, 365, 322, 377, 438, 445, 425, 0,
+ 0, 472, 328, 305, 364, 429, 306, 324, 325, 378,
+ 379, 470, 427, 431, 432, 339, 338, 307, 473, 407,
+ 436, 366, 386, 442, 443, 444, 447, 461, 380, 466,
+ 464, 465, 395, 402, 433, 434, 396, 397, 426, 452,
+ 367, 368, 371, 343, 345, 340, 346, 347, 348, 349,
+ 356, 357, 358, 359, 360, 361, 362, 474, 475, 477,
+ 408, 409, 410, 411, 419, 420, 478, 479, 480, 0,
+ 0, 0, 428, 398, 400, 619, 489, 493, 491, 490,
+ 494, 492, 499, 0, 0, 497, 498, 311, 312, 313,
+ 314, 315, 316, 317, 318, 319, 320, 430, 446, 467,
+ 503, 504, 399, 481, 0, 0, 0, 0, 0, 0,
+ 453, 454, 455, 456, 457, 458, 459, 460, 620, 389,
+ 390, 393, 384, 451, 363, 308, 309, 385, 505, 506,
+ 507, 508, 509, 511, 510, 512, 513, 514, 344, 351,
+ 500, 502, 501, 350, 0, 370, 435, 476, 369, 401,
+ 352, 353, 355, 354, 0, 516, 394, 463, 517, 518,
+ 519, 524, 522, 523, 520, 521, 525, 526, 527, 528,
+ 530, 531, 529, 542, 0, 546, 547, 0, 0, 548,
+ 532, 540, 533, 534, 535, 539, 541, 536, 537, 538,
+ 285, 286, 287, 288, 289, 560, 562, 561, 564, 565,
+ 566, 567, 563, 590, 592, 593, 594, 595, 596, 597,
+ 598, 599, 600, 591, 601, 602, 603, 604, 605, 606,
+ 607, 608, 613, 618, 636, 637, 638, 641, 639, 640,
+ 642, 643, 644, 645, 655, 656, 657, 658, 659, 660,
+ 667, 668, 439, 471, 488, 621, 622, 495, 496, 482,
+ 483, 0, 0, 0, 487, 661, 515, 543, 544, 545,
+ 486, 484, 485
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, 271, 632, 633, 634, 635, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302, -302, -302, -302, -302, -302, -302, -302,
- -302, -302, -302
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, 274, 638, 639, 640,
+ 641, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305, -305, -305, -305, -305,
+ -305, -305, -305, -305, -305, -305
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 17, 18, 19, 32, 263, 20, 33, 489,
- 21, 34, 503, 22, 35, 517, 23, 36, 535, 551,
- 552, 553, 554, 555, 24, 37, 556, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
- 337, 338, 339, 340, 341, 342, 343, 344, 345, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 373, 374, 375, 376,
- 377, 378, 379, 380, 381, 382, 383, 384, 385, 386,
- 387, 388, 389, 390, 391, 392, 393, 394, 395, 396,
- 397, 398, 399, 400, 401, 402, 403, 404, 405, 406,
- 407, 408, 409, 410, 411, 412, 413, 414, 415, 416,
- 417, 418, 419, 420, 421, 422, 423, 424, 425, 426,
- 427, 428, 429, 430, 431, 432, 433, 434, 435, 436,
- 437, 438, 439, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 452, 453, 454, 455, 456,
- 457, 458, 459, 460, 461, 462, 463, 464, 465, 466,
- 467, 468, 469, 470, 471, 472, 473, 474, 475, 476,
- 490, 491, 492, 493, 494, 495, 496, 504, 505, 506,
- 507, 508, 509, 536, 537, 538, 539, 540, 541, 542,
- 543, 544, 545, 518, 519, 520, 521, 522, 523, 524,
- 25, 38, 570, 571, 572, 573, 574, 575, 576, 577,
- 578, 26, 39, 598, 599, 600, 601, 602, 603, 604,
- 605, 606, 607, 608, 609, 610, 611, 612, 613, 614,
- 615, 616, 617, 27, 40, 619, 620, 28, 41, 622,
- 623, 477, 478, 479, 480, 29, 42, 634, 635, 636,
- 637, 638, 639, 640, 641, 642, 643, 644, 30, 43,
- 651, 652, 653, 654, 655, 656, 657, 481, 31, 44,
- 660, 661, 662
+ -1, 1, 17, 18, 19, 32, 264, 20, 33, 492,
+ 21, 34, 508, 22, 35, 523, 23, 36, 541, 557,
+ 558, 559, 560, 561, 24, 37, 562, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
+ 378, 379, 380, 381, 382, 383, 384, 385, 386, 387,
+ 388, 389, 390, 391, 392, 393, 394, 395, 396, 397,
+ 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
+ 408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 450, 451, 452, 453, 454, 455, 456, 457,
+ 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
+ 468, 469, 470, 471, 472, 473, 474, 475, 476, 477,
+ 478, 493, 494, 495, 496, 497, 498, 499, 500, 509,
+ 510, 511, 512, 513, 514, 515, 542, 543, 544, 545,
+ 546, 547, 548, 549, 550, 551, 524, 525, 526, 527,
+ 528, 529, 530, 25, 38, 576, 577, 578, 579, 580,
+ 581, 582, 583, 584, 26, 39, 604, 605, 606, 607,
+ 608, 609, 610, 611, 612, 613, 614, 615, 616, 617,
+ 618, 619, 620, 621, 622, 623, 27, 40, 625, 626,
+ 28, 41, 628, 629, 479, 480, 481, 482, 29, 42,
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
+ 650, 30, 43, 657, 658, 659, 660, 661, 662, 663,
+ 483, 31, 44, 666, 667, 668
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -2557,157 +2575,157 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 2, 525, 482, 510, 483, 484, 618, 497, 658, 659,
- 621, 3, 4, 663, 664, 498, 499, 525, 579, 580,
- 581, 582, 583, 584, 585, 586, 587, 588, 589, 590,
- 591, 592, 593, 594, 595, 596, 597, 665, 666, 511,
- 512, 667, 668, 669, 670, 671, 5, 672, 673, 674,
- 675, 676, 6, 624, 625, 626, 627, 628, 629, 630,
- 631, 632, 633, 677, 678, 679, 513, 485, 562, 563,
- 564, 565, 566, 567, 568, 569, 645, 646, 647, 648,
- 649, 650, 680, 681, 682, 683, 684, 685, 686, 687,
- 688, 689, 690, 691, 692, 693, 7, 694, 695, 696,
- 486, 697, 698, 699, 500, 700, 501, 701, 702, 703,
- 487, 704, 705, 706, 8, 707, 708, 709, 710, 711,
- 712, 713, 714, 715, 716, 717, 718, 719, 720, 721,
- 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,
- 732, 733, 734, 735, 736, 514, 515, 737, 738, 739,
- 740, 741, 742, 743, 744, 745, 746, 747, 748, 749,
- 750, 751, 752, 753, 754, 755, 9, 756, 757, 758,
- 759, 760, 761, 762, 763, 764, 765, 766, 767, 768,
- 769, 770, 771, 772, 773, 516, 774, 775, 776, 777,
- 778, 779, 780, 781, 782, 783, 784, 785, 786, 787,
- 788, 789, 790, 791, 792, 793, 794, 795, 796, 797,
- 798, 799, 800, 801, 802, 803, 804, 805, 806, 807,
- 808, 809, 810, 811, 812, 10, 813, 814, 815, 816,
- 817, 526, 818, 527, 528, 529, 530, 531, 819, 820,
- 821, 822, 823, 532, 824, 825, 11, 826, 488, 527,
- 528, 529, 502, 827, 828, 829, 830, 831, 832, 532,
- 833, 834, 835, 836, 837, 838, 839, 12, 840, 841,
- 842, 843, 533, 534, 844, 845, 13, 546, 547, 548,
- 549, 550, 846, 847, 848, 849, 850, 851, 852, 853,
- 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
- 14, 864, 865, 866, 15, 867, 868, 869, 557, 870,
- 16, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 871, 872, 873, 874, 77, 78, 79,
- 875, 876, 877, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 878, 879, 880, 881, 882, 883,
- 884, 885, 886, 121, 122, 123, 124, 125, 887, 126,
- 127, 128, 888, 889, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 890, 891, 892, 155, 156, 157, 158, 159, 160, 161,
- 162, 893, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 894, 895, 896, 897, 898, 899,
- 900, 901, 902, 903, 904, 905, 906, 907, 908, 909,
- 910, 911, 912, 913, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 914, 214, 915, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 916, 917, 918, 919, 920, 921,
- 922, 923, 924, 925, 926, 233, 234, 235, 236, 237,
- 238, 239, 240, 241, 242, 927, 928, 929, 930, 931,
- 932, 933, 243, 934, 935, 936, 937, 938, 939, 940,
- 244, 245, 941, 246, 247, 942, 248, 249, 943, 944,
- 250, 251, 252, 253, 254, 255, 256, 257, 945, 946,
- 947, 258, 948, 949, 950, 951, 952, 953, 954, 955,
- 259, 260, 261, 262, 956, 957, 958, 959, 960, 961,
- 962, 963, 964, 965, 966, 967, 968, 969, 970, 971,
- 972, 973, 974, 975, 976, 977, 978, 979, 980, 981,
- 982, 983, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 531, 484, 516, 485, 486, 624, 501, 664, 665,
+ 627, 3, 4, 669, 670, 502, 503, 531, 585, 586,
+ 587, 588, 589, 590, 591, 592, 593, 594, 595, 596,
+ 597, 598, 599, 600, 601, 602, 603, 671, 672, 517,
+ 518, 673, 674, 675, 676, 677, 5, 678, 679, 680,
+ 681, 682, 6, 630, 631, 632, 633, 634, 635, 636,
+ 637, 638, 639, 683, 684, 685, 519, 487, 568, 569,
+ 570, 571, 572, 573, 574, 575, 651, 652, 653, 654,
+ 655, 656, 686, 687, 688, 689, 690, 691, 692, 693,
+ 694, 695, 696, 697, 698, 699, 7, 700, 701, 702,
+ 488, 703, 704, 489, 504, 705, 505, 706, 707, 506,
+ 708, 709, 490, 710, 8, 711, 712, 713, 714, 715,
+ 716, 717, 718, 719, 720, 721, 722, 723, 724, 725,
+ 726, 727, 728, 729, 730, 731, 732, 733, 734, 735,
+ 736, 737, 738, 739, 740, 741, 742, 520, 521, 743,
+ 744, 745, 746, 747, 748, 749, 750, 751, 752, 753,
+ 754, 755, 756, 757, 758, 759, 760, 761, 9, 762,
+ 763, 764, 765, 766, 767, 768, 769, 770, 771, 772,
+ 773, 774, 775, 776, 777, 778, 779, 780, 522, 781,
+ 782, 783, 784, 785, 786, 787, 788, 789, 790, 791,
+ 792, 793, 794, 795, 796, 797, 798, 799, 800, 801,
+ 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
+ 812, 813, 814, 815, 816, 817, 818, 819, 10, 820,
+ 821, 822, 823, 824, 532, 825, 533, 534, 535, 536,
+ 537, 826, 827, 828, 829, 830, 538, 831, 832, 11,
+ 833, 491, 533, 534, 535, 507, 834, 835, 836, 837,
+ 838, 839, 538, 840, 841, 842, 843, 844, 845, 846,
+ 12, 847, 848, 849, 850, 539, 540, 851, 852, 13,
+ 552, 553, 554, 555, 556, 853, 854, 855, 856, 857,
+ 858, 859, 860, 861, 862, 863, 864, 865, 866, 867,
+ 868, 869, 870, 14, 871, 872, 873, 15, 874, 875,
+ 876, 563, 877, 16, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 878, 879, 880, 881,
+ 77, 78, 79, 882, 883, 884, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 885, 886, 887,
+ 888, 889, 890, 891, 892, 893, 121, 122, 123, 124,
+ 125, 894, 126, 127, 128, 895, 896, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 897, 898, 899, 155, 900, 901, 156,
+ 157, 158, 159, 160, 161, 162, 902, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 903,
+ 904, 905, 906, 907, 908, 909, 910, 911, 912, 913,
+ 914, 915, 916, 917, 918, 919, 920, 921, 922, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 923,
+ 215, 924, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 925, 926, 927, 928, 929, 930, 931, 932, 933, 934,
+ 935, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+ 243, 936, 937, 938, 939, 940, 941, 942, 244, 943,
+ 944, 945, 946, 947, 948, 949, 245, 246, 950, 247,
+ 248, 951, 249, 250, 952, 953, 251, 252, 253, 254,
+ 255, 256, 257, 258, 954, 955, 956, 259, 957, 958,
+ 959, 960, 961, 962, 963, 964, 260, 261, 262, 263,
+ 965, 966, 967, 968, 969, 970, 971, 972, 973, 974,
+ 975, 976, 977, 978, 979, 980, 981, 982, 983, 984,
+ 985, 986, 987, 988, 989, 990, 991, 992, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 558,
- 559, 560, 561
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 564, 565, 566, 567
};
static const yytype_int16 yycheck[] =
{
- 0, 45, 45, 45, 47, 48, 115, 45, 301, 302,
- 311, 11, 12, 10, 10, 53, 54, 45, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 10, 10, 81,
+ 0, 45, 45, 45, 47, 48, 115, 45, 304, 305,
+ 314, 11, 12, 10, 10, 53, 54, 45, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 181, 182, 183, 184, 185, 186, 187, 10, 10, 81,
82, 10, 10, 10, 10, 10, 46, 10, 10, 10,
- 10, 10, 52, 247, 248, 249, 250, 251, 252, 253,
- 254, 255, 256, 10, 10, 10, 108, 110, 97, 98,
- 99, 100, 101, 102, 103, 104, 268, 269, 270, 271,
- 272, 273, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 52, 250, 251, 252, 253, 254, 255, 256,
+ 257, 258, 259, 10, 10, 10, 108, 110, 97, 98,
+ 99, 100, 101, 102, 103, 104, 271, 272, 273, 274,
+ 275, 276, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 96, 10, 10, 10,
- 143, 10, 10, 10, 142, 10, 144, 10, 10, 10,
- 153, 10, 10, 10, 114, 10, 10, 10, 10, 10,
+ 143, 10, 10, 146, 142, 10, 144, 10, 10, 147,
+ 10, 10, 155, 10, 114, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 187, 188, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 189, 190, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 166, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 168, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 227, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 230, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 225, 10, 10, 10, 10,
- 10, 275, 10, 277, 278, 279, 280, 281, 10, 10,
- 10, 10, 10, 287, 10, 10, 246, 10, 291, 277,
- 278, 279, 290, 10, 10, 10, 10, 10, 10, 287,
- 10, 10, 10, 10, 10, 10, 10, 267, 10, 10,
- 10, 10, 316, 317, 10, 10, 276, 305, 306, 307,
- 308, 309, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 228, 10,
+ 10, 10, 10, 10, 278, 10, 280, 281, 282, 283,
+ 284, 10, 10, 10, 10, 10, 290, 10, 10, 249,
+ 10, 294, 280, 281, 282, 293, 10, 10, 10, 10,
+ 10, 10, 290, 10, 10, 10, 10, 10, 10, 10,
+ 270, 10, 10, 10, 10, 319, 320, 10, 10, 279,
+ 308, 309, 310, 311, 312, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 300, 10, 10, 10, 304, 10, 10, 10, 37, 10,
- 310, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 10, 10, 10, 10, 49, 50, 51,
- 10, 10, 10, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 105, 106, 107, 108, 109, 10, 111,
- 112, 113, 10, 10, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 10, 10, 10, 145, 146, 147, 148, 149, 150, 151,
- 152, 10, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 163, 164, 165, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 303, 10, 10, 10, 307, 10, 10,
+ 10, 37, 10, 313, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 10, 10, 10, 10,
+ 49, 50, 51, 10, 10, 10, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 105, 106, 107, 108,
+ 109, 10, 111, 112, 113, 10, 10, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 10, 10, 10, 145, 10, 10, 148,
+ 149, 150, 151, 152, 153, 154, 10, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 167, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- 222, 223, 224, 10, 226, 10, 228, 229, 230, 231,
- 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
- 242, 243, 244, 245, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 10, 10, 10, 10, 10,
- 10, 10, 274, 10, 10, 10, 10, 10, 10, 10,
- 282, 283, 10, 285, 286, 10, 288, 289, 10, 10,
- 292, 293, 294, 295, 296, 297, 298, 299, 10, 10,
- 10, 303, 10, 10, 10, 10, 10, 10, 10, 10,
- 312, 313, 314, 315, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 188,
+ 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 10,
+ 229, 10, 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 260, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 10, 10, 10, 10, 10, 10, 10, 277, 10,
+ 10, 10, 10, 10, 10, 10, 285, 286, 10, 288,
+ 289, 10, 291, 292, 10, 10, 295, 296, 297, 298,
+ 299, 300, 301, 302, 10, 10, 10, 306, 10, 10,
+ 10, 10, 10, 10, 10, 10, 315, 316, 317, 318,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, -1, -1, -1, -1, -1, -1, -1, -1,
+ 10, 10, 10, 10, 10, 10, 10, 10, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
- 37, 37, 37
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 37, 37, 37, 37
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_int16 yystos[] =
{
- 0, 319, 0, 11, 12, 46, 52, 96, 114, 166,
- 225, 246, 267, 276, 300, 304, 310, 320, 321, 322,
- 325, 328, 331, 334, 342, 588, 599, 621, 625, 633,
- 646, 656, 323, 326, 329, 332, 335, 343, 589, 600,
- 622, 626, 634, 647, 657, 13, 14, 15, 16, 17,
+ 0, 322, 0, 11, 12, 46, 52, 96, 114, 168,
+ 228, 249, 270, 279, 303, 307, 313, 323, 324, 325,
+ 328, 331, 334, 337, 345, 594, 605, 627, 631, 639,
+ 652, 662, 326, 329, 332, 335, 338, 346, 595, 606,
+ 628, 632, 640, 653, 663, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 49, 50, 51,
@@ -2718,58 +2736,58 @@ static const yytype_int16 yystos[] =
95, 105, 106, 107, 108, 109, 111, 112, 113, 116,
117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 145, 146, 147, 148, 149,
- 150, 151, 152, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 226, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, 266, 274, 282, 283, 285, 286, 288, 289,
- 292, 293, 294, 295, 296, 297, 298, 299, 303, 312,
- 313, 314, 315, 324, 345, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
- 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
- 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
- 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
- 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
- 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
- 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
- 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
- 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
- 481, 482, 483, 484, 485, 486, 487, 488, 489, 490,
- 491, 492, 493, 494, 495, 496, 497, 498, 499, 500,
- 501, 502, 503, 504, 505, 506, 507, 508, 509, 510,
- 511, 512, 513, 514, 515, 516, 517, 518, 519, 520,
- 521, 522, 523, 524, 525, 526, 527, 528, 529, 530,
- 531, 532, 533, 534, 535, 536, 537, 538, 539, 540,
- 541, 542, 543, 544, 545, 546, 547, 548, 549, 550,
- 551, 552, 553, 554, 555, 556, 557, 629, 630, 631,
- 632, 655, 45, 47, 48, 110, 143, 153, 291, 327,
- 558, 559, 560, 561, 562, 563, 564, 45, 53, 54,
- 142, 144, 290, 330, 565, 566, 567, 568, 569, 570,
- 45, 81, 82, 108, 187, 188, 227, 333, 581, 582,
- 583, 584, 585, 586, 587, 45, 275, 277, 278, 279,
- 280, 281, 287, 316, 317, 336, 571, 572, 573, 574,
- 575, 576, 577, 578, 579, 580, 305, 306, 307, 308,
- 309, 337, 338, 339, 340, 341, 344, 571, 572, 573,
- 574, 575, 97, 98, 99, 100, 101, 102, 103, 104,
- 590, 591, 592, 593, 594, 595, 596, 597, 598, 167,
- 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 182, 183, 184, 185, 601, 602,
- 603, 604, 605, 606, 607, 608, 609, 610, 611, 612,
- 613, 614, 615, 616, 617, 618, 619, 620, 115, 623,
- 624, 311, 627, 628, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 635, 636, 637, 638, 639, 640,
- 641, 642, 643, 644, 645, 268, 269, 270, 271, 272,
- 273, 648, 649, 650, 651, 652, 653, 654, 301, 302,
- 658, 659, 660, 10, 10, 10, 10, 10, 10, 10,
+ 137, 138, 139, 140, 141, 145, 148, 149, 150, 151,
+ 152, 153, 154, 156, 157, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 229, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 248, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 277, 285, 286, 288, 289, 291,
+ 292, 295, 296, 297, 298, 299, 300, 301, 302, 306,
+ 315, 316, 317, 318, 327, 348, 349, 350, 351, 352,
+ 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
+ 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
+ 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
+ 393, 394, 395, 396, 397, 398, 399, 400, 401, 402,
+ 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
+ 413, 414, 415, 416, 417, 418, 419, 420, 421, 422,
+ 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
+ 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
+ 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
+ 453, 454, 455, 456, 457, 458, 459, 460, 461, 462,
+ 463, 464, 465, 466, 467, 468, 469, 470, 471, 472,
+ 473, 474, 475, 476, 477, 478, 479, 480, 481, 482,
+ 483, 484, 485, 486, 487, 488, 489, 490, 491, 492,
+ 493, 494, 495, 496, 497, 498, 499, 500, 501, 502,
+ 503, 504, 505, 506, 507, 508, 509, 510, 511, 512,
+ 513, 514, 515, 516, 517, 518, 519, 520, 521, 522,
+ 523, 524, 525, 526, 527, 528, 529, 530, 531, 532,
+ 533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
+ 543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
+ 553, 554, 555, 556, 557, 558, 559, 560, 561, 635,
+ 636, 637, 638, 661, 45, 47, 48, 110, 143, 146,
+ 155, 294, 330, 562, 563, 564, 565, 566, 567, 568,
+ 569, 45, 53, 54, 142, 144, 147, 293, 333, 570,
+ 571, 572, 573, 574, 575, 576, 45, 81, 82, 108,
+ 189, 190, 230, 336, 587, 588, 589, 590, 591, 592,
+ 593, 45, 278, 280, 281, 282, 283, 284, 290, 319,
+ 320, 339, 577, 578, 579, 580, 581, 582, 583, 584,
+ 585, 586, 308, 309, 310, 311, 312, 340, 341, 342,
+ 343, 344, 347, 577, 578, 579, 580, 581, 97, 98,
+ 99, 100, 101, 102, 103, 104, 596, 597, 598, 599,
+ 600, 601, 602, 603, 604, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 607, 608, 609, 610, 611, 612,
+ 613, 614, 615, 616, 617, 618, 619, 620, 621, 622,
+ 623, 624, 625, 626, 115, 629, 630, 314, 633, 634,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 641, 642, 643, 644, 645, 646, 647, 648, 649, 650,
+ 651, 271, 272, 273, 274, 275, 276, 654, 655, 656,
+ 657, 658, 659, 660, 304, 305, 664, 665, 666, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
@@ -2801,43 +2819,44 @@ static const yytype_int16 yystos[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_int16 yyr1[] =
{
- 0, 318, 319, 319, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 321, 322,
- 323, 323, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
- 325, 326, 326, 327, 327, 327, 327, 327, 327, 327,
- 328, 329, 329, 330, 330, 330, 330, 330, 330, 331,
- 332, 332, 333, 333, 333, 333, 333, 333, 333, 334,
- 335, 335, 336, 336, 336, 336, 336, 336, 336, 336,
- 336, 336, 337, 338, 339, 340, 341, 342, 343, 343,
- 344, 344, 344, 344, 344, 344, 344, 344, 344, 344,
- 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 0, 321, 322, 322, 323, 323, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 323, 323, 324, 325,
+ 326, 326, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ 327, 328, 329, 329, 330, 330, 330, 330, 330, 330,
+ 330, 330, 331, 332, 332, 333, 333, 333, 333, 333,
+ 333, 333, 334, 335, 335, 336, 336, 336, 336, 336,
+ 336, 336, 337, 338, 338, 339, 339, 339, 339, 339,
+ 339, 339, 339, 339, 339, 340, 341, 342, 343, 344,
+ 345, 346, 346, 347, 347, 347, 347, 347, 347, 347,
+ 347, 347, 347, 348, 349, 350, 351, 352, 353, 354,
355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
@@ -2861,19 +2880,19 @@ static const yytype_int16 yyr1[] =
555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
565, 566, 567, 568, 569, 570, 571, 572, 573, 574,
575, 576, 577, 578, 579, 580, 581, 582, 583, 584,
- 585, 586, 587, 588, 589, 589, 590, 590, 590, 590,
- 590, 590, 590, 590, 591, 592, 593, 594, 595, 596,
- 597, 598, 599, 600, 600, 601, 601, 601, 601, 601,
- 601, 601, 601, 601, 601, 601, 601, 601, 601, 601,
- 601, 601, 601, 601, 602, 603, 604, 605, 606, 607,
+ 585, 586, 587, 588, 589, 590, 591, 592, 593, 594,
+ 595, 595, 596, 596, 596, 596, 596, 596, 596, 596,
+ 597, 598, 599, 600, 601, 602, 603, 604, 605, 606,
+ 606, 607, 607, 607, 607, 607, 607, 607, 607, 607,
+ 607, 607, 607, 607, 607, 607, 607, 607, 607, 607,
608, 609, 610, 611, 612, 613, 614, 615, 616, 617,
- 618, 619, 620, 621, 622, 622, 623, 624, 625, 626,
- 626, 627, 628, 629, 630, 631, 632, 633, 634, 634,
- 635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
- 636, 637, 638, 639, 640, 641, 642, 643, 644, 645,
- 646, 647, 647, 648, 648, 648, 648, 648, 648, 649,
- 650, 651, 652, 653, 654, 655, 656, 657, 657, 658,
- 658, 659, 660
+ 618, 619, 620, 621, 622, 623, 624, 625, 626, 627,
+ 628, 628, 629, 630, 631, 632, 632, 633, 634, 635,
+ 636, 637, 638, 639, 640, 640, 641, 641, 641, 641,
+ 641, 641, 641, 641, 641, 641, 642, 643, 644, 645,
+ 646, 647, 648, 649, 650, 651, 652, 653, 653, 654,
+ 654, 654, 654, 654, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 663, 664, 664, 665, 666
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -2903,12 +2922,13 @@ static const yytype_int8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
- 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 2, 2, 2, 1, 2, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -2921,31 +2941,30 @@ static const yytype_int8 yyr2[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 3, 4, 4, 4, 3, 3, 2, 2, 2, 2,
- 2, 2, 3, 3, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 4, 4, 4, 3, 3, 2,
+ 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
- 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 1, 2, 0, 1, 2, 1, 2,
- 0, 1, 2, 2, 2, 3, 3, 1, 2, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 3, 3, 2, 2, 2, 1,
+ 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 2, 0, 1, 1, 1, 1, 1, 1, 2,
- 2, 2, 2, 2, 2, 3, 1, 2, 0, 1,
- 1, 2, 2
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+ 2, 0, 1, 2, 1, 2, 0, 1, 2, 2,
+ 2, 3, 3, 1, 2, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 3, 1, 2, 0, 1, 1, 2, 2
};
@@ -3426,73 +3445,76 @@ yyreduce:
switch (yyn)
{
case 18:
-#line 200 "util/configparser.y"
+#line 202 "util/configparser.y"
{
OUTYY(("\nP(force-toplevel)\n"));
}
-#line 3434 "util/configparser.c"
+#line 3453 "util/configparser.c"
break;
case 19:
-#line 206 "util/configparser.y"
- {
+#line 208 "util/configparser.y"
+ {
OUTYY(("\nP(server:)\n"));
}
-#line 3442 "util/configparser.c"
+#line 3461 "util/configparser.c"
break;
- case 240:
-#line 313 "util/configparser.y"
+ case 241:
+#line 315 "util/configparser.y"
{
struct config_stub* s;
- OUTYY(("\nP(stub_zone:)\n"));
+ OUTYY(("\nP(stub_zone:)\n"));
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->stubs;
cfg_parser->cfg->stubs = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
-#line 3457 "util/configparser.c"
+#line 3477 "util/configparser.c"
break;
- case 250:
-#line 330 "util/configparser.y"
+ case 252:
+#line 333 "util/configparser.y"
{
struct config_stub* s;
- OUTYY(("\nP(forward_zone:)\n"));
+ OUTYY(("\nP(forward_zone:)\n"));
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->forwards;
cfg_parser->cfg->forwards = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
-#line 3472 "util/configparser.c"
+#line 3493 "util/configparser.c"
break;
- case 259:
-#line 347 "util/configparser.y"
+ case 262:
+#line 351 "util/configparser.y"
{
struct config_view* s;
- OUTYY(("\nP(view:)\n"));
+ OUTYY(("\nP(view:)\n"));
s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) {
s->next = cfg_parser->cfg->views;
if(s->next && !s->next->name)
yyerror("view without name");
cfg_parser->cfg->views = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
-#line 3489 "util/configparser.c"
+#line 3511 "util/configparser.c"
break;
- case 269:
-#line 366 "util/configparser.y"
+ case 272:
+#line 371 "util/configparser.y"
{
struct config_auth* s;
- OUTYY(("\nP(auth_zone:)\n"));
+ OUTYY(("\nP(auth_zone:)\n"));
s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) {
s->next = cfg_parser->cfg->auths;
@@ -3504,14 +3526,15 @@ yyreduce:
s->zonemd_check = 0;
s->zonemd_reject_absence = 0;
s->isrpz = 0;
- } else
+ } else {
yyerror("out of memory");
+ }
}
-#line 3511 "util/configparser.c"
+#line 3534 "util/configparser.c"
break;
- case 282:
-#line 392 "util/configparser.y"
+ case 285:
+#line 398 "util/configparser.y"
{
uint8_t* bitlist;
size_t len = 0;
@@ -3528,11 +3551,11 @@ yyreduce:
}
}
-#line 3532 "util/configparser.c"
+#line 3555 "util/configparser.c"
break;
- case 283:
-#line 411 "util/configparser.y"
+ case 286:
+#line 417 "util/configparser.y"
{
OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
@@ -3547,21 +3570,21 @@ yyreduce:
cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
}
}
-#line 3551 "util/configparser.c"
+#line 3574 "util/configparser.c"
break;
- case 284:
-#line 428 "util/configparser.y"
+ case 287:
+#line 434 "util/configparser.y"
{
OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->rpz_cname);
cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
}
-#line 3561 "util/configparser.c"
+#line 3584 "util/configparser.c"
break;
- case 285:
-#line 436 "util/configparser.y"
+ case 288:
+#line 442 "util/configparser.y"
{
OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3569,21 +3592,21 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3573 "util/configparser.c"
+#line 3596 "util/configparser.c"
break;
- case 286:
-#line 446 "util/configparser.y"
+ case 289:
+#line 452 "util/configparser.y"
{
OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->rpz_log_name);
cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
}
-#line 3583 "util/configparser.c"
+#line 3606 "util/configparser.c"
break;
- case 287:
-#line 454 "util/configparser.y"
+ case 290:
+#line 460 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(rpz:)\n"));
@@ -3596,40 +3619,41 @@ yyreduce:
s->for_upstream = 0;
s->fallback_enabled = 0;
s->isrpz = 1;
- } else
+ } else {
yyerror("out of memory");
+ }
}
-#line 3603 "util/configparser.c"
+#line 3627 "util/configparser.c"
break;
- case 300:
-#line 477 "util/configparser.y"
- {
- OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
+ case 303:
+#line 484 "util/configparser.y"
+ {
+ OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3615 "util/configparser.c"
+#line 3639 "util/configparser.c"
break;
- case 301:
-#line 486 "util/configparser.y"
- {
- OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
+ case 304:
+#line 493 "util/configparser.y"
+ {
+ OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3627 "util/configparser.c"
+#line 3651 "util/configparser.c"
break;
- case 302:
-#line 495 "util/configparser.y"
- {
- OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
+ case 305:
+#line 502 "util/configparser.y"
+ {
+ OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
cfg_parser->cfg->stat_interval = 0;
else if(atoi((yyvsp[0].str)) == 0)
@@ -3637,11 +3661,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3641 "util/configparser.c"
+#line 3665 "util/configparser.c"
break;
- case 303:
-#line 506 "util/configparser.y"
+ case 306:
+#line 513 "util/configparser.y"
{
OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3649,11 +3673,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3653 "util/configparser.c"
+#line 3677 "util/configparser.c"
break;
- case 304:
-#line 515 "util/configparser.y"
+ case 307:
+#line 522 "util/configparser.y"
{
OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3661,11 +3685,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3665 "util/configparser.c"
+#line 3689 "util/configparser.c"
break;
- case 305:
-#line 524 "util/configparser.y"
+ case 308:
+#line 531 "util/configparser.y"
{
OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3673,13 +3697,13 @@ yyreduce:
else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3677 "util/configparser.c"
+#line 3701 "util/configparser.c"
break;
- case 306:
-#line 533 "util/configparser.y"
- {
- OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
+ case 309:
+#line 540 "util/configparser.y"
+ {
+ OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
cfg_parser->cfg->shm_key = 0;
else if(atoi((yyvsp[0].str)) == 0)
@@ -3687,11 +3711,11 @@ yyreduce:
else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3691 "util/configparser.c"
+#line 3715 "util/configparser.c"
break;
- case 307:
-#line 544 "util/configparser.y"
+ case 310:
+#line 551 "util/configparser.y"
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3699,11 +3723,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3703 "util/configparser.c"
+#line 3727 "util/configparser.c"
break;
- case 308:
-#line 553 "util/configparser.y"
+ case 311:
+#line 560 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -3714,11 +3738,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3718 "util/configparser.c"
+#line 3742 "util/configparser.c"
break;
- case 309:
-#line 565 "util/configparser.y"
+ case 312:
+#line 572 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -3730,11 +3754,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3734 "util/configparser.c"
+#line 3758 "util/configparser.c"
break;
- case 310:
-#line 579 "util/configparser.y"
+ case 313:
+#line 586 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -3748,11 +3772,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3752 "util/configparser.c"
+#line 3776 "util/configparser.c"
break;
- case 311:
-#line 594 "util/configparser.y"
+ case 314:
+#line 601 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -3762,11 +3786,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3766 "util/configparser.c"
+#line 3790 "util/configparser.c"
break;
- case 312:
-#line 605 "util/configparser.y"
+ case 315:
+#line 612 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3782,11 +3806,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3786 "util/configparser.c"
+#line 3810 "util/configparser.c"
break;
- case 313:
-#line 622 "util/configparser.y"
+ case 316:
+#line 629 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3802,11 +3826,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3806 "util/configparser.c"
+#line 3830 "util/configparser.c"
break;
- case 314:
-#line 639 "util/configparser.y"
+ case 317:
+#line 646 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3822,11 +3846,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3826 "util/configparser.c"
+#line 3850 "util/configparser.c"
break;
- case 315:
-#line 656 "util/configparser.y"
+ case 318:
+#line 663 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3842,11 +3866,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3846 "util/configparser.c"
+#line 3870 "util/configparser.c"
break;
- case 316:
-#line 673 "util/configparser.y"
+ case 319:
+#line 680 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3860,11 +3884,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3864 "util/configparser.c"
+#line 3888 "util/configparser.c"
break;
- case 317:
-#line 688 "util/configparser.y"
+ case 320:
+#line 695 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3878,33 +3902,33 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3882 "util/configparser.c"
+#line 3906 "util/configparser.c"
break;
- case 318:
-#line 703 "util/configparser.y"
+ case 321:
+#line 710 "util/configparser.y"
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
+ else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
(cfg_parser->cfg->num_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->ifs)
yyerror("out of memory");
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 3898 "util/configparser.c"
+#line 3922 "util/configparser.c"
break;
- case 319:
-#line 716 "util/configparser.y"
+ case 322:
+#line 723 "util/configparser.y"
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->out_ifs = realloc(
- cfg_parser->cfg->out_ifs,
+ else cfg_parser->cfg->out_ifs = realloc(
+ cfg_parser->cfg->out_ifs,
(cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->out_ifs)
yyerror("out of memory");
@@ -3912,11 +3936,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 3916 "util/configparser.c"
+#line 3940 "util/configparser.c"
break;
- case 320:
-#line 731 "util/configparser.y"
+ case 323:
+#line 738 "util/configparser.y"
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3924,35 +3948,35 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3928 "util/configparser.c"
+#line 3952 "util/configparser.c"
break;
- case 321:
-#line 740 "util/configparser.y"
+ case 324:
+#line 747 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
- if(!cfg_mark_ports((yyvsp[0].str), 1,
+ if(!cfg_mark_ports((yyvsp[0].str), 1,
cfg_parser->cfg->outgoing_avail_ports, 65536))
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3940 "util/configparser.c"
+#line 3964 "util/configparser.c"
break;
- case 322:
-#line 749 "util/configparser.y"
+ case 325:
+#line 756 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
- if(!cfg_mark_ports((yyvsp[0].str), 0,
+ if(!cfg_mark_ports((yyvsp[0].str), 0,
cfg_parser->cfg->outgoing_avail_ports, 65536))
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3952 "util/configparser.c"
+#line 3976 "util/configparser.c"
break;
- case 323:
-#line 758 "util/configparser.y"
+ case 326:
+#line 765 "util/configparser.y"
{
OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3960,11 +3984,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3964 "util/configparser.c"
+#line 3988 "util/configparser.c"
break;
- case 324:
-#line 767 "util/configparser.y"
+ case 327:
+#line 774 "util/configparser.y"
{
OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3972,11 +3996,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3976 "util/configparser.c"
+#line 4000 "util/configparser.c"
break;
- case 325:
-#line 776 "util/configparser.y"
+ case 328:
+#line 783 "util/configparser.y"
{
OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3984,11 +4008,11 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3988 "util/configparser.c"
+#line 4012 "util/configparser.c"
break;
- case 326:
-#line 785 "util/configparser.y"
+ case 329:
+#line 792 "util/configparser.y"
{
OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3996,11 +4020,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4000 "util/configparser.c"
+#line 4024 "util/configparser.c"
break;
- case 327:
-#line 794 "util/configparser.y"
+ case 330:
+#line 801 "util/configparser.y"
{
OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4008,11 +4032,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4012 "util/configparser.c"
+#line 4036 "util/configparser.c"
break;
- case 328:
-#line 803 "util/configparser.y"
+ case 331:
+#line 810 "util/configparser.y"
{
OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4020,11 +4044,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4024 "util/configparser.c"
+#line 4048 "util/configparser.c"
break;
- case 329:
-#line 812 "util/configparser.y"
+ case 332:
+#line 819 "util/configparser.y"
{
OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4032,11 +4056,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4036 "util/configparser.c"
+#line 4060 "util/configparser.c"
break;
- case 330:
-#line 821 "util/configparser.y"
+ case 333:
+#line 828 "util/configparser.y"
{
OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4044,11 +4068,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4048 "util/configparser.c"
+#line 4072 "util/configparser.c"
break;
- case 331:
-#line 830 "util/configparser.y"
+ case 334:
+#line 837 "util/configparser.y"
{
OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4056,23 +4080,23 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4060 "util/configparser.c"
+#line 4084 "util/configparser.c"
break;
- case 332:
-#line 839 "util/configparser.y"
+ case 335:
+#line 846 "util/configparser.y"
{
OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
- free((yyvsp[0].str));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
}
-#line 4072 "util/configparser.c"
+#line 4096 "util/configparser.c"
break;
- case 333:
-#line 848 "util/configparser.y"
+ case 336:
+#line 855 "util/configparser.y"
{
OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4080,11 +4104,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4084 "util/configparser.c"
+#line 4108 "util/configparser.c"
break;
- case 334:
-#line 857 "util/configparser.y"
+ case 337:
+#line 864 "util/configparser.y"
{
OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4096,11 +4120,11 @@ yyreduce:
else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4100 "util/configparser.c"
+#line 4124 "util/configparser.c"
break;
- case 335:
-#line 870 "util/configparser.y"
+ case 338:
+#line 877 "util/configparser.y"
{
OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4110,11 +4134,11 @@ yyreduce:
else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4114 "util/configparser.c"
+#line 4138 "util/configparser.c"
break;
- case 336:
-#line 881 "util/configparser.y"
+ case 339:
+#line 888 "util/configparser.y"
{
OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4124,11 +4148,11 @@ yyreduce:
else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4128 "util/configparser.c"
+#line 4152 "util/configparser.c"
break;
- case 337:
-#line 892 "util/configparser.y"
+ case 340:
+#line 899 "util/configparser.y"
{
OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4138,11 +4162,11 @@ yyreduce:
else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4142 "util/configparser.c"
+#line 4166 "util/configparser.c"
break;
- case 338:
-#line 903 "util/configparser.y"
+ case 341:
+#line 910 "util/configparser.y"
{
OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4150,11 +4174,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4154 "util/configparser.c"
+#line 4178 "util/configparser.c"
break;
- case 339:
-#line 912 "util/configparser.y"
+ case 342:
+#line 919 "util/configparser.y"
{
OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4166,11 +4190,11 @@ yyreduce:
else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4170 "util/configparser.c"
+#line 4194 "util/configparser.c"
break;
- case 340:
-#line 925 "util/configparser.y"
+ case 343:
+#line 932 "util/configparser.y"
{
OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4178,11 +4202,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4182 "util/configparser.c"
+#line 4206 "util/configparser.c"
break;
- case 341:
-#line 934 "util/configparser.y"
+ case 344:
+#line 941 "util/configparser.y"
{
OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4190,11 +4214,11 @@ yyreduce:
else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4194 "util/configparser.c"
+#line 4218 "util/configparser.c"
break;
- case 342:
-#line 943 "util/configparser.y"
+ case 345:
+#line 950 "util/configparser.y"
{
OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4202,31 +4226,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4206 "util/configparser.c"
+#line 4230 "util/configparser.c"
break;
- case 343:
-#line 952 "util/configparser.y"
+ case 346:
+#line 959 "util/configparser.y"
{
OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_key);
cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
}
-#line 4216 "util/configparser.c"
+#line 4240 "util/configparser.c"
break;
- case 344:
-#line 959 "util/configparser.y"
+ case 347:
+#line 966 "util/configparser.y"
{
OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_pem);
cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
}
-#line 4226 "util/configparser.c"
+#line 4250 "util/configparser.c"
break;
- case 345:
-#line 966 "util/configparser.y"
+ case 348:
+#line 973 "util/configparser.y"
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4234,21 +4258,21 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4238 "util/configparser.c"
+#line 4262 "util/configparser.c"
break;
- case 346:
-#line 975 "util/configparser.y"
+ case 349:
+#line 982 "util/configparser.y"
{
OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_cert_bundle);
cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
}
-#line 4248 "util/configparser.c"
+#line 4272 "util/configparser.c"
break;
- case 347:
-#line 982 "util/configparser.y"
+ case 350:
+#line 989 "util/configparser.y"
{
OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4256,53 +4280,53 @@ yyreduce:
else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4260 "util/configparser.c"
+#line 4284 "util/configparser.c"
break;
- case 348:
-#line 991 "util/configparser.y"
+ case 351:
+#line 998 "util/configparser.y"
{
OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4271 "util/configparser.c"
+#line 4295 "util/configparser.c"
break;
- case 349:
-#line 999 "util/configparser.y"
+ case 352:
+#line 1006 "util/configparser.y"
{
OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_ciphers);
cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
}
-#line 4281 "util/configparser.c"
+#line 4305 "util/configparser.c"
break;
- case 350:
-#line 1006 "util/configparser.y"
+ case 353:
+#line 1013 "util/configparser.y"
{
OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_ciphersuites);
cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
}
-#line 4291 "util/configparser.c"
+#line 4315 "util/configparser.c"
break;
- case 351:
-#line 1013 "util/configparser.y"
+ case 354:
+#line 1020 "util/configparser.y"
{
OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4302 "util/configparser.c"
+#line 4326 "util/configparser.c"
break;
- case 352:
-#line 1021 "util/configparser.y"
+ case 355:
+#line 1028 "util/configparser.y"
{
OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4310,11 +4334,11 @@ yyreduce:
else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4314 "util/configparser.c"
+#line 4338 "util/configparser.c"
break;
- case 353:
-#line 1030 "util/configparser.y"
+ case 356:
+#line 1037 "util/configparser.y"
{
OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4322,11 +4346,11 @@ yyreduce:
else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4326 "util/configparser.c"
+#line 4350 "util/configparser.c"
break;
- case 354:
-#line 1038 "util/configparser.y"
+ case 357:
+#line 1045 "util/configparser.y"
{
OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_endpoint);
@@ -4342,11 +4366,11 @@ yyreduce:
cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
}
}
-#line 4346 "util/configparser.c"
+#line 4370 "util/configparser.c"
break;
- case 355:
-#line 1054 "util/configparser.y"
+ case 358:
+#line 1061 "util/configparser.y"
{
OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4354,11 +4378,11 @@ yyreduce:
else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4358 "util/configparser.c"
+#line 4382 "util/configparser.c"
break;
- case 356:
-#line 1062 "util/configparser.y"
+ case 359:
+#line 1069 "util/configparser.y"
{
OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4366,11 +4390,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4370 "util/configparser.c"
+#line 4394 "util/configparser.c"
break;
- case 357:
-#line 1070 "util/configparser.y"
+ case 360:
+#line 1077 "util/configparser.y"
{
OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4378,11 +4402,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4382 "util/configparser.c"
+#line 4406 "util/configparser.c"
break;
- case 358:
-#line 1078 "util/configparser.y"
+ case 361:
+#line 1085 "util/configparser.y"
{
OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4390,11 +4414,11 @@ yyreduce:
else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4394 "util/configparser.c"
+#line 4418 "util/configparser.c"
break;
- case 359:
-#line 1086 "util/configparser.y"
+ case 362:
+#line 1093 "util/configparser.y"
{
OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4402,11 +4426,11 @@ yyreduce:
else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4406 "util/configparser.c"
+#line 4430 "util/configparser.c"
break;
- case 360:
-#line 1094 "util/configparser.y"
+ case 363:
+#line 1101 "util/configparser.y"
{
OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4414,11 +4438,11 @@ yyreduce:
else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4418 "util/configparser.c"
+#line 4442 "util/configparser.c"
break;
- case 361:
-#line 1103 "util/configparser.y"
+ case 364:
+#line 1110 "util/configparser.y"
{
OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4426,11 +4450,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4430 "util/configparser.c"
+#line 4454 "util/configparser.c"
break;
- case 362:
-#line 1112 "util/configparser.y"
+ case 365:
+#line 1119 "util/configparser.y"
{
OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4443,11 +4467,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4447 "util/configparser.c"
+#line 4471 "util/configparser.c"
break;
- case 363:
-#line 1126 "util/configparser.y"
+ case 366:
+#line 1133 "util/configparser.y"
{
OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4455,11 +4479,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4459 "util/configparser.c"
+#line 4483 "util/configparser.c"
break;
- case 364:
-#line 1135 "util/configparser.y"
+ case 367:
+#line 1142 "util/configparser.y"
{
OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4467,35 +4491,35 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4471 "util/configparser.c"
+#line 4495 "util/configparser.c"
break;
- case 365:
-#line 1144 "util/configparser.y"
- {
- OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4483 "util/configparser.c"
+ case 368:
+#line 1151 "util/configparser.y"
+ {
+ OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4507 "util/configparser.c"
break;
- case 366:
-#line 1153 "util/configparser.y"
- {
- OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4495 "util/configparser.c"
+ case 369:
+#line 1160 "util/configparser.y"
+ {
+ OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4519 "util/configparser.c"
break;
- case 367:
-#line 1162 "util/configparser.y"
+ case 370:
+#line 1169 "util/configparser.y"
{
OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4503,43 +4527,43 @@ yyreduce:
else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4507 "util/configparser.c"
+#line 4531 "util/configparser.c"
break;
- case 368:
-#line 1171 "util/configparser.y"
- {
- OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4519 "util/configparser.c"
+ case 371:
+#line 1178 "util/configparser.y"
+ {
+ OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4543 "util/configparser.c"
break;
- case 369:
-#line 1180 "util/configparser.y"
+ case 372:
+#line 1187 "util/configparser.y"
{
OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->chrootdir);
cfg_parser->cfg->chrootdir = (yyvsp[0].str);
}
-#line 4529 "util/configparser.c"
+#line 4553 "util/configparser.c"
break;
- case 370:
-#line 1187 "util/configparser.y"
+ case 373:
+#line 1194 "util/configparser.y"
{
OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->username);
cfg_parser->cfg->username = (yyvsp[0].str);
}
-#line 4539 "util/configparser.c"
+#line 4563 "util/configparser.c"
break;
- case 371:
-#line 1194 "util/configparser.y"
+ case 374:
+#line 1201 "util/configparser.y"
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -4558,111 +4582,111 @@ yyreduce:
cfg_parser->chroot)) == 0)
d += strlen(cfg_parser->chroot);
if(d[0]) {
- if(chdir(d))
+ if(chdir(d))
log_err("cannot chdir to directory: %s (%s)",
d, strerror(errno));
}
}
}
-#line 4568 "util/configparser.c"
+#line 4592 "util/configparser.c"
break;
- case 372:
-#line 1220 "util/configparser.y"
+ case 375:
+#line 1227 "util/configparser.y"
{
OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->logfile);
cfg_parser->cfg->logfile = (yyvsp[0].str);
cfg_parser->cfg->use_syslog = 0;
}
-#line 4579 "util/configparser.c"
+#line 4603 "util/configparser.c"
break;
- case 373:
-#line 1228 "util/configparser.y"
+ case 376:
+#line 1235 "util/configparser.y"
{
OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->pidfile);
cfg_parser->cfg->pidfile = (yyvsp[0].str);
}
-#line 4589 "util/configparser.c"
+#line 4613 "util/configparser.c"
break;
- case 374:
-#line 1235 "util/configparser.y"
+ case 377:
+#line 1242 "util/configparser.y"
{
OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4599 "util/configparser.c"
+#line 4623 "util/configparser.c"
break;
- case 375:
-#line 1242 "util/configparser.y"
+ case 378:
+#line 1249 "util/configparser.y"
{
OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
free((yyvsp[0].str));
}
-#line 4609 "util/configparser.c"
+#line 4633 "util/configparser.c"
break;
- case 376:
-#line 1249 "util/configparser.y"
+ case 379:
+#line 1256 "util/configparser.y"
{
OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
log_warn("option dlv-anchor ignored: DLV is decommissioned");
free((yyvsp[0].str));
}
-#line 4619 "util/configparser.c"
+#line 4643 "util/configparser.c"
break;
- case 377:
-#line 1256 "util/configparser.y"
+ case 380:
+#line 1263 "util/configparser.y"
{
OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
auto_trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4630 "util/configparser.c"
+#line 4654 "util/configparser.c"
break;
- case 378:
-#line 1264 "util/configparser.y"
+ case 381:
+#line 1271 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4641 "util/configparser.c"
+#line 4665 "util/configparser.c"
break;
- case 379:
-#line 1272 "util/configparser.y"
+ case 382:
+#line 1279 "util/configparser.y"
{
OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trusted_keys_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4652 "util/configparser.c"
+#line 4676 "util/configparser.c"
break;
- case 380:
-#line 1280 "util/configparser.y"
+ case 383:
+#line 1287 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4662 "util/configparser.c"
+#line 4686 "util/configparser.c"
break;
- case 381:
-#line 1287 "util/configparser.y"
+ case 384:
+#line 1294 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4672,11 +4696,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4676 "util/configparser.c"
+#line 4700 "util/configparser.c"
break;
- case 382:
-#line 1298 "util/configparser.y"
+ case 385:
+#line 1305 "util/configparser.y"
{
OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4686,21 +4710,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4690 "util/configparser.c"
+#line 4714 "util/configparser.c"
break;
- case 383:
-#line 1309 "util/configparser.y"
+ case 386:
+#line 1316 "util/configparser.y"
{
OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4700 "util/configparser.c"
+#line 4724 "util/configparser.c"
break;
- case 384:
-#line 1316 "util/configparser.y"
+ case 387:
+#line 1323 "util/configparser.y"
{
OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4708,11 +4732,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4712 "util/configparser.c"
+#line 4736 "util/configparser.c"
break;
- case 385:
-#line 1325 "util/configparser.y"
+ case 388:
+#line 1332 "util/configparser.y"
{
OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4720,11 +4744,11 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4724 "util/configparser.c"
+#line 4748 "util/configparser.c"
break;
- case 386:
-#line 1334 "util/configparser.y"
+ case 389:
+#line 1341 "util/configparser.y"
{
OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4732,11 +4756,11 @@ yyreduce:
else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4736 "util/configparser.c"
+#line 4760 "util/configparser.c"
break;
- case 387:
-#line 1343 "util/configparser.y"
+ case 390:
+#line 1350 "util/configparser.y"
{
OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4744,41 +4768,41 @@ yyreduce:
else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4748 "util/configparser.c"
+#line 4772 "util/configparser.c"
break;
- case 388:
-#line 1352 "util/configparser.y"
+ case 391:
+#line 1359 "util/configparser.y"
{
OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->identity);
cfg_parser->cfg->identity = (yyvsp[0].str);
}
-#line 4758 "util/configparser.c"
+#line 4782 "util/configparser.c"
break;
- case 389:
-#line 1359 "util/configparser.y"
+ case 392:
+#line 1366 "util/configparser.y"
{
OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->version);
cfg_parser->cfg->version = (yyvsp[0].str);
}
-#line 4768 "util/configparser.c"
+#line 4792 "util/configparser.c"
break;
- case 390:
-#line 1366 "util/configparser.y"
+ case 393:
+#line 1373 "util/configparser.y"
{
OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_user_agent);
cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
}
-#line 4778 "util/configparser.c"
+#line 4802 "util/configparser.c"
break;
- case 391:
-#line 1373 "util/configparser.y"
+ case 394:
+#line 1380 "util/configparser.y"
{
OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->nsid_cfg_str);
@@ -4793,72 +4817,72 @@ yyreduce:
yyerror("the NSID must be either a hex string or an "
"ascii character string prepended with ascii_.");
}
-#line 4797 "util/configparser.c"
+#line 4821 "util/configparser.c"
break;
- case 392:
-#line 1389 "util/configparser.y"
+ case 395:
+#line 1396 "util/configparser.y"
{
OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 4808 "util/configparser.c"
+#line 4832 "util/configparser.c"
break;
- case 393:
-#line 1397 "util/configparser.y"
+ case 396:
+#line 1404 "util/configparser.y"
{
OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 4819 "util/configparser.c"
+#line 4843 "util/configparser.c"
break;
- case 394:
-#line 1405 "util/configparser.y"
- {
- OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->so_reuseport =
- (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4832 "util/configparser.c"
+ case 397:
+#line 1412 "util/configparser.y"
+ {
+ OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->so_reuseport =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4856 "util/configparser.c"
break;
- case 395:
-#line 1415 "util/configparser.y"
- {
- OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ip_transparent =
- (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4845 "util/configparser.c"
+ case 398:
+#line 1422 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_transparent =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4869 "util/configparser.c"
break;
- case 396:
-#line 1425 "util/configparser.y"
- {
- OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
- if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ip_freebind =
- (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
- }
-#line 4858 "util/configparser.c"
+ case 399:
+#line 1432 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_freebind =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4882 "util/configparser.c"
break;
- case 397:
-#line 1435 "util/configparser.y"
+ case 400:
+#line 1442 "util/configparser.y"
{
OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4871,22 +4895,22 @@ yyreduce:
cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4875 "util/configparser.c"
+#line 4899 "util/configparser.c"
break;
- case 398:
-#line 1449 "util/configparser.y"
+ case 401:
+#line 1456 "util/configparser.y"
{
OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4886 "util/configparser.c"
+#line 4910 "util/configparser.c"
break;
- case 399:
-#line 1457 "util/configparser.y"
+ case 402:
+#line 1464 "util/configparser.y"
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4898,11 +4922,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4902 "util/configparser.c"
+#line 4926 "util/configparser.c"
break;
- case 400:
-#line 1470 "util/configparser.y"
+ case 403:
+#line 1477 "util/configparser.y"
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4912,38 +4936,38 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4916 "util/configparser.c"
+#line 4940 "util/configparser.c"
break;
- case 401:
-#line 1481 "util/configparser.y"
+ case 404:
+#line 1488 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4927 "util/configparser.c"
+#line 4951 "util/configparser.c"
break;
- case 402:
-#line 1489 "util/configparser.y"
+ case 405:
+#line 1496 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
+ if(atoi((yyvsp[0].str)) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
yyerror("must be a power of 2");
}
free((yyvsp[0].str));
}
-#line 4943 "util/configparser.c"
+#line 4967 "util/configparser.c"
break;
- case 403:
-#line 1502 "util/configparser.y"
+ case 406:
+#line 1509 "util/configparser.y"
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4951,11 +4975,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4955 "util/configparser.c"
+#line 4979 "util/configparser.c"
break;
- case 404:
-#line 1511 "util/configparser.y"
+ case 407:
+#line 1518 "util/configparser.y"
{
OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4963,11 +4987,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4967 "util/configparser.c"
+#line 4991 "util/configparser.c"
break;
- case 405:
-#line 1520 "util/configparser.y"
+ case 408:
+#line 1527 "util/configparser.y"
{
OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4975,11 +4999,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4979 "util/configparser.c"
+#line 5003 "util/configparser.c"
break;
- case 406:
-#line 1529 "util/configparser.y"
+ case 409:
+#line 1536 "util/configparser.y"
{
OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4987,64 +5011,64 @@ yyreduce:
else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4991 "util/configparser.c"
+#line 5015 "util/configparser.c"
break;
- case 407:
-#line 1538 "util/configparser.y"
+ case 410:
+#line 1545 "util/configparser.y"
{
OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->unblock_lan_zones =
+ else cfg_parser->cfg->unblock_lan_zones =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5004 "util/configparser.c"
+#line 5028 "util/configparser.c"
break;
- case 408:
-#line 1548 "util/configparser.y"
+ case 411:
+#line 1555 "util/configparser.y"
{
OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->insecure_lan_zones =
+ else cfg_parser->cfg->insecure_lan_zones =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5017 "util/configparser.c"
+#line 5041 "util/configparser.c"
break;
- case 409:
-#line 1558 "util/configparser.y"
+ case 412:
+#line 1565 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5028 "util/configparser.c"
+#line 5052 "util/configparser.c"
break;
- case 410:
-#line 1566 "util/configparser.y"
+ case 413:
+#line 1573 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
+ if(atoi((yyvsp[0].str)) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
yyerror("must be a power of 2");
}
free((yyvsp[0].str));
}
-#line 5044 "util/configparser.c"
+#line 5068 "util/configparser.c"
break;
- case 411:
-#line 1579 "util/configparser.y"
+ case 414:
+#line 1586 "util/configparser.y"
{
OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5052,22 +5076,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5056 "util/configparser.c"
+#line 5080 "util/configparser.c"
break;
- case 412:
-#line 1588 "util/configparser.y"
+ case 415:
+#line 1595 "util/configparser.y"
{
OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
"removed, use infra-host-ttl)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5067 "util/configparser.c"
+#line 5091 "util/configparser.c"
break;
- case 413:
-#line 1596 "util/configparser.y"
+ case 416:
+#line 1603 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5075,38 +5099,38 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5079 "util/configparser.c"
+#line 5103 "util/configparser.c"
break;
- case 414:
-#line 1605 "util/configparser.y"
+ case 417:
+#line 1612 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
"(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5090 "util/configparser.c"
+#line 5114 "util/configparser.c"
break;
- case 415:
-#line 1613 "util/configparser.y"
+ case 418:
+#line 1620 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
+ if(atoi((yyvsp[0].str)) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
yyerror("must be a power of 2");
}
free((yyvsp[0].str));
}
-#line 5106 "util/configparser.c"
+#line 5130 "util/configparser.c"
break;
- case 416:
-#line 1626 "util/configparser.y"
+ case 419:
+#line 1633 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5114,11 +5138,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5118 "util/configparser.c"
+#line 5142 "util/configparser.c"
break;
- case 417:
-#line 1635 "util/configparser.y"
+ case 420:
+#line 1642 "util/configparser.y"
{
OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5127,155 +5151,155 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5131 "util/configparser.c"
+#line 5155 "util/configparser.c"
break;
- case 418:
-#line 1645 "util/configparser.y"
+ case 421:
+#line 1652 "util/configparser.y"
{
OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->target_fetch_policy);
cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
}
-#line 5141 "util/configparser.c"
+#line 5165 "util/configparser.c"
break;
- case 419:
-#line 1652 "util/configparser.y"
+ case 422:
+#line 1659 "util/configparser.y"
{
OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_short_bufsize =
+ else cfg_parser->cfg->harden_short_bufsize =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5154 "util/configparser.c"
+#line 5178 "util/configparser.c"
break;
- case 420:
-#line 1662 "util/configparser.y"
+ case 423:
+#line 1669 "util/configparser.y"
{
OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_large_queries =
+ else cfg_parser->cfg->harden_large_queries =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5167 "util/configparser.c"
+#line 5191 "util/configparser.c"
break;
- case 421:
-#line 1672 "util/configparser.y"
+ case 424:
+#line 1679 "util/configparser.y"
{
OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_glue =
+ else cfg_parser->cfg->harden_glue =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5180 "util/configparser.c"
+#line 5204 "util/configparser.c"
break;
- case 422:
-#line 1682 "util/configparser.y"
+ case 425:
+#line 1689 "util/configparser.y"
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_dnssec_stripped =
+ else cfg_parser->cfg->harden_dnssec_stripped =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5193 "util/configparser.c"
+#line 5217 "util/configparser.c"
break;
- case 423:
-#line 1692 "util/configparser.y"
+ case 426:
+#line 1699 "util/configparser.y"
{
OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_below_nxdomain =
+ else cfg_parser->cfg->harden_below_nxdomain =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5206 "util/configparser.c"
+#line 5230 "util/configparser.c"
break;
- case 424:
-#line 1702 "util/configparser.y"
+ case 427:
+#line 1709 "util/configparser.y"
{
OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_referral_path =
+ else cfg_parser->cfg->harden_referral_path =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5219 "util/configparser.c"
+#line 5243 "util/configparser.c"
break;
- case 425:
-#line 1712 "util/configparser.y"
+ case 428:
+#line 1719 "util/configparser.y"
{
OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_algo_downgrade =
+ else cfg_parser->cfg->harden_algo_downgrade =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5232 "util/configparser.c"
+#line 5256 "util/configparser.c"
break;
- case 426:
-#line 1722 "util/configparser.y"
+ case 429:
+#line 1729 "util/configparser.y"
{
OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->use_caps_bits_for_id =
+ else cfg_parser->cfg->use_caps_bits_for_id =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5245 "util/configparser.c"
+#line 5269 "util/configparser.c"
break;
- case 427:
-#line 1732 "util/configparser.y"
+ case 430:
+#line 1739 "util/configparser.y"
{
OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5255 "util/configparser.c"
+#line 5279 "util/configparser.c"
break;
- case 428:
-#line 1739 "util/configparser.y"
+ case 431:
+#line 1746 "util/configparser.y"
{
OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5265 "util/configparser.c"
+#line 5289 "util/configparser.c"
break;
- case 429:
-#line 1746 "util/configparser.y"
+ case 432:
+#line 1753 "util/configparser.y"
{
OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5275 "util/configparser.c"
+#line 5299 "util/configparser.c"
break;
- case 430:
-#line 1753 "util/configparser.y"
+ case 433:
+#line 1760 "util/configparser.y"
{
OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5283,11 +5307,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5287 "util/configparser.c"
+#line 5311 "util/configparser.c"
break;
- case 431:
-#line 1762 "util/configparser.y"
+ case 434:
+#line 1769 "util/configparser.y"
{
OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5295,11 +5319,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5299 "util/configparser.c"
+#line 5323 "util/configparser.c"
break;
- case 432:
-#line 1771 "util/configparser.y"
+ case 435:
+#line 1778 "util/configparser.y"
{
OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5307,11 +5331,11 @@ yyreduce:
else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5311 "util/configparser.c"
+#line 5335 "util/configparser.c"
break;
- case 433:
-#line 1780 "util/configparser.y"
+ case 436:
+#line 1787 "util/configparser.y"
{
OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5319,41 +5343,41 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5323 "util/configparser.c"
+#line 5347 "util/configparser.c"
break;
- case 434:
-#line 1789 "util/configparser.y"
+ case 437:
+#line 1796 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5333 "util/configparser.c"
+#line 5357 "util/configparser.c"
break;
- case 435:
-#line 1796 "util/configparser.y"
+ case 438:
+#line 1803 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->donotquery_localhost =
+ else cfg_parser->cfg->donotquery_localhost =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5346 "util/configparser.c"
+#line 5370 "util/configparser.c"
break;
- case 436:
-#line 1806 "util/configparser.y"
+ case 439:
+#line 1813 "util/configparser.y"
{
OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
strcmp((yyvsp[0].str), "deny_non_local")!=0 &&
strcmp((yyvsp[0].str), "refuse_non_local")!=0 &&
- strcmp((yyvsp[0].str), "allow_setrd")!=0 &&
- strcmp((yyvsp[0].str), "allow")!=0 &&
+ strcmp((yyvsp[0].str), "allow_setrd")!=0 &&
+ strcmp((yyvsp[0].str), "allow")!=0 &&
strcmp((yyvsp[0].str), "allow_snoop")!=0) {
yyerror("expected deny, refuse, deny_non_local, "
"refuse_non_local, allow, allow_setrd or "
@@ -5365,27 +5389,27 @@ yyreduce:
fatal_exit("out of memory adding acl");
}
}
-#line 5369 "util/configparser.c"
+#line 5393 "util/configparser.c"
break;
- case 437:
-#line 1826 "util/configparser.y"
+ case 440:
+#line 1833 "util/configparser.y"
{
OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->module_conf);
cfg_parser->cfg->module_conf = (yyvsp[0].str);
}
-#line 5379 "util/configparser.c"
+#line 5403 "util/configparser.c"
break;
- case 438:
-#line 1833 "util/configparser.y"
+ case 441:
+#line 1840 "util/configparser.y"
{
OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
cfg_parser->cfg->val_date_override = 0;
} else if(strlen((yyvsp[0].str)) == 14) {
- cfg_parser->cfg->val_date_override =
+ cfg_parser->cfg->val_date_override =
cfg_convert_timeval((yyvsp[0].str));
if(!cfg_parser->cfg->val_date_override)
yyerror("bad date/time specification");
@@ -5396,11 +5420,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5400 "util/configparser.c"
+#line 5424 "util/configparser.c"
break;
- case 439:
-#line 1851 "util/configparser.y"
+ case 442:
+#line 1858 "util/configparser.y"
{
OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5412,11 +5436,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5416 "util/configparser.c"
+#line 5440 "util/configparser.c"
break;
- case 440:
-#line 1864 "util/configparser.y"
+ case 443:
+#line 1871 "util/configparser.y"
{
OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5428,11 +5452,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5432 "util/configparser.c"
+#line 5456 "util/configparser.c"
break;
- case 441:
-#line 1877 "util/configparser.y"
+ case 444:
+#line 1884 "util/configparser.y"
{
OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5444,11 +5468,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5448 "util/configparser.c"
+#line 5472 "util/configparser.c"
break;
- case 442:
-#line 1890 "util/configparser.y"
+ case 445:
+#line 1897 "util/configparser.y"
{
OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5456,11 +5480,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5460 "util/configparser.c"
+#line 5484 "util/configparser.c"
break;
- case 443:
-#line 1899 "util/configparser.y"
+ case 446:
+#line 1906 "util/configparser.y"
{
OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5468,11 +5492,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5472 "util/configparser.c"
+#line 5496 "util/configparser.c"
break;
- case 444:
-#line 1908 "util/configparser.y"
+ case 447:
+#line 1915 "util/configparser.y"
{
OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5480,11 +5504,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5484 "util/configparser.c"
+#line 5508 "util/configparser.c"
break;
- case 445:
-#line 1917 "util/configparser.y"
+ case 448:
+#line 1924 "util/configparser.y"
{
OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5492,37 +5516,37 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5496 "util/configparser.c"
+#line 5520 "util/configparser.c"
break;
- case 446:
-#line 1926 "util/configparser.y"
+ case 449:
+#line 1933 "util/configparser.y"
{
OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->val_clean_additional =
+ else cfg_parser->cfg->val_clean_additional =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5509 "util/configparser.c"
+#line 5533 "util/configparser.c"
break;
- case 447:
-#line 1936 "util/configparser.y"
+ case 450:
+#line 1943 "util/configparser.y"
{
OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->val_permissive_mode =
+ else cfg_parser->cfg->val_permissive_mode =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5522 "util/configparser.c"
+#line 5546 "util/configparser.c"
break;
- case 448:
-#line 1946 "util/configparser.y"
+ case 451:
+#line 1953 "util/configparser.y"
{
OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5532,11 +5556,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5536 "util/configparser.c"
+#line 5560 "util/configparser.c"
break;
- case 449:
-#line 1957 "util/configparser.y"
+ case 452:
+#line 1964 "util/configparser.y"
{
OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5544,11 +5568,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5548 "util/configparser.c"
+#line 5572 "util/configparser.c"
break;
- case 450:
-#line 1966 "util/configparser.y"
+ case 453:
+#line 1973 "util/configparser.y"
{
OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5556,11 +5580,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5560 "util/configparser.c"
+#line 5584 "util/configparser.c"
break;
- case 451:
-#line 1975 "util/configparser.y"
+ case 454:
+#line 1982 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5568,11 +5592,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5572 "util/configparser.c"
+#line 5596 "util/configparser.c"
break;
- case 452:
-#line 1984 "util/configparser.y"
+ case 455:
+#line 1991 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5580,11 +5604,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5584 "util/configparser.c"
+#line 5608 "util/configparser.c"
break;
- case 453:
-#line 1993 "util/configparser.y"
+ case 456:
+#line 2000 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5592,11 +5616,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5596 "util/configparser.c"
+#line 5620 "util/configparser.c"
break;
- case 454:
-#line 2002 "util/configparser.y"
+ case 457:
+#line 2009 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5604,11 +5628,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5608 "util/configparser.c"
+#line 5632 "util/configparser.c"
break;
- case 455:
-#line 2011 "util/configparser.y"
+ case 458:
+#line 2018 "util/configparser.y"
{
OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5616,11 +5640,11 @@ yyreduce:
else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5620 "util/configparser.c"
+#line 5644 "util/configparser.c"
break;
- case 456:
-#line 2020 "util/configparser.y"
+ case 459:
+#line 2027 "util/configparser.y"
{
OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5632,11 +5656,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5636 "util/configparser.c"
+#line 5660 "util/configparser.c"
break;
- case 457:
-#line 2033 "util/configparser.y"
+ case 460:
+#line 2040 "util/configparser.y"
{
OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5648,11 +5672,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5652 "util/configparser.c"
+#line 5676 "util/configparser.c"
break;
- case 458:
-#line 2046 "util/configparser.y"
+ case 461:
+#line 2053 "util/configparser.y"
{
OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5660,21 +5684,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5664 "util/configparser.c"
+#line 5688 "util/configparser.c"
break;
- case 459:
-#line 2055 "util/configparser.y"
+ case 462:
+#line 2062 "util/configparser.y"
{
OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->val_nsec3_key_iterations);
cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
}
-#line 5674 "util/configparser.c"
+#line 5698 "util/configparser.c"
break;
- case 460:
-#line 2062 "util/configparser.y"
+ case 463:
+#line 2069 "util/configparser.y"
{
OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5682,11 +5706,11 @@ yyreduce:
else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5686 "util/configparser.c"
+#line 5710 "util/configparser.c"
break;
- case 461:
-#line 2071 "util/configparser.y"
+ case 464:
+#line 2078 "util/configparser.y"
{
OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5694,11 +5718,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5698 "util/configparser.c"
+#line 5722 "util/configparser.c"
break;
- case 462:
-#line 2080 "util/configparser.y"
+ case 465:
+#line 2087 "util/configparser.y"
{
OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5706,11 +5730,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5710 "util/configparser.c"
+#line 5734 "util/configparser.c"
break;
- case 463:
-#line 2089 "util/configparser.y"
+ case 466:
+#line 2096 "util/configparser.y"
{
OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5718,11 +5742,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5722 "util/configparser.c"
+#line 5746 "util/configparser.c"
break;
- case 464:
-#line 2098 "util/configparser.y"
+ case 467:
+#line 2105 "util/configparser.y"
{
OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5731,49 +5755,49 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5735 "util/configparser.c"
+#line 5759 "util/configparser.c"
break;
- case 465:
-#line 2107 "util/configparser.y"
+ case 468:
+#line 2114 "util/configparser.y"
{
OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5746 "util/configparser.c"
+#line 5770 "util/configparser.c"
break;
- case 466:
-#line 2115 "util/configparser.y"
+ case 469:
+#line 2122 "util/configparser.y"
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
+ if(atoi((yyvsp[0].str)) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
yyerror("must be a power of 2");
}
free((yyvsp[0].str));
}
-#line 5762 "util/configparser.c"
+#line 5786 "util/configparser.c"
break;
- case 467:
-#line 2128 "util/configparser.y"
+ case 470:
+#line 2135 "util/configparser.y"
{
OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5773 "util/configparser.c"
+#line 5797 "util/configparser.c"
break;
- case 468:
-#line 2136 "util/configparser.y"
+ case 471:
+#line 2143 "util/configparser.y"
{
OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -5812,26 +5836,26 @@ yyreduce:
free((yyvsp[0].str));
#endif
} else {
- if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
+ if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding local-zone");
}
}
-#line 5821 "util/configparser.c"
+#line 5845 "util/configparser.c"
break;
- case 469:
-#line 2181 "util/configparser.y"
+ case 472:
+#line 2188 "util/configparser.y"
{
OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
fatal_exit("out of memory adding local-data");
}
-#line 5831 "util/configparser.c"
+#line 5855 "util/configparser.c"
break;
- case 470:
-#line 2188 "util/configparser.y"
+ case 473:
+#line 2195 "util/configparser.y"
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5845,11 +5869,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 5849 "util/configparser.c"
+#line 5873 "util/configparser.c"
break;
- case 471:
-#line 2203 "util/configparser.y"
+ case 474:
+#line 2210 "util/configparser.y"
{
OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5858,11 +5882,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5862 "util/configparser.c"
+#line 5886 "util/configparser.c"
break;
- case 472:
-#line 2213 "util/configparser.y"
+ case 475:
+#line 2220 "util/configparser.y"
{
OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5871,41 +5895,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5875 "util/configparser.c"
+#line 5899 "util/configparser.c"
break;
- case 473:
-#line 2223 "util/configparser.y"
+ case 476:
+#line 2230 "util/configparser.y"
{
OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5885 "util/configparser.c"
+#line 5909 "util/configparser.c"
break;
- case 474:
-#line 2230 "util/configparser.y"
+ case 477:
+#line 2237 "util/configparser.y"
{
OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5895 "util/configparser.c"
+#line 5919 "util/configparser.c"
break;
- case 475:
-#line 2237 "util/configparser.y"
+ case 478:
+#line 2244 "util/configparser.y"
{
OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dns64_prefix);
cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
}
-#line 5905 "util/configparser.c"
+#line 5929 "util/configparser.c"
break;
- case 476:
-#line 2244 "util/configparser.y"
+ case 479:
+#line 2251 "util/configparser.y"
{
OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5913,22 +5937,22 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5917 "util/configparser.c"
+#line 5941 "util/configparser.c"
break;
- case 477:
-#line 2253 "util/configparser.y"
+ case 480:
+#line 2260 "util/configparser.y"
{
OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
(yyvsp[0].str)))
fatal_exit("out of memory adding dns64-ignore-aaaa");
}
-#line 5928 "util/configparser.c"
+#line 5952 "util/configparser.c"
break;
- case 478:
-#line 2261 "util/configparser.y"
+ case 481:
+#line 2268 "util/configparser.y"
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -5941,11 +5965,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5945 "util/configparser.c"
+#line 5969 "util/configparser.c"
break;
- case 479:
-#line 2275 "util/configparser.y"
+ case 482:
+#line 2282 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5965,11 +5989,11 @@ yyreduce:
}
}
}
-#line 5969 "util/configparser.c"
+#line 5993 "util/configparser.c"
break;
- case 480:
-#line 2296 "util/configparser.y"
+ case 483:
+#line 2303 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5989,11 +6013,11 @@ yyreduce:
}
}
}
-#line 5993 "util/configparser.c"
+#line 6017 "util/configparser.c"
break;
- case 481:
-#line 2317 "util/configparser.y"
+ case 484:
+#line 2324 "util/configparser.y"
{
OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -6004,11 +6028,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6008 "util/configparser.c"
+#line 6032 "util/configparser.c"
break;
- case 482:
-#line 2329 "util/configparser.y"
+ case 485:
+#line 2336 "util/configparser.y"
{
OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -6019,11 +6043,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6023 "util/configparser.c"
+#line 6047 "util/configparser.c"
break;
- case 483:
-#line 2341 "util/configparser.y"
+ case 486:
+#line 2348 "util/configparser.y"
{
OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -6034,11 +6058,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6038 "util/configparser.c"
+#line 6062 "util/configparser.c"
break;
- case 484:
-#line 2353 "util/configparser.y"
+ case 487:
+#line 2360 "util/configparser.y"
{
OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -6046,11 +6070,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 6050 "util/configparser.c"
+#line 6074 "util/configparser.c"
break;
- case 485:
-#line 2362 "util/configparser.y"
+ case 488:
+#line 2369 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6070,89 +6094,89 @@ yyreduce:
}
}
}
-#line 6074 "util/configparser.c"
+#line 6098 "util/configparser.c"
break;
- case 486:
-#line 2383 "util/configparser.y"
- {
- OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
+ case 489:
+#line 2390 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6086 "util/configparser.c"
+#line 6110 "util/configparser.c"
break;
- case 487:
-#line 2393 "util/configparser.y"
- {
- OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
+ case 490:
+#line 2399 "util/configparser.y"
+ {
+ OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6098 "util/configparser.c"
+#line 6122 "util/configparser.c"
break;
- case 488:
-#line 2402 "util/configparser.y"
- {
- OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
- if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
- yyerror("memory size expected");
- free((yyvsp[0].str));
- }
-#line 6109 "util/configparser.c"
+ case 491:
+#line 2408 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 6133 "util/configparser.c"
break;
- case 489:
-#line 2410 "util/configparser.y"
+ case 492:
+#line 2416 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 6120 "util/configparser.c"
+#line 6144 "util/configparser.c"
break;
- case 490:
-#line 2418 "util/configparser.y"
- {
- OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
- if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
- yyerror("must be a power of 2");
- }
- free((yyvsp[0].str));
- }
-#line 6136 "util/configparser.c"
+ case 493:
+#line 2424 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
+ }
+#line 6160 "util/configparser.c"
break;
- case 491:
-#line 2431 "util/configparser.y"
+ case 494:
+#line 2437 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
+ if(atoi((yyvsp[0].str)) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
yyerror("must be a power of 2");
}
free((yyvsp[0].str));
}
-#line 6152 "util/configparser.c"
+#line 6176 "util/configparser.c"
break;
- case 492:
-#line 2444 "util/configparser.y"
+ case 495:
+#line 2450 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -6166,11 +6190,11 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 6170 "util/configparser.c"
+#line 6194 "util/configparser.c"
break;
- case 493:
-#line 2459 "util/configparser.y"
+ case 496:
+#line 2465 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -6184,94 +6208,106 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 6188 "util/configparser.c"
+#line 6212 "util/configparser.c"
break;
- case 494:
-#line 2474 "util/configparser.y"
- {
- OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
- free((yyvsp[0].str));
+ case 497:
+#line 2480 "util/configparser.y"
+ {
+ OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
}
-#line 6200 "util/configparser.c"
+#line 6224 "util/configparser.c"
break;
- case 495:
-#line 2483 "util/configparser.y"
- {
- OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
+ case 498:
+#line 2489 "util/configparser.y"
+ {
+ OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6212 "util/configparser.c"
+#line 6236 "util/configparser.c"
break;
- case 496:
-#line 2492 "util/configparser.y"
- {
+ case 499:
+#line 2498 "util/configparser.y"
+ {
+ OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6248 "util/configparser.c"
+ break;
+
+ case 500:
+#line 2507 "util/configparser.y"
+ {
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
free((yyvsp[0].str));
}
-#line 6221 "util/configparser.c"
+#line 6257 "util/configparser.c"
break;
- case 497:
-#line 2498 "util/configparser.y"
- {
- OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
+ case 501:
+#line 2513 "util/configparser.y"
+ {
+ OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) <= 0)
yyerror("number expected");
else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6233 "util/configparser.c"
+#line 6269 "util/configparser.c"
break;
- case 498:
-#line 2507 "util/configparser.y"
- {
- OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
+ case 502:
+#line 2522 "util/configparser.y"
+ {
+ OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6245 "util/configparser.c"
+#line 6281 "util/configparser.c"
break;
- case 499:
-#line 2516 "util/configparser.y"
+ case 503:
+#line 2531 "util/configparser.y"
{
OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->qname_minimisation =
+ else cfg_parser->cfg->qname_minimisation =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6258 "util/configparser.c"
+#line 6294 "util/configparser.c"
break;
- case 500:
-#line 2526 "util/configparser.y"
+ case 504:
+#line 2541 "util/configparser.y"
{
OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->qname_minimisation_strict =
+ else cfg_parser->cfg->qname_minimisation_strict =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6271 "util/configparser.c"
+#line 6307 "util/configparser.c"
break;
- case 501:
-#line 2536 "util/configparser.y"
+ case 505:
+#line 2551 "util/configparser.y"
{
OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6280,11 +6316,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6284 "util/configparser.c"
+#line 6320 "util/configparser.c"
break;
- case 502:
-#line 2546 "util/configparser.y"
+ case 506:
+#line 2561 "util/configparser.y"
{
OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6292,11 +6328,11 @@ yyreduce:
else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6296 "util/configparser.c"
+#line 6332 "util/configparser.c"
break;
- case 503:
-#line 2555 "util/configparser.y"
+ case 507:
+#line 2570 "util/configparser.y"
{
OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6305,11 +6341,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6309 "util/configparser.c"
+#line 6345 "util/configparser.c"
break;
- case 504:
-#line 2565 "util/configparser.y"
+ case 508:
+#line 2580 "util/configparser.y"
{
OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6317,11 +6353,11 @@ yyreduce:
else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6321 "util/configparser.c"
+#line 6357 "util/configparser.c"
break;
- case 505:
-#line 2574 "util/configparser.y"
+ case 509:
+#line 2589 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -6333,11 +6369,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6337 "util/configparser.c"
+#line 6373 "util/configparser.c"
break;
- case 506:
-#line 2587 "util/configparser.y"
+ case 510:
+#line 2602 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -6349,11 +6385,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6353 "util/configparser.c"
+#line 6389 "util/configparser.c"
break;
- case 507:
-#line 2600 "util/configparser.y"
+ case 511:
+#line 2615 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -6364,11 +6400,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6368 "util/configparser.c"
+#line 6404 "util/configparser.c"
break;
- case 508:
-#line 2612 "util/configparser.y"
+ case 512:
+#line 2627 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -6381,11 +6417,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6385 "util/configparser.c"
+#line 6421 "util/configparser.c"
break;
- case 509:
-#line 2626 "util/configparser.y"
+ case 513:
+#line 2641 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -6396,11 +6432,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6400 "util/configparser.c"
+#line 6436 "util/configparser.c"
break;
- case 510:
-#line 2638 "util/configparser.y"
+ case 514:
+#line 2653 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -6413,11 +6449,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6417 "util/configparser.c"
+#line 6453 "util/configparser.c"
break;
- case 511:
-#line 2652 "util/configparser.y"
+ case 515:
+#line 2667 "util/configparser.y"
{
OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(
@@ -6425,11 +6461,11 @@ yyreduce:
fatal_exit("out of memory adding "
"edns-client-string");
}
-#line 6429 "util/configparser.c"
+#line 6465 "util/configparser.c"
break;
- case 512:
-#line 2661 "util/configparser.y"
+ case 516:
+#line 2676 "util/configparser.y"
{
OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6440,11 +6476,11 @@ yyreduce:
free((yyvsp[0].str));
}
-#line 6444 "util/configparser.c"
+#line 6480 "util/configparser.c"
break;
- case 513:
-#line 2673 "util/configparser.y"
+ case 517:
+#line 2688 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -6453,31 +6489,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 6457 "util/configparser.c"
+#line 6493 "util/configparser.c"
break;
- case 514:
-#line 2683 "util/configparser.y"
+ case 518:
+#line 2698 "util/configparser.y"
{
OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6467 "util/configparser.c"
+#line 6503 "util/configparser.c"
break;
- case 515:
-#line 2690 "util/configparser.y"
+ case 519:
+#line 2705 "util/configparser.y"
{
OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6477 "util/configparser.c"
+#line 6513 "util/configparser.c"
break;
- case 516:
-#line 2697 "util/configparser.y"
+ case 520:
+#line 2712 "util/configparser.y"
{
OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6485,11 +6521,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6489 "util/configparser.c"
+#line 6525 "util/configparser.c"
break;
- case 517:
-#line 2706 "util/configparser.y"
+ case 521:
+#line 2721 "util/configparser.y"
{
OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6497,37 +6533,50 @@ yyreduce:
else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6501 "util/configparser.c"
+#line 6537 "util/configparser.c"
break;
- case 518:
-#line 2715 "util/configparser.y"
+ case 522:
+#line 2730 "util/configparser.y"
{
OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->ssl_upstream =
+ else cfg_parser->cfg->stubs->ssl_upstream =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6514 "util/configparser.c"
+#line 6550 "util/configparser.c"
break;
- case 519:
-#line 2725 "util/configparser.y"
+ case 523:
+#line 2740 "util/configparser.y"
+ {
+ OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->tcp_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6563 "util/configparser.c"
+ break;
+
+ case 524:
+#line 2750 "util/configparser.y"
{
OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->isprime =
+ else cfg_parser->cfg->stubs->isprime =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6527 "util/configparser.c"
+#line 6576 "util/configparser.c"
break;
- case 520:
-#line 2735 "util/configparser.y"
+ case 525:
+#line 2760 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -6536,31 +6585,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 6540 "util/configparser.c"
+#line 6589 "util/configparser.c"
break;
- case 521:
-#line 2745 "util/configparser.y"
+ case 526:
+#line 2770 "util/configparser.y"
{
OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6550 "util/configparser.c"
+#line 6599 "util/configparser.c"
break;
- case 522:
-#line 2752 "util/configparser.y"
+ case 527:
+#line 2777 "util/configparser.y"
{
OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6560 "util/configparser.c"
+#line 6609 "util/configparser.c"
break;
- case 523:
-#line 2759 "util/configparser.y"
+ case 528:
+#line 2784 "util/configparser.y"
{
OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6568,11 +6617,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6572 "util/configparser.c"
+#line 6621 "util/configparser.c"
break;
- case 524:
-#line 2768 "util/configparser.y"
+ case 529:
+#line 2793 "util/configparser.y"
{
OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6580,24 +6629,37 @@ yyreduce:
else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6584 "util/configparser.c"
+#line 6633 "util/configparser.c"
break;
- case 525:
-#line 2777 "util/configparser.y"
+ case 530:
+#line 2802 "util/configparser.y"
{
OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->forwards->ssl_upstream =
+ else cfg_parser->cfg->forwards->ssl_upstream =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6597 "util/configparser.c"
+#line 6646 "util/configparser.c"
break;
- case 526:
-#line 2787 "util/configparser.y"
+ case 531:
+#line 2812 "util/configparser.y"
+ {
+ OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->tcp_upstream =
+ (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 6659 "util/configparser.c"
+ break;
+
+ case 532:
+#line 2822 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->auths->name)
@@ -6606,52 +6668,52 @@ yyreduce:
free(cfg_parser->cfg->auths->name);
cfg_parser->cfg->auths->name = (yyvsp[0].str);
}
-#line 6610 "util/configparser.c"
+#line 6672 "util/configparser.c"
break;
- case 527:
-#line 2797 "util/configparser.y"
+ case 533:
+#line 2832 "util/configparser.y"
{
OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->zonefile);
cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
}
-#line 6620 "util/configparser.c"
+#line 6682 "util/configparser.c"
break;
- case 528:
-#line 2804 "util/configparser.y"
+ case 534:
+#line 2839 "util/configparser.y"
{
OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6630 "util/configparser.c"
+#line 6692 "util/configparser.c"
break;
- case 529:
-#line 2811 "util/configparser.y"
+ case 535:
+#line 2846 "util/configparser.y"
{
OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6640 "util/configparser.c"
+#line 6702 "util/configparser.c"
break;
- case 530:
-#line 2818 "util/configparser.y"
+ case 536:
+#line 2853 "util/configparser.y"
{
OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6651 "util/configparser.c"
+#line 6713 "util/configparser.c"
break;
- case 531:
-#line 2826 "util/configparser.y"
+ case 537:
+#line 2861 "util/configparser.y"
{
OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6660,11 +6722,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6664 "util/configparser.c"
+#line 6726 "util/configparser.c"
break;
- case 532:
-#line 2836 "util/configparser.y"
+ case 538:
+#line 2871 "util/configparser.y"
{
OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6673,11 +6735,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6677 "util/configparser.c"
+#line 6739 "util/configparser.c"
break;
- case 533:
-#line 2846 "util/configparser.y"
+ case 539:
+#line 2881 "util/configparser.y"
{
OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6686,11 +6748,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6690 "util/configparser.c"
+#line 6752 "util/configparser.c"
break;
- case 534:
-#line 2856 "util/configparser.y"
+ case 540:
+#line 2891 "util/configparser.y"
{
OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6699,11 +6761,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6703 "util/configparser.c"
+#line 6765 "util/configparser.c"
break;
- case 535:
-#line 2866 "util/configparser.y"
+ case 541:
+#line 2901 "util/configparser.y"
{
OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6712,11 +6774,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6716 "util/configparser.c"
+#line 6778 "util/configparser.c"
break;
- case 536:
-#line 2876 "util/configparser.y"
+ case 542:
+#line 2911 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -6725,11 +6787,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 6729 "util/configparser.c"
+#line 6791 "util/configparser.c"
break;
- case 537:
-#line 2886 "util/configparser.y"
+ case 543:
+#line 2921 "util/configparser.y"
{
OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -6769,16 +6831,16 @@ yyreduce:
#endif
} else {
if(!cfg_str2list_insert(
- &cfg_parser->cfg->views->local_zones,
+ &cfg_parser->cfg->views->local_zones,
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding local-zone");
}
}
-#line 6778 "util/configparser.c"
+#line 6840 "util/configparser.c"
break;
- case 538:
-#line 2932 "util/configparser.y"
+ case 544:
+#line 2967 "util/configparser.y"
{
OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -6787,33 +6849,33 @@ yyreduce:
fatal_exit("out of memory adding per-view "
"response-ip action");
}
-#line 6791 "util/configparser.c"
+#line 6853 "util/configparser.c"
break;
- case 539:
-#line 2942 "util/configparser.y"
+ case 545:
+#line 2977 "util/configparser.y"
{
OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip-data");
}
-#line 6802 "util/configparser.c"
+#line 6864 "util/configparser.c"
break;
- case 540:
-#line 2950 "util/configparser.y"
+ case 546:
+#line 2985 "util/configparser.y"
{
OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
fatal_exit("out of memory adding local-data");
}
}
-#line 6813 "util/configparser.c"
+#line 6875 "util/configparser.c"
break;
- case 541:
-#line 2958 "util/configparser.y"
+ case 547:
+#line 2993 "util/configparser.y"
{
char* ptr;
OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -6827,11 +6889,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 6831 "util/configparser.c"
+#line 6893 "util/configparser.c"
break;
- case 542:
-#line 2973 "util/configparser.y"
+ case 548:
+#line 3008 "util/configparser.y"
{
OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6839,32 +6901,32 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6843 "util/configparser.c"
+#line 6905 "util/configparser.c"
break;
- case 543:
-#line 2982 "util/configparser.y"
- {
- OUTYY(("\nP(remote-control:)\n"));
+ case 549:
+#line 3017 "util/configparser.y"
+ {
+ OUTYY(("\nP(remote-control:)\n"));
}
-#line 6851 "util/configparser.c"
+#line 6913 "util/configparser.c"
break;
- case 554:
-#line 2993 "util/configparser.y"
+ case 560:
+#line 3028 "util/configparser.y"
{
OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->remote_control_enable =
+ else cfg_parser->cfg->remote_control_enable =
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6864 "util/configparser.c"
+#line 6926 "util/configparser.c"
break;
- case 555:
-#line 3003 "util/configparser.y"
+ case 561:
+#line 3038 "util/configparser.y"
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6872,79 +6934,79 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6876 "util/configparser.c"
+#line 6938 "util/configparser.c"
break;
- case 556:
-#line 3012 "util/configparser.y"
+ case 562:
+#line 3047 "util/configparser.y"
{
OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6886 "util/configparser.c"
+#line 6948 "util/configparser.c"
break;
- case 557:
-#line 3019 "util/configparser.y"
+ case 563:
+#line 3054 "util/configparser.y"
{
OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6896 "util/configparser.c"
+#line 6958 "util/configparser.c"
break;
- case 558:
-#line 3026 "util/configparser.y"
+ case 564:
+#line 3061 "util/configparser.y"
{
OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_key_file);
cfg_parser->cfg->server_key_file = (yyvsp[0].str);
}
-#line 6906 "util/configparser.c"
+#line 6968 "util/configparser.c"
break;
- case 559:
-#line 3033 "util/configparser.y"
+ case 565:
+#line 3068 "util/configparser.y"
{
OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_cert_file);
cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
}
-#line 6916 "util/configparser.c"
+#line 6978 "util/configparser.c"
break;
- case 560:
-#line 3040 "util/configparser.y"
+ case 566:
+#line 3075 "util/configparser.y"
{
OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_key_file);
cfg_parser->cfg->control_key_file = (yyvsp[0].str);
}
-#line 6926 "util/configparser.c"
+#line 6988 "util/configparser.c"
break;
- case 561:
-#line 3047 "util/configparser.y"
+ case 567:
+#line 3082 "util/configparser.y"
{
OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_cert_file);
cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
}
-#line 6936 "util/configparser.c"
+#line 6998 "util/configparser.c"
break;
- case 562:
-#line 3054 "util/configparser.y"
+ case 568:
+#line 3089 "util/configparser.y"
{
OUTYY(("\nP(dnstap:)\n"));
}
-#line 6944 "util/configparser.c"
+#line 7006 "util/configparser.c"
break;
- case 584:
-#line 3074 "util/configparser.y"
+ case 590:
+#line 3109 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6952,11 +7014,11 @@ yyreduce:
else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6956 "util/configparser.c"
+#line 7018 "util/configparser.c"
break;
- case 585:
-#line 3083 "util/configparser.y"
+ case 591:
+#line 3118 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6965,31 +7027,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6969 "util/configparser.c"
+#line 7031 "util/configparser.c"
break;
- case 586:
-#line 3093 "util/configparser.y"
+ case 592:
+#line 3128 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_socket_path);
cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
}
-#line 6979 "util/configparser.c"
+#line 7041 "util/configparser.c"
break;
- case 587:
-#line 3100 "util/configparser.y"
+ case 593:
+#line 3135 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_ip);
cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
}
-#line 6989 "util/configparser.c"
+#line 7051 "util/configparser.c"
break;
- case 588:
-#line 3107 "util/configparser.y"
+ case 594:
+#line 3142 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6997,51 +7059,51 @@ yyreduce:
else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7001 "util/configparser.c"
+#line 7063 "util/configparser.c"
break;
- case 589:
-#line 3116 "util/configparser.y"
+ case 595:
+#line 3151 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_server_name);
cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
}
-#line 7011 "util/configparser.c"
+#line 7073 "util/configparser.c"
break;
- case 590:
-#line 3123 "util/configparser.y"
+ case 596:
+#line 3158 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_cert_bundle);
cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
}
-#line 7021 "util/configparser.c"
+#line 7083 "util/configparser.c"
break;
- case 591:
-#line 3130 "util/configparser.y"
+ case 597:
+#line 3165 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_client_key_file);
cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
}
-#line 7031 "util/configparser.c"
+#line 7093 "util/configparser.c"
break;
- case 592:
-#line 3137 "util/configparser.y"
+ case 598:
+#line 3172 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_client_cert_file);
cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
}
-#line 7041 "util/configparser.c"
+#line 7103 "util/configparser.c"
break;
- case 593:
-#line 3144 "util/configparser.y"
+ case 599:
+#line 3179 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7049,11 +7111,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7053 "util/configparser.c"
+#line 7115 "util/configparser.c"
break;
- case 594:
-#line 3153 "util/configparser.y"
+ case 600:
+#line 3188 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7061,31 +7123,31 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7065 "util/configparser.c"
+#line 7127 "util/configparser.c"
break;
- case 595:
-#line 3162 "util/configparser.y"
+ case 601:
+#line 3197 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_identity);
cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
}
-#line 7075 "util/configparser.c"
+#line 7137 "util/configparser.c"
break;
- case 596:
-#line 3169 "util/configparser.y"
+ case 602:
+#line 3204 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_version);
cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
}
-#line 7085 "util/configparser.c"
+#line 7147 "util/configparser.c"
break;
- case 597:
-#line 3176 "util/configparser.y"
+ case 603:
+#line 3211 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7094,11 +7156,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7098 "util/configparser.c"
+#line 7160 "util/configparser.c"
break;
- case 598:
-#line 3186 "util/configparser.y"
+ case 604:
+#line 3221 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7107,11 +7169,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7111 "util/configparser.c"
+#line 7173 "util/configparser.c"
break;
- case 599:
-#line 3196 "util/configparser.y"
+ case 605:
+#line 3231 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7120,11 +7182,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7124 "util/configparser.c"
+#line 7186 "util/configparser.c"
break;
- case 600:
-#line 3206 "util/configparser.y"
+ case 606:
+#line 3241 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7133,11 +7195,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7137 "util/configparser.c"
+#line 7199 "util/configparser.c"
break;
- case 601:
-#line 3216 "util/configparser.y"
+ case 607:
+#line 3251 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7146,11 +7208,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7150 "util/configparser.c"
+#line 7212 "util/configparser.c"
break;
- case 602:
-#line 3226 "util/configparser.y"
+ case 608:
+#line 3261 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7159,47 +7221,47 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7163 "util/configparser.c"
+#line 7225 "util/configparser.c"
break;
- case 603:
-#line 3236 "util/configparser.y"
- {
- OUTYY(("\nP(python:)\n"));
+ case 609:
+#line 3271 "util/configparser.y"
+ {
+ OUTYY(("\nP(python:)\n"));
}
-#line 7171 "util/configparser.c"
+#line 7233 "util/configparser.c"
break;
- case 607:
-#line 3245 "util/configparser.y"
+ case 613:
+#line 3280 "util/configparser.y"
{
OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 7181 "util/configparser.c"
+#line 7243 "util/configparser.c"
break;
- case 608:
-#line 3251 "util/configparser.y"
+ case 614:
+#line 3286 "util/configparser.y"
{
OUTYY(("\nP(dynlib:)\n"));
}
-#line 7189 "util/configparser.c"
+#line 7251 "util/configparser.c"
break;
- case 612:
-#line 3260 "util/configparser.y"
+ case 618:
+#line 3295 "util/configparser.y"
{
OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 7199 "util/configparser.c"
+#line 7261 "util/configparser.c"
break;
- case 613:
-#line 3266 "util/configparser.y"
+ case 619:
+#line 3301 "util/configparser.y"
{
OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7208,21 +7270,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7212 "util/configparser.c"
+#line 7274 "util/configparser.c"
break;
- case 614:
-#line 3276 "util/configparser.y"
+ case 620:
+#line 3311 "util/configparser.y"
{
OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->log_identity);
cfg_parser->cfg->log_identity = (yyvsp[0].str);
}
-#line 7222 "util/configparser.c"
+#line 7284 "util/configparser.c"
break;
- case 615:
-#line 3283 "util/configparser.y"
+ case 621:
+#line 3318 "util/configparser.y"
{
OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -7230,30 +7292,30 @@ yyreduce:
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip");
}
-#line 7234 "util/configparser.c"
+#line 7296 "util/configparser.c"
break;
- case 616:
-#line 3292 "util/configparser.y"
+ case 622:
+#line 3327 "util/configparser.y"
{
OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip-data");
}
-#line 7245 "util/configparser.c"
+#line 7307 "util/configparser.c"
break;
- case 617:
-#line 3300 "util/configparser.y"
+ case 623:
+#line 3335 "util/configparser.y"
{
OUTYY(("\nP(dnscrypt:)\n"));
}
-#line 7253 "util/configparser.c"
+#line 7315 "util/configparser.c"
break;
- case 630:
-#line 3316 "util/configparser.y"
+ case 636:
+#line 3351 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7261,11 +7323,11 @@ yyreduce:
else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7265 "util/configparser.c"
+#line 7327 "util/configparser.c"
break;
- case 631:
-#line 3326 "util/configparser.y"
+ case 637:
+#line 3361 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -7273,21 +7335,21 @@ yyreduce:
else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7277 "util/configparser.c"
+#line 7339 "util/configparser.c"
break;
- case 632:
-#line 3335 "util/configparser.y"
+ case 638:
+#line 3370 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnscrypt_provider);
cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
}
-#line 7287 "util/configparser.c"
+#line 7349 "util/configparser.c"
break;
- case 633:
-#line 3342 "util/configparser.y"
+ case 639:
+#line 3377 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
@@ -7295,21 +7357,21 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert");
}
-#line 7299 "util/configparser.c"
+#line 7361 "util/configparser.c"
break;
- case 634:
-#line 3351 "util/configparser.y"
+ case 640:
+#line 3386 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
}
-#line 7309 "util/configparser.c"
+#line 7371 "util/configparser.c"
break;
- case 635:
-#line 3358 "util/configparser.y"
+ case 641:
+#line 3393 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
@@ -7317,73 +7379,73 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-secret-key");
}
-#line 7321 "util/configparser.c"
+#line 7383 "util/configparser.c"
break;
- case 636:
-#line 3367 "util/configparser.y"
+ case 642:
+#line 3402 "util/configparser.y"
{
- OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
- if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
- yyerror("memory size expected");
- free((yyvsp[0].str));
+ OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
}
-#line 7332 "util/configparser.c"
+#line 7394 "util/configparser.c"
break;
- case 637:
-#line 3375 "util/configparser.y"
+ case 643:
+#line 3410 "util/configparser.y"
{
- OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
- if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
- yyerror("must be a power of 2");
- }
- free((yyvsp[0].str));
+ OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
}
-#line 7348 "util/configparser.c"
+#line 7410 "util/configparser.c"
break;
- case 638:
-#line 3388 "util/configparser.y"
+ case 644:
+#line 3423 "util/configparser.y"
{
- OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
- if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
- yyerror("memory size expected");
- free((yyvsp[0].str));
+ OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
}
-#line 7359 "util/configparser.c"
+#line 7421 "util/configparser.c"
break;
- case 639:
-#line 3396 "util/configparser.y"
+ case 645:
+#line 3431 "util/configparser.y"
{
- OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
- if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
- yyerror("must be a power of 2");
- }
- free((yyvsp[0].str));
+ OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free((yyvsp[0].str));
}
-#line 7375 "util/configparser.c"
+#line 7437 "util/configparser.c"
break;
- case 640:
-#line 3409 "util/configparser.y"
+ case 646:
+#line 3444 "util/configparser.y"
{
OUTYY(("\nP(cachedb:)\n"));
}
-#line 7383 "util/configparser.c"
+#line 7445 "util/configparser.c"
break;
- case 649:
-#line 3420 "util/configparser.y"
+ case 655:
+#line 3455 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -7394,11 +7456,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7398 "util/configparser.c"
+#line 7460 "util/configparser.c"
break;
- case 650:
-#line 3432 "util/configparser.y"
+ case 656:
+#line 3467 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -7409,11 +7471,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7413 "util/configparser.c"
+#line 7475 "util/configparser.c"
break;
- case 651:
-#line 3444 "util/configparser.y"
+ case 657:
+#line 3479 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -7424,11 +7486,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7428 "util/configparser.c"
+#line 7490 "util/configparser.c"
break;
- case 652:
-#line 3456 "util/configparser.y"
+ case 658:
+#line 3491 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -7442,11 +7504,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7446 "util/configparser.c"
+#line 7508 "util/configparser.c"
break;
- case 653:
-#line 3471 "util/configparser.y"
+ case 659:
+#line 3506 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -7458,11 +7520,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7462 "util/configparser.c"
+#line 7524 "util/configparser.c"
break;
- case 654:
-#line 3484 "util/configparser.y"
+ case 660:
+#line 3519 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -7474,11 +7536,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7478 "util/configparser.c"
+#line 7540 "util/configparser.c"
break;
- case 655:
-#line 3497 "util/configparser.y"
+ case 661:
+#line 3532 "util/configparser.y"
{
OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if (atoi((yyvsp[0].str)) < 0)
@@ -7488,19 +7550,19 @@ yyreduce:
fatal_exit("out of memory adding tcp connection limit");
}
}
-#line 7492 "util/configparser.c"
+#line 7554 "util/configparser.c"
break;
- case 656:
-#line 3508 "util/configparser.y"
+ case 662:
+#line 3543 "util/configparser.y"
{
OUTYY(("\nP(ipset:)\n"));
}
-#line 7500 "util/configparser.c"
+#line 7562 "util/configparser.c"
break;
- case 661:
-#line 3517 "util/configparser.y"
+ case 667:
+#line 3552 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -7514,11 +7576,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7518 "util/configparser.c"
+#line 7580 "util/configparser.c"
break;
- case 662:
-#line 3532 "util/configparser.y"
+ case 668:
+#line 3567 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -7532,11 +7594,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7536 "util/configparser.c"
+#line 7598 "util/configparser.c"
break;
-#line 7540 "util/configparser.c"
+#line 7602 "util/configparser.c"
default: break;
}
@@ -7730,7 +7792,7 @@ yyreturn:
return yyresult;
}
-#line 3546 "util/configparser.y"
+#line 3581 "util/configparser.y"
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index 1c9ec0324ace..d8a1ec11a3a4 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -197,178 +197,181 @@ extern int yydebug;
VAR_STUB_SSL_UPSTREAM = 398, /* VAR_STUB_SSL_UPSTREAM */
VAR_FORWARD_SSL_UPSTREAM = 399, /* VAR_FORWARD_SSL_UPSTREAM */
VAR_TLS_CERT_BUNDLE = 400, /* VAR_TLS_CERT_BUNDLE */
- VAR_HTTPS_PORT = 401, /* VAR_HTTPS_PORT */
- VAR_HTTP_ENDPOINT = 402, /* VAR_HTTP_ENDPOINT */
- VAR_HTTP_MAX_STREAMS = 403, /* VAR_HTTP_MAX_STREAMS */
- VAR_HTTP_QUERY_BUFFER_SIZE = 404, /* VAR_HTTP_QUERY_BUFFER_SIZE */
- VAR_HTTP_RESPONSE_BUFFER_SIZE = 405, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
- VAR_HTTP_NODELAY = 406, /* VAR_HTTP_NODELAY */
- VAR_HTTP_NOTLS_DOWNSTREAM = 407, /* VAR_HTTP_NOTLS_DOWNSTREAM */
- VAR_STUB_FIRST = 408, /* VAR_STUB_FIRST */
- VAR_MINIMAL_RESPONSES = 409, /* VAR_MINIMAL_RESPONSES */
- VAR_RRSET_ROUNDROBIN = 410, /* VAR_RRSET_ROUNDROBIN */
- VAR_MAX_UDP_SIZE = 411, /* VAR_MAX_UDP_SIZE */
- VAR_DELAY_CLOSE = 412, /* VAR_DELAY_CLOSE */
- VAR_UDP_CONNECT = 413, /* VAR_UDP_CONNECT */
- VAR_UNBLOCK_LAN_ZONES = 414, /* VAR_UNBLOCK_LAN_ZONES */
- VAR_INSECURE_LAN_ZONES = 415, /* VAR_INSECURE_LAN_ZONES */
- VAR_INFRA_CACHE_MIN_RTT = 416, /* VAR_INFRA_CACHE_MIN_RTT */
- VAR_INFRA_KEEP_PROBING = 417, /* VAR_INFRA_KEEP_PROBING */
- VAR_DNS64_PREFIX = 418, /* VAR_DNS64_PREFIX */
- VAR_DNS64_SYNTHALL = 419, /* VAR_DNS64_SYNTHALL */
- VAR_DNS64_IGNORE_AAAA = 420, /* VAR_DNS64_IGNORE_AAAA */
- VAR_DNSTAP = 421, /* VAR_DNSTAP */
- VAR_DNSTAP_ENABLE = 422, /* VAR_DNSTAP_ENABLE */
- VAR_DNSTAP_SOCKET_PATH = 423, /* VAR_DNSTAP_SOCKET_PATH */
- VAR_DNSTAP_IP = 424, /* VAR_DNSTAP_IP */
- VAR_DNSTAP_TLS = 425, /* VAR_DNSTAP_TLS */
- VAR_DNSTAP_TLS_SERVER_NAME = 426, /* VAR_DNSTAP_TLS_SERVER_NAME */
- VAR_DNSTAP_TLS_CERT_BUNDLE = 427, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
- VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 428, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
- VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 429, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
- VAR_DNSTAP_SEND_IDENTITY = 430, /* VAR_DNSTAP_SEND_IDENTITY */
- VAR_DNSTAP_SEND_VERSION = 431, /* VAR_DNSTAP_SEND_VERSION */
- VAR_DNSTAP_BIDIRECTIONAL = 432, /* VAR_DNSTAP_BIDIRECTIONAL */
- VAR_DNSTAP_IDENTITY = 433, /* VAR_DNSTAP_IDENTITY */
- VAR_DNSTAP_VERSION = 434, /* VAR_DNSTAP_VERSION */
- VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- VAR_RESPONSE_IP_TAG = 441, /* VAR_RESPONSE_IP_TAG */
- VAR_RESPONSE_IP = 442, /* VAR_RESPONSE_IP */
- VAR_RESPONSE_IP_DATA = 443, /* VAR_RESPONSE_IP_DATA */
- VAR_HARDEN_ALGO_DOWNGRADE = 444, /* VAR_HARDEN_ALGO_DOWNGRADE */
- VAR_IP_TRANSPARENT = 445, /* VAR_IP_TRANSPARENT */
- VAR_IP_DSCP = 446, /* VAR_IP_DSCP */
- VAR_DISABLE_DNSSEC_LAME_CHECK = 447, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- VAR_IP_RATELIMIT = 448, /* VAR_IP_RATELIMIT */
- VAR_IP_RATELIMIT_SLABS = 449, /* VAR_IP_RATELIMIT_SLABS */
- VAR_IP_RATELIMIT_SIZE = 450, /* VAR_IP_RATELIMIT_SIZE */
- VAR_RATELIMIT = 451, /* VAR_RATELIMIT */
- VAR_RATELIMIT_SLABS = 452, /* VAR_RATELIMIT_SLABS */
- VAR_RATELIMIT_SIZE = 453, /* VAR_RATELIMIT_SIZE */
- VAR_RATELIMIT_FOR_DOMAIN = 454, /* VAR_RATELIMIT_FOR_DOMAIN */
- VAR_RATELIMIT_BELOW_DOMAIN = 455, /* VAR_RATELIMIT_BELOW_DOMAIN */
- VAR_IP_RATELIMIT_FACTOR = 456, /* VAR_IP_RATELIMIT_FACTOR */
- VAR_RATELIMIT_FACTOR = 457, /* VAR_RATELIMIT_FACTOR */
- VAR_SEND_CLIENT_SUBNET = 458, /* VAR_SEND_CLIENT_SUBNET */
- VAR_CLIENT_SUBNET_ZONE = 459, /* VAR_CLIENT_SUBNET_ZONE */
- VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 460, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- VAR_CLIENT_SUBNET_OPCODE = 461, /* VAR_CLIENT_SUBNET_OPCODE */
- VAR_MAX_CLIENT_SUBNET_IPV4 = 462, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- VAR_MAX_CLIENT_SUBNET_IPV6 = 463, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- VAR_MIN_CLIENT_SUBNET_IPV4 = 464, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- VAR_MIN_CLIENT_SUBNET_IPV6 = 465, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- VAR_MAX_ECS_TREE_SIZE_IPV4 = 466, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- VAR_MAX_ECS_TREE_SIZE_IPV6 = 467, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- VAR_CAPS_WHITELIST = 468, /* VAR_CAPS_WHITELIST */
- VAR_CACHE_MAX_NEGATIVE_TTL = 469, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- VAR_PERMIT_SMALL_HOLDDOWN = 470, /* VAR_PERMIT_SMALL_HOLDDOWN */
- VAR_QNAME_MINIMISATION = 471, /* VAR_QNAME_MINIMISATION */
- VAR_QNAME_MINIMISATION_STRICT = 472, /* VAR_QNAME_MINIMISATION_STRICT */
- VAR_IP_FREEBIND = 473, /* VAR_IP_FREEBIND */
- VAR_DEFINE_TAG = 474, /* VAR_DEFINE_TAG */
- VAR_LOCAL_ZONE_TAG = 475, /* VAR_LOCAL_ZONE_TAG */
- VAR_ACCESS_CONTROL_TAG = 476, /* VAR_ACCESS_CONTROL_TAG */
- VAR_LOCAL_ZONE_OVERRIDE = 477, /* VAR_LOCAL_ZONE_OVERRIDE */
- VAR_ACCESS_CONTROL_TAG_ACTION = 478, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- VAR_ACCESS_CONTROL_TAG_DATA = 479, /* VAR_ACCESS_CONTROL_TAG_DATA */
- VAR_VIEW = 480, /* VAR_VIEW */
- VAR_ACCESS_CONTROL_VIEW = 481, /* VAR_ACCESS_CONTROL_VIEW */
- VAR_VIEW_FIRST = 482, /* VAR_VIEW_FIRST */
- VAR_SERVE_EXPIRED = 483, /* VAR_SERVE_EXPIRED */
- VAR_SERVE_EXPIRED_TTL = 484, /* VAR_SERVE_EXPIRED_TTL */
- VAR_SERVE_EXPIRED_TTL_RESET = 485, /* VAR_SERVE_EXPIRED_TTL_RESET */
- VAR_SERVE_EXPIRED_REPLY_TTL = 486, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 487, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- VAR_SERVE_ORIGINAL_TTL = 488, /* VAR_SERVE_ORIGINAL_TTL */
- VAR_FAKE_DSA = 489, /* VAR_FAKE_DSA */
- VAR_FAKE_SHA1 = 490, /* VAR_FAKE_SHA1 */
- VAR_LOG_IDENTITY = 491, /* VAR_LOG_IDENTITY */
- VAR_HIDE_TRUSTANCHOR = 492, /* VAR_HIDE_TRUSTANCHOR */
- VAR_HIDE_HTTP_USER_AGENT = 493, /* VAR_HIDE_HTTP_USER_AGENT */
- VAR_HTTP_USER_AGENT = 494, /* VAR_HTTP_USER_AGENT */
- VAR_TRUST_ANCHOR_SIGNALING = 495, /* VAR_TRUST_ANCHOR_SIGNALING */
- VAR_AGGRESSIVE_NSEC = 496, /* VAR_AGGRESSIVE_NSEC */
- VAR_USE_SYSTEMD = 497, /* VAR_USE_SYSTEMD */
- VAR_SHM_ENABLE = 498, /* VAR_SHM_ENABLE */
- VAR_SHM_KEY = 499, /* VAR_SHM_KEY */
- VAR_ROOT_KEY_SENTINEL = 500, /* VAR_ROOT_KEY_SENTINEL */
- VAR_DNSCRYPT = 501, /* VAR_DNSCRYPT */
- VAR_DNSCRYPT_ENABLE = 502, /* VAR_DNSCRYPT_ENABLE */
- VAR_DNSCRYPT_PORT = 503, /* VAR_DNSCRYPT_PORT */
- VAR_DNSCRYPT_PROVIDER = 504, /* VAR_DNSCRYPT_PROVIDER */
- VAR_DNSCRYPT_SECRET_KEY = 505, /* VAR_DNSCRYPT_SECRET_KEY */
- VAR_DNSCRYPT_PROVIDER_CERT = 506, /* VAR_DNSCRYPT_PROVIDER_CERT */
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 507, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 508, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 509, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 510, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 511, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- VAR_PAD_RESPONSES = 512, /* VAR_PAD_RESPONSES */
- VAR_PAD_RESPONSES_BLOCK_SIZE = 513, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- VAR_PAD_QUERIES = 514, /* VAR_PAD_QUERIES */
- VAR_PAD_QUERIES_BLOCK_SIZE = 515, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- VAR_IPSECMOD_ENABLED = 516, /* VAR_IPSECMOD_ENABLED */
- VAR_IPSECMOD_HOOK = 517, /* VAR_IPSECMOD_HOOK */
- VAR_IPSECMOD_IGNORE_BOGUS = 518, /* VAR_IPSECMOD_IGNORE_BOGUS */
- VAR_IPSECMOD_MAX_TTL = 519, /* VAR_IPSECMOD_MAX_TTL */
- VAR_IPSECMOD_WHITELIST = 520, /* VAR_IPSECMOD_WHITELIST */
- VAR_IPSECMOD_STRICT = 521, /* VAR_IPSECMOD_STRICT */
- VAR_CACHEDB = 522, /* VAR_CACHEDB */
- VAR_CACHEDB_BACKEND = 523, /* VAR_CACHEDB_BACKEND */
- VAR_CACHEDB_SECRETSEED = 524, /* VAR_CACHEDB_SECRETSEED */
- VAR_CACHEDB_REDISHOST = 525, /* VAR_CACHEDB_REDISHOST */
- VAR_CACHEDB_REDISPORT = 526, /* VAR_CACHEDB_REDISPORT */
- VAR_CACHEDB_REDISTIMEOUT = 527, /* VAR_CACHEDB_REDISTIMEOUT */
- VAR_CACHEDB_REDISEXPIRERECORDS = 528, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 529, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- VAR_FOR_UPSTREAM = 530, /* VAR_FOR_UPSTREAM */
- VAR_AUTH_ZONE = 531, /* VAR_AUTH_ZONE */
- VAR_ZONEFILE = 532, /* VAR_ZONEFILE */
- VAR_MASTER = 533, /* VAR_MASTER */
- VAR_URL = 534, /* VAR_URL */
- VAR_FOR_DOWNSTREAM = 535, /* VAR_FOR_DOWNSTREAM */
- VAR_FALLBACK_ENABLED = 536, /* VAR_FALLBACK_ENABLED */
- VAR_TLS_ADDITIONAL_PORT = 537, /* VAR_TLS_ADDITIONAL_PORT */
- VAR_LOW_RTT = 538, /* VAR_LOW_RTT */
- VAR_LOW_RTT_PERMIL = 539, /* VAR_LOW_RTT_PERMIL */
- VAR_FAST_SERVER_PERMIL = 540, /* VAR_FAST_SERVER_PERMIL */
- VAR_FAST_SERVER_NUM = 541, /* VAR_FAST_SERVER_NUM */
- VAR_ALLOW_NOTIFY = 542, /* VAR_ALLOW_NOTIFY */
- VAR_TLS_WIN_CERT = 543, /* VAR_TLS_WIN_CERT */
- VAR_TCP_CONNECTION_LIMIT = 544, /* VAR_TCP_CONNECTION_LIMIT */
- VAR_FORWARD_NO_CACHE = 545, /* VAR_FORWARD_NO_CACHE */
- VAR_STUB_NO_CACHE = 546, /* VAR_STUB_NO_CACHE */
- VAR_LOG_SERVFAIL = 547, /* VAR_LOG_SERVFAIL */
- VAR_DENY_ANY = 548, /* VAR_DENY_ANY */
- VAR_UNKNOWN_SERVER_TIME_LIMIT = 549, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- VAR_LOG_TAG_QUERYREPLY = 550, /* VAR_LOG_TAG_QUERYREPLY */
- VAR_STREAM_WAIT_SIZE = 551, /* VAR_STREAM_WAIT_SIZE */
- VAR_TLS_CIPHERS = 552, /* VAR_TLS_CIPHERS */
- VAR_TLS_CIPHERSUITES = 553, /* VAR_TLS_CIPHERSUITES */
- VAR_TLS_USE_SNI = 554, /* VAR_TLS_USE_SNI */
- VAR_IPSET = 555, /* VAR_IPSET */
- VAR_IPSET_NAME_V4 = 556, /* VAR_IPSET_NAME_V4 */
- VAR_IPSET_NAME_V6 = 557, /* VAR_IPSET_NAME_V6 */
- VAR_TLS_SESSION_TICKET_KEYS = 558, /* VAR_TLS_SESSION_TICKET_KEYS */
- VAR_RPZ = 559, /* VAR_RPZ */
- VAR_TAGS = 560, /* VAR_TAGS */
- VAR_RPZ_ACTION_OVERRIDE = 561, /* VAR_RPZ_ACTION_OVERRIDE */
- VAR_RPZ_CNAME_OVERRIDE = 562, /* VAR_RPZ_CNAME_OVERRIDE */
- VAR_RPZ_LOG = 563, /* VAR_RPZ_LOG */
- VAR_RPZ_LOG_NAME = 564, /* VAR_RPZ_LOG_NAME */
- VAR_DYNLIB = 565, /* VAR_DYNLIB */
- VAR_DYNLIB_FILE = 566, /* VAR_DYNLIB_FILE */
- VAR_EDNS_CLIENT_STRING = 567, /* VAR_EDNS_CLIENT_STRING */
- VAR_EDNS_CLIENT_STRING_OPCODE = 568, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- VAR_NSID = 569, /* VAR_NSID */
- VAR_ZONEMD_PERMISSIVE_MODE = 570, /* VAR_ZONEMD_PERMISSIVE_MODE */
- VAR_ZONEMD_CHECK = 571, /* VAR_ZONEMD_CHECK */
- VAR_ZONEMD_REJECT_ABSENCE = 572 /* VAR_ZONEMD_REJECT_ABSENCE */
+ VAR_STUB_TCP_UPSTREAM = 401, /* VAR_STUB_TCP_UPSTREAM */
+ VAR_FORWARD_TCP_UPSTREAM = 402, /* VAR_FORWARD_TCP_UPSTREAM */
+ VAR_HTTPS_PORT = 403, /* VAR_HTTPS_PORT */
+ VAR_HTTP_ENDPOINT = 404, /* VAR_HTTP_ENDPOINT */
+ VAR_HTTP_MAX_STREAMS = 405, /* VAR_HTTP_MAX_STREAMS */
+ VAR_HTTP_QUERY_BUFFER_SIZE = 406, /* VAR_HTTP_QUERY_BUFFER_SIZE */
+ VAR_HTTP_RESPONSE_BUFFER_SIZE = 407, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
+ VAR_HTTP_NODELAY = 408, /* VAR_HTTP_NODELAY */
+ VAR_HTTP_NOTLS_DOWNSTREAM = 409, /* VAR_HTTP_NOTLS_DOWNSTREAM */
+ VAR_STUB_FIRST = 410, /* VAR_STUB_FIRST */
+ VAR_MINIMAL_RESPONSES = 411, /* VAR_MINIMAL_RESPONSES */
+ VAR_RRSET_ROUNDROBIN = 412, /* VAR_RRSET_ROUNDROBIN */
+ VAR_MAX_UDP_SIZE = 413, /* VAR_MAX_UDP_SIZE */
+ VAR_DELAY_CLOSE = 414, /* VAR_DELAY_CLOSE */
+ VAR_UDP_CONNECT = 415, /* VAR_UDP_CONNECT */
+ VAR_UNBLOCK_LAN_ZONES = 416, /* VAR_UNBLOCK_LAN_ZONES */
+ VAR_INSECURE_LAN_ZONES = 417, /* VAR_INSECURE_LAN_ZONES */
+ VAR_INFRA_CACHE_MIN_RTT = 418, /* VAR_INFRA_CACHE_MIN_RTT */
+ VAR_INFRA_KEEP_PROBING = 419, /* VAR_INFRA_KEEP_PROBING */
+ VAR_DNS64_PREFIX = 420, /* VAR_DNS64_PREFIX */
+ VAR_DNS64_SYNTHALL = 421, /* VAR_DNS64_SYNTHALL */
+ VAR_DNS64_IGNORE_AAAA = 422, /* VAR_DNS64_IGNORE_AAAA */
+ VAR_DNSTAP = 423, /* VAR_DNSTAP */
+ VAR_DNSTAP_ENABLE = 424, /* VAR_DNSTAP_ENABLE */
+ VAR_DNSTAP_SOCKET_PATH = 425, /* VAR_DNSTAP_SOCKET_PATH */
+ VAR_DNSTAP_IP = 426, /* VAR_DNSTAP_IP */
+ VAR_DNSTAP_TLS = 427, /* VAR_DNSTAP_TLS */
+ VAR_DNSTAP_TLS_SERVER_NAME = 428, /* VAR_DNSTAP_TLS_SERVER_NAME */
+ VAR_DNSTAP_TLS_CERT_BUNDLE = 429, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
+ VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
+ VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
+ VAR_DNSTAP_SEND_IDENTITY = 432, /* VAR_DNSTAP_SEND_IDENTITY */
+ VAR_DNSTAP_SEND_VERSION = 433, /* VAR_DNSTAP_SEND_VERSION */
+ VAR_DNSTAP_BIDIRECTIONAL = 434, /* VAR_DNSTAP_BIDIRECTIONAL */
+ VAR_DNSTAP_IDENTITY = 435, /* VAR_DNSTAP_IDENTITY */
+ VAR_DNSTAP_VERSION = 436, /* VAR_DNSTAP_VERSION */
+ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
+ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
+ VAR_RESPONSE_IP_TAG = 443, /* VAR_RESPONSE_IP_TAG */
+ VAR_RESPONSE_IP = 444, /* VAR_RESPONSE_IP */
+ VAR_RESPONSE_IP_DATA = 445, /* VAR_RESPONSE_IP_DATA */
+ VAR_HARDEN_ALGO_DOWNGRADE = 446, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ VAR_IP_TRANSPARENT = 447, /* VAR_IP_TRANSPARENT */
+ VAR_IP_DSCP = 448, /* VAR_IP_DSCP */
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 449, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ VAR_IP_RATELIMIT = 450, /* VAR_IP_RATELIMIT */
+ VAR_IP_RATELIMIT_SLABS = 451, /* VAR_IP_RATELIMIT_SLABS */
+ VAR_IP_RATELIMIT_SIZE = 452, /* VAR_IP_RATELIMIT_SIZE */
+ VAR_RATELIMIT = 453, /* VAR_RATELIMIT */
+ VAR_RATELIMIT_SLABS = 454, /* VAR_RATELIMIT_SLABS */
+ VAR_RATELIMIT_SIZE = 455, /* VAR_RATELIMIT_SIZE */
+ VAR_OUTBOUND_MSG_RETRY = 456, /* VAR_OUTBOUND_MSG_RETRY */
+ VAR_RATELIMIT_FOR_DOMAIN = 457, /* VAR_RATELIMIT_FOR_DOMAIN */
+ VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */
+ VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */
+ VAR_SEND_CLIENT_SUBNET = 461, /* VAR_SEND_CLIENT_SUBNET */
+ VAR_CLIENT_SUBNET_ZONE = 462, /* VAR_CLIENT_SUBNET_ZONE */
+ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 463, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ VAR_CLIENT_SUBNET_OPCODE = 464, /* VAR_CLIENT_SUBNET_OPCODE */
+ VAR_MAX_CLIENT_SUBNET_IPV4 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ VAR_MAX_CLIENT_SUBNET_IPV6 = 466, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 468, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 470, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ VAR_CAPS_WHITELIST = 471, /* VAR_CAPS_WHITELIST */
+ VAR_CACHE_MAX_NEGATIVE_TTL = 472, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ VAR_PERMIT_SMALL_HOLDDOWN = 473, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ VAR_QNAME_MINIMISATION = 474, /* VAR_QNAME_MINIMISATION */
+ VAR_QNAME_MINIMISATION_STRICT = 475, /* VAR_QNAME_MINIMISATION_STRICT */
+ VAR_IP_FREEBIND = 476, /* VAR_IP_FREEBIND */
+ VAR_DEFINE_TAG = 477, /* VAR_DEFINE_TAG */
+ VAR_LOCAL_ZONE_TAG = 478, /* VAR_LOCAL_ZONE_TAG */
+ VAR_ACCESS_CONTROL_TAG = 479, /* VAR_ACCESS_CONTROL_TAG */
+ VAR_LOCAL_ZONE_OVERRIDE = 480, /* VAR_LOCAL_ZONE_OVERRIDE */
+ VAR_ACCESS_CONTROL_TAG_ACTION = 481, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ VAR_ACCESS_CONTROL_TAG_DATA = 482, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ VAR_VIEW = 483, /* VAR_VIEW */
+ VAR_ACCESS_CONTROL_VIEW = 484, /* VAR_ACCESS_CONTROL_VIEW */
+ VAR_VIEW_FIRST = 485, /* VAR_VIEW_FIRST */
+ VAR_SERVE_EXPIRED = 486, /* VAR_SERVE_EXPIRED */
+ VAR_SERVE_EXPIRED_TTL = 487, /* VAR_SERVE_EXPIRED_TTL */
+ VAR_SERVE_EXPIRED_TTL_RESET = 488, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ VAR_SERVE_EXPIRED_REPLY_TTL = 489, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 490, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ VAR_SERVE_ORIGINAL_TTL = 491, /* VAR_SERVE_ORIGINAL_TTL */
+ VAR_FAKE_DSA = 492, /* VAR_FAKE_DSA */
+ VAR_FAKE_SHA1 = 493, /* VAR_FAKE_SHA1 */
+ VAR_LOG_IDENTITY = 494, /* VAR_LOG_IDENTITY */
+ VAR_HIDE_TRUSTANCHOR = 495, /* VAR_HIDE_TRUSTANCHOR */
+ VAR_HIDE_HTTP_USER_AGENT = 496, /* VAR_HIDE_HTTP_USER_AGENT */
+ VAR_HTTP_USER_AGENT = 497, /* VAR_HTTP_USER_AGENT */
+ VAR_TRUST_ANCHOR_SIGNALING = 498, /* VAR_TRUST_ANCHOR_SIGNALING */
+ VAR_AGGRESSIVE_NSEC = 499, /* VAR_AGGRESSIVE_NSEC */
+ VAR_USE_SYSTEMD = 500, /* VAR_USE_SYSTEMD */
+ VAR_SHM_ENABLE = 501, /* VAR_SHM_ENABLE */
+ VAR_SHM_KEY = 502, /* VAR_SHM_KEY */
+ VAR_ROOT_KEY_SENTINEL = 503, /* VAR_ROOT_KEY_SENTINEL */
+ VAR_DNSCRYPT = 504, /* VAR_DNSCRYPT */
+ VAR_DNSCRYPT_ENABLE = 505, /* VAR_DNSCRYPT_ENABLE */
+ VAR_DNSCRYPT_PORT = 506, /* VAR_DNSCRYPT_PORT */
+ VAR_DNSCRYPT_PROVIDER = 507, /* VAR_DNSCRYPT_PROVIDER */
+ VAR_DNSCRYPT_SECRET_KEY = 508, /* VAR_DNSCRYPT_SECRET_KEY */
+ VAR_DNSCRYPT_PROVIDER_CERT = 509, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 510, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 512, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 514, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ VAR_PAD_RESPONSES = 515, /* VAR_PAD_RESPONSES */
+ VAR_PAD_RESPONSES_BLOCK_SIZE = 516, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ VAR_PAD_QUERIES = 517, /* VAR_PAD_QUERIES */
+ VAR_PAD_QUERIES_BLOCK_SIZE = 518, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ VAR_IPSECMOD_ENABLED = 519, /* VAR_IPSECMOD_ENABLED */
+ VAR_IPSECMOD_HOOK = 520, /* VAR_IPSECMOD_HOOK */
+ VAR_IPSECMOD_IGNORE_BOGUS = 521, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ VAR_IPSECMOD_MAX_TTL = 522, /* VAR_IPSECMOD_MAX_TTL */
+ VAR_IPSECMOD_WHITELIST = 523, /* VAR_IPSECMOD_WHITELIST */
+ VAR_IPSECMOD_STRICT = 524, /* VAR_IPSECMOD_STRICT */
+ VAR_CACHEDB = 525, /* VAR_CACHEDB */
+ VAR_CACHEDB_BACKEND = 526, /* VAR_CACHEDB_BACKEND */
+ VAR_CACHEDB_SECRETSEED = 527, /* VAR_CACHEDB_SECRETSEED */
+ VAR_CACHEDB_REDISHOST = 528, /* VAR_CACHEDB_REDISHOST */
+ VAR_CACHEDB_REDISPORT = 529, /* VAR_CACHEDB_REDISPORT */
+ VAR_CACHEDB_REDISTIMEOUT = 530, /* VAR_CACHEDB_REDISTIMEOUT */
+ VAR_CACHEDB_REDISEXPIRERECORDS = 531, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 532, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ VAR_FOR_UPSTREAM = 533, /* VAR_FOR_UPSTREAM */
+ VAR_AUTH_ZONE = 534, /* VAR_AUTH_ZONE */
+ VAR_ZONEFILE = 535, /* VAR_ZONEFILE */
+ VAR_MASTER = 536, /* VAR_MASTER */
+ VAR_URL = 537, /* VAR_URL */
+ VAR_FOR_DOWNSTREAM = 538, /* VAR_FOR_DOWNSTREAM */
+ VAR_FALLBACK_ENABLED = 539, /* VAR_FALLBACK_ENABLED */
+ VAR_TLS_ADDITIONAL_PORT = 540, /* VAR_TLS_ADDITIONAL_PORT */
+ VAR_LOW_RTT = 541, /* VAR_LOW_RTT */
+ VAR_LOW_RTT_PERMIL = 542, /* VAR_LOW_RTT_PERMIL */
+ VAR_FAST_SERVER_PERMIL = 543, /* VAR_FAST_SERVER_PERMIL */
+ VAR_FAST_SERVER_NUM = 544, /* VAR_FAST_SERVER_NUM */
+ VAR_ALLOW_NOTIFY = 545, /* VAR_ALLOW_NOTIFY */
+ VAR_TLS_WIN_CERT = 546, /* VAR_TLS_WIN_CERT */
+ VAR_TCP_CONNECTION_LIMIT = 547, /* VAR_TCP_CONNECTION_LIMIT */
+ VAR_FORWARD_NO_CACHE = 548, /* VAR_FORWARD_NO_CACHE */
+ VAR_STUB_NO_CACHE = 549, /* VAR_STUB_NO_CACHE */
+ VAR_LOG_SERVFAIL = 550, /* VAR_LOG_SERVFAIL */
+ VAR_DENY_ANY = 551, /* VAR_DENY_ANY */
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 552, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ VAR_LOG_TAG_QUERYREPLY = 553, /* VAR_LOG_TAG_QUERYREPLY */
+ VAR_STREAM_WAIT_SIZE = 554, /* VAR_STREAM_WAIT_SIZE */
+ VAR_TLS_CIPHERS = 555, /* VAR_TLS_CIPHERS */
+ VAR_TLS_CIPHERSUITES = 556, /* VAR_TLS_CIPHERSUITES */
+ VAR_TLS_USE_SNI = 557, /* VAR_TLS_USE_SNI */
+ VAR_IPSET = 558, /* VAR_IPSET */
+ VAR_IPSET_NAME_V4 = 559, /* VAR_IPSET_NAME_V4 */
+ VAR_IPSET_NAME_V6 = 560, /* VAR_IPSET_NAME_V6 */
+ VAR_TLS_SESSION_TICKET_KEYS = 561, /* VAR_TLS_SESSION_TICKET_KEYS */
+ VAR_RPZ = 562, /* VAR_RPZ */
+ VAR_TAGS = 563, /* VAR_TAGS */
+ VAR_RPZ_ACTION_OVERRIDE = 564, /* VAR_RPZ_ACTION_OVERRIDE */
+ VAR_RPZ_CNAME_OVERRIDE = 565, /* VAR_RPZ_CNAME_OVERRIDE */
+ VAR_RPZ_LOG = 566, /* VAR_RPZ_LOG */
+ VAR_RPZ_LOG_NAME = 567, /* VAR_RPZ_LOG_NAME */
+ VAR_DYNLIB = 568, /* VAR_DYNLIB */
+ VAR_DYNLIB_FILE = 569, /* VAR_DYNLIB_FILE */
+ VAR_EDNS_CLIENT_STRING = 570, /* VAR_EDNS_CLIENT_STRING */
+ VAR_EDNS_CLIENT_STRING_OPCODE = 571, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ VAR_NSID = 572, /* VAR_NSID */
+ VAR_ZONEMD_PERMISSIVE_MODE = 573, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ VAR_ZONEMD_CHECK = 574, /* VAR_ZONEMD_CHECK */
+ VAR_ZONEMD_REJECT_ABSENCE = 575 /* VAR_ZONEMD_REJECT_ABSENCE */
};
typedef enum yytokentype yytoken_kind_t;
#endif
@@ -519,178 +522,181 @@ extern int yydebug;
#define VAR_STUB_SSL_UPSTREAM 398
#define VAR_FORWARD_SSL_UPSTREAM 399
#define VAR_TLS_CERT_BUNDLE 400
-#define VAR_HTTPS_PORT 401
-#define VAR_HTTP_ENDPOINT 402
-#define VAR_HTTP_MAX_STREAMS 403
-#define VAR_HTTP_QUERY_BUFFER_SIZE 404
-#define VAR_HTTP_RESPONSE_BUFFER_SIZE 405
-#define VAR_HTTP_NODELAY 406
-#define VAR_HTTP_NOTLS_DOWNSTREAM 407
-#define VAR_STUB_FIRST 408
-#define VAR_MINIMAL_RESPONSES 409
-#define VAR_RRSET_ROUNDROBIN 410
-#define VAR_MAX_UDP_SIZE 411
-#define VAR_DELAY_CLOSE 412
-#define VAR_UDP_CONNECT 413
-#define VAR_UNBLOCK_LAN_ZONES 414
-#define VAR_INSECURE_LAN_ZONES 415
-#define VAR_INFRA_CACHE_MIN_RTT 416
-#define VAR_INFRA_KEEP_PROBING 417
-#define VAR_DNS64_PREFIX 418
-#define VAR_DNS64_SYNTHALL 419
-#define VAR_DNS64_IGNORE_AAAA 420
-#define VAR_DNSTAP 421
-#define VAR_DNSTAP_ENABLE 422
-#define VAR_DNSTAP_SOCKET_PATH 423
-#define VAR_DNSTAP_IP 424
-#define VAR_DNSTAP_TLS 425
-#define VAR_DNSTAP_TLS_SERVER_NAME 426
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 427
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 428
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 429
-#define VAR_DNSTAP_SEND_IDENTITY 430
-#define VAR_DNSTAP_SEND_VERSION 431
-#define VAR_DNSTAP_BIDIRECTIONAL 432
-#define VAR_DNSTAP_IDENTITY 433
-#define VAR_DNSTAP_VERSION 434
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 435
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 436
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 437
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 438
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 439
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 440
-#define VAR_RESPONSE_IP_TAG 441
-#define VAR_RESPONSE_IP 442
-#define VAR_RESPONSE_IP_DATA 443
-#define VAR_HARDEN_ALGO_DOWNGRADE 444
-#define VAR_IP_TRANSPARENT 445
-#define VAR_IP_DSCP 446
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 447
-#define VAR_IP_RATELIMIT 448
-#define VAR_IP_RATELIMIT_SLABS 449
-#define VAR_IP_RATELIMIT_SIZE 450
-#define VAR_RATELIMIT 451
-#define VAR_RATELIMIT_SLABS 452
-#define VAR_RATELIMIT_SIZE 453
-#define VAR_RATELIMIT_FOR_DOMAIN 454
-#define VAR_RATELIMIT_BELOW_DOMAIN 455
-#define VAR_IP_RATELIMIT_FACTOR 456
-#define VAR_RATELIMIT_FACTOR 457
-#define VAR_SEND_CLIENT_SUBNET 458
-#define VAR_CLIENT_SUBNET_ZONE 459
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 460
-#define VAR_CLIENT_SUBNET_OPCODE 461
-#define VAR_MAX_CLIENT_SUBNET_IPV4 462
-#define VAR_MAX_CLIENT_SUBNET_IPV6 463
-#define VAR_MIN_CLIENT_SUBNET_IPV4 464
-#define VAR_MIN_CLIENT_SUBNET_IPV6 465
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 466
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 467
-#define VAR_CAPS_WHITELIST 468
-#define VAR_CACHE_MAX_NEGATIVE_TTL 469
-#define VAR_PERMIT_SMALL_HOLDDOWN 470
-#define VAR_QNAME_MINIMISATION 471
-#define VAR_QNAME_MINIMISATION_STRICT 472
-#define VAR_IP_FREEBIND 473
-#define VAR_DEFINE_TAG 474
-#define VAR_LOCAL_ZONE_TAG 475
-#define VAR_ACCESS_CONTROL_TAG 476
-#define VAR_LOCAL_ZONE_OVERRIDE 477
-#define VAR_ACCESS_CONTROL_TAG_ACTION 478
-#define VAR_ACCESS_CONTROL_TAG_DATA 479
-#define VAR_VIEW 480
-#define VAR_ACCESS_CONTROL_VIEW 481
-#define VAR_VIEW_FIRST 482
-#define VAR_SERVE_EXPIRED 483
-#define VAR_SERVE_EXPIRED_TTL 484
-#define VAR_SERVE_EXPIRED_TTL_RESET 485
-#define VAR_SERVE_EXPIRED_REPLY_TTL 486
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 487
-#define VAR_SERVE_ORIGINAL_TTL 488
-#define VAR_FAKE_DSA 489
-#define VAR_FAKE_SHA1 490
-#define VAR_LOG_IDENTITY 491
-#define VAR_HIDE_TRUSTANCHOR 492
-#define VAR_HIDE_HTTP_USER_AGENT 493
-#define VAR_HTTP_USER_AGENT 494
-#define VAR_TRUST_ANCHOR_SIGNALING 495
-#define VAR_AGGRESSIVE_NSEC 496
-#define VAR_USE_SYSTEMD 497
-#define VAR_SHM_ENABLE 498
-#define VAR_SHM_KEY 499
-#define VAR_ROOT_KEY_SENTINEL 500
-#define VAR_DNSCRYPT 501
-#define VAR_DNSCRYPT_ENABLE 502
-#define VAR_DNSCRYPT_PORT 503
-#define VAR_DNSCRYPT_PROVIDER 504
-#define VAR_DNSCRYPT_SECRET_KEY 505
-#define VAR_DNSCRYPT_PROVIDER_CERT 506
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 507
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 508
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 509
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 510
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 511
-#define VAR_PAD_RESPONSES 512
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 513
-#define VAR_PAD_QUERIES 514
-#define VAR_PAD_QUERIES_BLOCK_SIZE 515
-#define VAR_IPSECMOD_ENABLED 516
-#define VAR_IPSECMOD_HOOK 517
-#define VAR_IPSECMOD_IGNORE_BOGUS 518
-#define VAR_IPSECMOD_MAX_TTL 519
-#define VAR_IPSECMOD_WHITELIST 520
-#define VAR_IPSECMOD_STRICT 521
-#define VAR_CACHEDB 522
-#define VAR_CACHEDB_BACKEND 523
-#define VAR_CACHEDB_SECRETSEED 524
-#define VAR_CACHEDB_REDISHOST 525
-#define VAR_CACHEDB_REDISPORT 526
-#define VAR_CACHEDB_REDISTIMEOUT 527
-#define VAR_CACHEDB_REDISEXPIRERECORDS 528
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 529
-#define VAR_FOR_UPSTREAM 530
-#define VAR_AUTH_ZONE 531
-#define VAR_ZONEFILE 532
-#define VAR_MASTER 533
-#define VAR_URL 534
-#define VAR_FOR_DOWNSTREAM 535
-#define VAR_FALLBACK_ENABLED 536
-#define VAR_TLS_ADDITIONAL_PORT 537
-#define VAR_LOW_RTT 538
-#define VAR_LOW_RTT_PERMIL 539
-#define VAR_FAST_SERVER_PERMIL 540
-#define VAR_FAST_SERVER_NUM 541
-#define VAR_ALLOW_NOTIFY 542
-#define VAR_TLS_WIN_CERT 543
-#define VAR_TCP_CONNECTION_LIMIT 544
-#define VAR_FORWARD_NO_CACHE 545
-#define VAR_STUB_NO_CACHE 546
-#define VAR_LOG_SERVFAIL 547
-#define VAR_DENY_ANY 548
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 549
-#define VAR_LOG_TAG_QUERYREPLY 550
-#define VAR_STREAM_WAIT_SIZE 551
-#define VAR_TLS_CIPHERS 552
-#define VAR_TLS_CIPHERSUITES 553
-#define VAR_TLS_USE_SNI 554
-#define VAR_IPSET 555
-#define VAR_IPSET_NAME_V4 556
-#define VAR_IPSET_NAME_V6 557
-#define VAR_TLS_SESSION_TICKET_KEYS 558
-#define VAR_RPZ 559
-#define VAR_TAGS 560
-#define VAR_RPZ_ACTION_OVERRIDE 561
-#define VAR_RPZ_CNAME_OVERRIDE 562
-#define VAR_RPZ_LOG 563
-#define VAR_RPZ_LOG_NAME 564
-#define VAR_DYNLIB 565
-#define VAR_DYNLIB_FILE 566
-#define VAR_EDNS_CLIENT_STRING 567
-#define VAR_EDNS_CLIENT_STRING_OPCODE 568
-#define VAR_NSID 569
-#define VAR_ZONEMD_PERMISSIVE_MODE 570
-#define VAR_ZONEMD_CHECK 571
-#define VAR_ZONEMD_REJECT_ABSENCE 572
+#define VAR_STUB_TCP_UPSTREAM 401
+#define VAR_FORWARD_TCP_UPSTREAM 402
+#define VAR_HTTPS_PORT 403
+#define VAR_HTTP_ENDPOINT 404
+#define VAR_HTTP_MAX_STREAMS 405
+#define VAR_HTTP_QUERY_BUFFER_SIZE 406
+#define VAR_HTTP_RESPONSE_BUFFER_SIZE 407
+#define VAR_HTTP_NODELAY 408
+#define VAR_HTTP_NOTLS_DOWNSTREAM 409
+#define VAR_STUB_FIRST 410
+#define VAR_MINIMAL_RESPONSES 411
+#define VAR_RRSET_ROUNDROBIN 412
+#define VAR_MAX_UDP_SIZE 413
+#define VAR_DELAY_CLOSE 414
+#define VAR_UDP_CONNECT 415
+#define VAR_UNBLOCK_LAN_ZONES 416
+#define VAR_INSECURE_LAN_ZONES 417
+#define VAR_INFRA_CACHE_MIN_RTT 418
+#define VAR_INFRA_KEEP_PROBING 419
+#define VAR_DNS64_PREFIX 420
+#define VAR_DNS64_SYNTHALL 421
+#define VAR_DNS64_IGNORE_AAAA 422
+#define VAR_DNSTAP 423
+#define VAR_DNSTAP_ENABLE 424
+#define VAR_DNSTAP_SOCKET_PATH 425
+#define VAR_DNSTAP_IP 426
+#define VAR_DNSTAP_TLS 427
+#define VAR_DNSTAP_TLS_SERVER_NAME 428
+#define VAR_DNSTAP_TLS_CERT_BUNDLE 429
+#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430
+#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431
+#define VAR_DNSTAP_SEND_IDENTITY 432
+#define VAR_DNSTAP_SEND_VERSION 433
+#define VAR_DNSTAP_BIDIRECTIONAL 434
+#define VAR_DNSTAP_IDENTITY 435
+#define VAR_DNSTAP_VERSION 436
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442
+#define VAR_RESPONSE_IP_TAG 443
+#define VAR_RESPONSE_IP 444
+#define VAR_RESPONSE_IP_DATA 445
+#define VAR_HARDEN_ALGO_DOWNGRADE 446
+#define VAR_IP_TRANSPARENT 447
+#define VAR_IP_DSCP 448
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 449
+#define VAR_IP_RATELIMIT 450
+#define VAR_IP_RATELIMIT_SLABS 451
+#define VAR_IP_RATELIMIT_SIZE 452
+#define VAR_RATELIMIT 453
+#define VAR_RATELIMIT_SLABS 454
+#define VAR_RATELIMIT_SIZE 455
+#define VAR_OUTBOUND_MSG_RETRY 456
+#define VAR_RATELIMIT_FOR_DOMAIN 457
+#define VAR_RATELIMIT_BELOW_DOMAIN 458
+#define VAR_IP_RATELIMIT_FACTOR 459
+#define VAR_RATELIMIT_FACTOR 460
+#define VAR_SEND_CLIENT_SUBNET 461
+#define VAR_CLIENT_SUBNET_ZONE 462
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 463
+#define VAR_CLIENT_SUBNET_OPCODE 464
+#define VAR_MAX_CLIENT_SUBNET_IPV4 465
+#define VAR_MAX_CLIENT_SUBNET_IPV6 466
+#define VAR_MIN_CLIENT_SUBNET_IPV4 467
+#define VAR_MIN_CLIENT_SUBNET_IPV6 468
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 469
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 470
+#define VAR_CAPS_WHITELIST 471
+#define VAR_CACHE_MAX_NEGATIVE_TTL 472
+#define VAR_PERMIT_SMALL_HOLDDOWN 473
+#define VAR_QNAME_MINIMISATION 474
+#define VAR_QNAME_MINIMISATION_STRICT 475
+#define VAR_IP_FREEBIND 476
+#define VAR_DEFINE_TAG 477
+#define VAR_LOCAL_ZONE_TAG 478
+#define VAR_ACCESS_CONTROL_TAG 479
+#define VAR_LOCAL_ZONE_OVERRIDE 480
+#define VAR_ACCESS_CONTROL_TAG_ACTION 481
+#define VAR_ACCESS_CONTROL_TAG_DATA 482
+#define VAR_VIEW 483
+#define VAR_ACCESS_CONTROL_VIEW 484
+#define VAR_VIEW_FIRST 485
+#define VAR_SERVE_EXPIRED 486
+#define VAR_SERVE_EXPIRED_TTL 487
+#define VAR_SERVE_EXPIRED_TTL_RESET 488
+#define VAR_SERVE_EXPIRED_REPLY_TTL 489
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 490
+#define VAR_SERVE_ORIGINAL_TTL 491
+#define VAR_FAKE_DSA 492
+#define VAR_FAKE_SHA1 493
+#define VAR_LOG_IDENTITY 494
+#define VAR_HIDE_TRUSTANCHOR 495
+#define VAR_HIDE_HTTP_USER_AGENT 496
+#define VAR_HTTP_USER_AGENT 497
+#define VAR_TRUST_ANCHOR_SIGNALING 498
+#define VAR_AGGRESSIVE_NSEC 499
+#define VAR_USE_SYSTEMD 500
+#define VAR_SHM_ENABLE 501
+#define VAR_SHM_KEY 502
+#define VAR_ROOT_KEY_SENTINEL 503
+#define VAR_DNSCRYPT 504
+#define VAR_DNSCRYPT_ENABLE 505
+#define VAR_DNSCRYPT_PORT 506
+#define VAR_DNSCRYPT_PROVIDER 507
+#define VAR_DNSCRYPT_SECRET_KEY 508
+#define VAR_DNSCRYPT_PROVIDER_CERT 509
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 510
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 511
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 512
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 513
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 514
+#define VAR_PAD_RESPONSES 515
+#define VAR_PAD_RESPONSES_BLOCK_SIZE 516
+#define VAR_PAD_QUERIES 517
+#define VAR_PAD_QUERIES_BLOCK_SIZE 518
+#define VAR_IPSECMOD_ENABLED 519
+#define VAR_IPSECMOD_HOOK 520
+#define VAR_IPSECMOD_IGNORE_BOGUS 521
+#define VAR_IPSECMOD_MAX_TTL 522
+#define VAR_IPSECMOD_WHITELIST 523
+#define VAR_IPSECMOD_STRICT 524
+#define VAR_CACHEDB 525
+#define VAR_CACHEDB_BACKEND 526
+#define VAR_CACHEDB_SECRETSEED 527
+#define VAR_CACHEDB_REDISHOST 528
+#define VAR_CACHEDB_REDISPORT 529
+#define VAR_CACHEDB_REDISTIMEOUT 530
+#define VAR_CACHEDB_REDISEXPIRERECORDS 531
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 532
+#define VAR_FOR_UPSTREAM 533
+#define VAR_AUTH_ZONE 534
+#define VAR_ZONEFILE 535
+#define VAR_MASTER 536
+#define VAR_URL 537
+#define VAR_FOR_DOWNSTREAM 538
+#define VAR_FALLBACK_ENABLED 539
+#define VAR_TLS_ADDITIONAL_PORT 540
+#define VAR_LOW_RTT 541
+#define VAR_LOW_RTT_PERMIL 542
+#define VAR_FAST_SERVER_PERMIL 543
+#define VAR_FAST_SERVER_NUM 544
+#define VAR_ALLOW_NOTIFY 545
+#define VAR_TLS_WIN_CERT 546
+#define VAR_TCP_CONNECTION_LIMIT 547
+#define VAR_FORWARD_NO_CACHE 548
+#define VAR_STUB_NO_CACHE 549
+#define VAR_LOG_SERVFAIL 550
+#define VAR_DENY_ANY 551
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 552
+#define VAR_LOG_TAG_QUERYREPLY 553
+#define VAR_STREAM_WAIT_SIZE 554
+#define VAR_TLS_CIPHERS 555
+#define VAR_TLS_CIPHERSUITES 556
+#define VAR_TLS_USE_SNI 557
+#define VAR_IPSET 558
+#define VAR_IPSET_NAME_V4 559
+#define VAR_IPSET_NAME_V6 560
+#define VAR_TLS_SESSION_TICKET_KEYS 561
+#define VAR_RPZ 562
+#define VAR_TAGS 563
+#define VAR_RPZ_ACTION_OVERRIDE 564
+#define VAR_RPZ_CNAME_OVERRIDE 565
+#define VAR_RPZ_LOG 566
+#define VAR_RPZ_LOG_NAME 567
+#define VAR_DYNLIB 568
+#define VAR_DYNLIB_FILE 569
+#define VAR_EDNS_CLIENT_STRING 570
+#define VAR_EDNS_CLIENT_STRING_OPCODE 571
+#define VAR_NSID 572
+#define VAR_ZONEMD_PERMISSIVE_MODE 573
+#define VAR_ZONEMD_CHECK 574
+#define VAR_ZONEMD_REJECT_ABSENCE 575
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -700,7 +706,7 @@ union YYSTYPE
char* str;
-#line 704 "util/configparser.h"
+#line 710 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index e22d48d41055..1daf853d5749 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -4,24 +4,24 @@
* Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
*
* Copyright (c) 2007, NLnet Labs. All rights reserved.
- *
+ *
* This software is open source.
- *
+ *
* 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 NLNET LABS 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
@@ -88,13 +88,13 @@ extern struct config_parser_state* cfg_parser;
%token VAR_TRUST_ANCHOR_FILE VAR_TRUST_ANCHOR VAR_VAL_OVERRIDE_DATE
%token VAR_BOGUS_TTL VAR_VAL_CLEAN_ADDITIONAL VAR_VAL_PERMISSIVE_MODE
%token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE
-%token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE
-%token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG
+%token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE
+%token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG
%token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST
%token VAR_CACHE_MAX_TTL VAR_HARDEN_DNSSEC_STRIPPED VAR_ACCESS_CONTROL
%token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC
%token VAR_STATISTICS_INTERVAL VAR_DO_DAEMONIZE VAR_USE_CAPS_FOR_ID
-%token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT
+%token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT
%token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR
%token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS
%token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE
@@ -113,6 +113,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_SSL_UPSTREAM VAR_TCP_AUTH_QUERY_TIMEOUT VAR_SSL_SERVICE_KEY
%token VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE
+%token VAR_STUB_TCP_UPSTREAM VAR_FORWARD_TCP_UPSTREAM
%token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS
%token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE
%token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM
@@ -138,6 +139,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DISABLE_DNSSEC_LAME_CHECK
%token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE
%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
+%token VAR_OUTBOUND_MSG_RETRY
%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN
%token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR
%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE
@@ -189,7 +191,7 @@ extern struct config_parser_state* cfg_parser;
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
toplevelvar: serverstart contents_server | stubstart contents_stub |
- forwardstart contents_forward | pythonstart contents_py |
+ forwardstart contents_forward | pythonstart contents_py |
rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
dnscstart contents_dnsc | cachedbstart contents_cachedb |
ipsetstart contents_ipset | authstart contents_auth |
@@ -203,7 +205,7 @@ force_toplevel: VAR_FORCE_TOPLEVEL
;
/* server: declaration */
serverstart: VAR_SERVER
- {
+ {
OUTYY(("\nP(server:)\n"));
}
;
@@ -215,14 +217,14 @@ content_server: server_num_threads | server_verbosity | server_port |
server_do_udp | server_do_tcp |
server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout |
server_tcp_keepalive | server_tcp_keepalive_timeout |
- server_interface | server_chroot | server_username |
+ server_interface | server_chroot | server_username |
server_directory | server_logfile | server_pidfile |
server_msg_cache_size | server_msg_cache_slabs |
- server_num_queries_per_thread | server_rrset_cache_size |
- server_rrset_cache_slabs | server_outgoing_num_tcp |
- server_infra_host_ttl | server_infra_lame_ttl |
+ server_num_queries_per_thread | server_rrset_cache_size |
+ server_rrset_cache_slabs | server_outgoing_num_tcp |
+ server_infra_host_ttl | server_infra_lame_ttl |
server_infra_cache_slabs | server_infra_cache_numhosts |
- server_infra_cache_lame_size | server_target_fetch_policy |
+ server_infra_cache_lame_size | server_target_fetch_policy |
server_harden_short_bufsize | server_harden_large_queries |
server_do_not_query_address | server_hide_identity |
server_hide_version | server_identity | server_version |
@@ -230,22 +232,22 @@ content_server: server_num_threads | server_verbosity | server_port |
server_harden_glue | server_module_conf | server_trust_anchor_file |
server_trust_anchor | server_val_override_date | server_bogus_ttl |
server_val_clean_additional | server_val_permissive_mode |
- server_incoming_num_tcp | server_msg_buffer_size |
- server_key_cache_size | server_key_cache_slabs |
+ server_incoming_num_tcp | server_msg_buffer_size |
+ server_key_cache_size | server_key_cache_slabs |
server_trusted_keys_file | server_val_nsec3_keysize_iterations |
server_use_syslog | server_outgoing_interface | server_root_hints |
server_do_not_query_localhost | server_cache_max_ttl |
server_harden_dnssec_stripped | server_access_control |
server_local_zone | server_local_data | server_interface_automatic |
- server_statistics_interval | server_do_daemonize |
+ server_statistics_interval | server_do_daemonize |
server_use_caps_for_id | server_statistics_cumulative |
server_outgoing_port_permit | server_outgoing_port_avoid |
server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size |
server_harden_referral_path | server_private_address |
- server_private_domain | server_extended_statistics |
- server_local_data_ptr | server_jostle_timeout |
- server_unwanted_reply_threshold | server_log_time_ascii |
- server_domain_insecure | server_val_sig_skew_min |
+ server_private_domain | server_extended_statistics |
+ server_local_data_ptr | server_jostle_timeout |
+ server_unwanted_reply_threshold | server_log_time_ascii |
+ server_domain_insecure | server_val_sig_skew_min |
server_val_sig_skew_max | server_val_max_restart |
server_cache_min_ttl | server_val_log_level |
server_auto_trust_anchor_file | server_add_holddown |
@@ -269,9 +271,9 @@ content_server: server_num_threads | server_verbosity | server_port |
server_ip_ratelimit_size | server_ratelimit_size |
server_ratelimit_for_domain |
server_ratelimit_below_domain | server_ratelimit_factor |
- server_ip_ratelimit_factor | server_send_client_subnet |
- server_client_subnet_zone | server_client_subnet_always_forward |
- server_client_subnet_opcode |
+ server_ip_ratelimit_factor | server_outbound_msg_retry |
+ server_send_client_subnet | server_client_subnet_zone |
+ server_client_subnet_always_forward | server_client_subnet_opcode |
server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 |
server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 |
server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 |
@@ -312,52 +314,55 @@ content_server: server_num_threads | server_verbosity | server_port |
stubstart: VAR_STUB_ZONE
{
struct config_stub* s;
- OUTYY(("\nP(stub_zone:)\n"));
+ OUTYY(("\nP(stub_zone:)\n"));
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->stubs;
cfg_parser->cfg->stubs = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
;
-contents_stub: contents_stub content_stub
+contents_stub: contents_stub content_stub
| ;
content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first |
- stub_no_cache | stub_ssl_upstream
+ stub_no_cache | stub_ssl_upstream | stub_tcp_upstream
;
forwardstart: VAR_FORWARD_ZONE
{
struct config_stub* s;
- OUTYY(("\nP(forward_zone:)\n"));
+ OUTYY(("\nP(forward_zone:)\n"));
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->forwards;
cfg_parser->cfg->forwards = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
;
-contents_forward: contents_forward content_forward
+contents_forward: contents_forward content_forward
| ;
content_forward: forward_name | forward_host | forward_addr | forward_first |
- forward_no_cache | forward_ssl_upstream
+ forward_no_cache | forward_ssl_upstream | forward_tcp_upstream
;
viewstart: VAR_VIEW
{
struct config_view* s;
- OUTYY(("\nP(view:)\n"));
+ OUTYY(("\nP(view:)\n"));
s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) {
s->next = cfg_parser->cfg->views;
if(s->next && !s->next->name)
yyerror("view without name");
cfg_parser->cfg->views = s;
- } else
+ } else {
yyerror("out of memory");
+ }
}
;
-contents_view: contents_view content_view
+contents_view: contents_view content_view
| ;
content_view: view_name | view_local_zone | view_local_data | view_first |
view_response_ip | view_response_ip_data | view_local_data_ptr
@@ -365,7 +370,7 @@ content_view: view_name | view_local_zone | view_local_data | view_first |
authstart: VAR_AUTH_ZONE
{
struct config_auth* s;
- OUTYY(("\nP(auth_zone:)\n"));
+ OUTYY(("\nP(auth_zone:)\n"));
s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) {
s->next = cfg_parser->cfg->auths;
@@ -377,11 +382,12 @@ authstart: VAR_AUTH_ZONE
s->zonemd_check = 0;
s->zonemd_reject_absence = 0;
s->isrpz = 0;
- } else
+ } else {
yyerror("out of memory");
+ }
}
;
-contents_auth: contents_auth content_auth
+contents_auth: contents_auth content_auth
| ;
content_auth: auth_name | auth_zonefile | auth_master | auth_url |
auth_for_downstream | auth_for_upstream | auth_fallback_enabled |
@@ -463,8 +469,9 @@ rpzstart: VAR_RPZ
s->for_upstream = 0;
s->fallback_enabled = 0;
s->isrpz = 1;
- } else
+ } else {
yyerror("out of memory");
+ }
}
;
contents_rpz: contents_rpz content_rpz
@@ -473,27 +480,27 @@ content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url |
auth_allow_notify | rpz_action_override | rpz_cname_override |
rpz_log | rpz_log_name
;
-server_num_threads: VAR_NUM_THREADS STRING_ARG
- {
- OUTYY(("P(server_num_threads:%s)\n", $2));
+server_num_threads: VAR_NUM_THREADS STRING_ARG
+ {
+ OUTYY(("P(server_num_threads:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->num_threads = atoi($2);
free($2);
}
;
-server_verbosity: VAR_VERBOSITY STRING_ARG
- {
- OUTYY(("P(server_verbosity:%s)\n", $2));
+server_verbosity: VAR_VERBOSITY STRING_ARG
+ {
+ OUTYY(("P(server_verbosity:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->verbosity = atoi($2);
free($2);
}
;
-server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG
- {
- OUTYY(("P(server_statistics_interval:%s)\n", $2));
+server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG
+ {
+ OUTYY(("P(server_statistics_interval:%s)\n", $2));
if(strcmp($2, "") == 0 || strcmp($2, "0") == 0)
cfg_parser->cfg->stat_interval = 0;
else if(atoi($2) == 0)
@@ -529,9 +536,9 @@ server_shm_enable: VAR_SHM_ENABLE STRING_ARG
free($2);
}
;
-server_shm_key: VAR_SHM_KEY STRING_ARG
- {
- OUTYY(("P(server_shm_key:%s)\n", $2));
+server_shm_key: VAR_SHM_KEY STRING_ARG
+ {
+ OUTYY(("P(server_shm_key:%s)\n", $2));
if(strcmp($2, "") == 0 || strcmp($2, "0") == 0)
cfg_parser->cfg->shm_key = 0;
else if(atoi($2) == 0)
@@ -704,7 +711,7 @@ server_interface: VAR_INTERFACE STRING_ARG
OUTYY(("P(server_interface:%s)\n", $2));
if(cfg_parser->cfg->num_ifs == 0)
cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
+ else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
(cfg_parser->cfg->num_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->ifs)
yyerror("out of memory");
@@ -717,8 +724,8 @@ server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG
OUTYY(("P(server_outgoing_interface:%s)\n", $2));
if(cfg_parser->cfg->num_out_ifs == 0)
cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
- else cfg_parser->cfg->out_ifs = realloc(
- cfg_parser->cfg->out_ifs,
+ else cfg_parser->cfg->out_ifs = realloc(
+ cfg_parser->cfg->out_ifs,
(cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->out_ifs)
yyerror("out of memory");
@@ -739,7 +746,7 @@ server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG
server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", $2));
- if(!cfg_mark_ports($2, 1,
+ if(!cfg_mark_ports($2, 1,
cfg_parser->cfg->outgoing_avail_ports, 65536))
yyerror("port number or range (\"low-high\") expected");
free($2);
@@ -748,7 +755,7 @@ server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG
server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", $2));
- if(!cfg_mark_ports($2, 0,
+ if(!cfg_mark_ports($2, 0,
cfg_parser->cfg->outgoing_avail_ports, 65536))
yyerror("port number or range (\"low-high\") expected");
free($2);
@@ -838,10 +845,10 @@ server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG
server_tcp_mss: VAR_TCP_MSS STRING_ARG
{
OUTYY(("P(server_tcp_mss:%s)\n", $2));
- if(atoi($2) == 0 && strcmp($2, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->tcp_mss = atoi($2);
- free($2);
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->tcp_mss = atoi($2);
+ free($2);
}
;
server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG
@@ -1141,23 +1148,23 @@ server_log_queries: VAR_LOG_QUERIES STRING_ARG
}
;
server_log_replies: VAR_LOG_REPLIES STRING_ARG
- {
- OUTYY(("P(server_log_replies:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_log_replies:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG
- {
- OUTYY(("P(server_log_tag_queryreply:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_log_tag_queryreply:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
{
OUTYY(("P(server_log_servfail:%s)\n", $2));
@@ -1168,14 +1175,14 @@ server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
}
;
server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG
- {
- OUTYY(("P(server_log_local_actions:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_log_local_actions:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_chroot: VAR_CHROOT STRING_ARG
{
OUTYY(("P(server_chroot:%s)\n", $2));
@@ -1209,7 +1216,7 @@ server_directory: VAR_DIRECTORY STRING_ARG
cfg_parser->chroot)) == 0)
d += strlen(cfg_parser->chroot);
if(d[0]) {
- if(chdir(d))
+ if(chdir(d))
log_err("cannot chdir to directory: %s (%s)",
d, strerror(errno));
}
@@ -1402,35 +1409,35 @@ server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG
}
;
server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG
- {
- OUTYY(("P(server_so_reuseport:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->so_reuseport =
- (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_so_reuseport:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->so_reuseport =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG
- {
- OUTYY(("P(server_ip_transparent:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ip_transparent =
- (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_ip_transparent:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_transparent =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_ip_freebind: VAR_IP_FREEBIND STRING_ARG
- {
- OUTYY(("P(server_ip_freebind:%s)\n", $2));
- if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
- yyerror("expected yes or no.");
- else cfg_parser->cfg->ip_freebind =
- (strcmp($2, "yes")==0);
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_ip_freebind:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ip_freebind =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_ip_dscp: VAR_IP_DSCP STRING_ARG
{
OUTYY(("P(server_ip_dscp:%s)\n", $2));
@@ -1488,9 +1495,9 @@ server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG
server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
+ if(atoi($2) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->msg_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
yyerror("must be a power of 2");
@@ -1539,7 +1546,7 @@ server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG
OUTYY(("P(server_unblock_lan_zones:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->unblock_lan_zones =
+ else cfg_parser->cfg->unblock_lan_zones =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1549,7 +1556,7 @@ server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG
OUTYY(("P(server_insecure_lan_zones:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->insecure_lan_zones =
+ else cfg_parser->cfg->insecure_lan_zones =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1565,9 +1572,9 @@ server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG
server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
+ if(atoi($2) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->rrset_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
yyerror("must be a power of 2");
@@ -1612,9 +1619,9 @@ server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG
server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
+ if(atoi($2) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->infra_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
yyerror("must be a power of 2");
@@ -1653,7 +1660,7 @@ server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG
OUTYY(("P(server_harden_short_bufsize:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_short_bufsize =
+ else cfg_parser->cfg->harden_short_bufsize =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1663,7 +1670,7 @@ server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG
OUTYY(("P(server_harden_large_queries:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_large_queries =
+ else cfg_parser->cfg->harden_large_queries =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1673,7 +1680,7 @@ server_harden_glue: VAR_HARDEN_GLUE STRING_ARG
OUTYY(("P(server_harden_glue:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_glue =
+ else cfg_parser->cfg->harden_glue =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1683,7 +1690,7 @@ server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_dnssec_stripped =
+ else cfg_parser->cfg->harden_dnssec_stripped =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1693,7 +1700,7 @@ server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG
OUTYY(("P(server_harden_below_nxdomain:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_below_nxdomain =
+ else cfg_parser->cfg->harden_below_nxdomain =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1703,7 +1710,7 @@ server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG
OUTYY(("P(server_harden_referral_path:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_referral_path =
+ else cfg_parser->cfg->harden_referral_path =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1713,7 +1720,7 @@ server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG
OUTYY(("P(server_harden_algo_downgrade:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->harden_algo_downgrade =
+ else cfg_parser->cfg->harden_algo_downgrade =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1723,7 +1730,7 @@ server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG
OUTYY(("P(server_use_caps_for_id:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->use_caps_bits_for_id =
+ else cfg_parser->cfg->use_caps_bits_for_id =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1797,7 +1804,7 @@ server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG
OUTYY(("P(server_do_not_query_localhost:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->donotquery_localhost =
+ else cfg_parser->cfg->donotquery_localhost =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1808,8 +1815,8 @@ server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG
if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 &&
strcmp($3, "deny_non_local")!=0 &&
strcmp($3, "refuse_non_local")!=0 &&
- strcmp($3, "allow_setrd")!=0 &&
- strcmp($3, "allow")!=0 &&
+ strcmp($3, "allow_setrd")!=0 &&
+ strcmp($3, "allow")!=0 &&
strcmp($3, "allow_snoop")!=0) {
yyerror("expected deny, refuse, deny_non_local, "
"refuse_non_local, allow, allow_setrd or "
@@ -1835,7 +1842,7 @@ server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG
if(*$2 == '\0' || strcmp($2, "0") == 0) {
cfg_parser->cfg->val_date_override = 0;
} else if(strlen($2) == 14) {
- cfg_parser->cfg->val_date_override =
+ cfg_parser->cfg->val_date_override =
cfg_convert_timeval($2);
if(!cfg_parser->cfg->val_date_override)
yyerror("bad date/time specification");
@@ -1927,7 +1934,7 @@ server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG
OUTYY(("P(server_val_clean_additional:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->val_clean_additional =
+ else cfg_parser->cfg->val_clean_additional =
(strcmp($2, "yes")==0);
free($2);
}
@@ -1937,7 +1944,7 @@ server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG
OUTYY(("P(server_val_permissive_mode:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->val_permissive_mode =
+ else cfg_parser->cfg->val_permissive_mode =
(strcmp($2, "yes")==0);
free($2);
}
@@ -2114,9 +2121,9 @@ server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG
server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG
{
OUTYY(("P(server_key_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
+ if(atoi($2) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->key_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
yyerror("must be a power of 2");
@@ -2171,7 +2178,7 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
free($3);
#endif
} else {
- if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
+ if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
$2, $3))
fatal_exit("out of memory adding local-zone");
}
@@ -2379,19 +2386,18 @@ server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG
}
}
;
-server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG
- {
- OUTYY(("P(server_ip_ratelimit:%s)\n", $2));
+server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ip_ratelimit = atoi($2);
free($2);
}
;
-
-server_ratelimit: VAR_RATELIMIT STRING_ARG
- {
- OUTYY(("P(server_ratelimit:%s)\n", $2));
+server_ratelimit: VAR_RATELIMIT STRING_ARG
+ {
+ OUTYY(("P(server_ratelimit:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ratelimit = atoi($2);
@@ -2399,13 +2405,13 @@ server_ratelimit: VAR_RATELIMIT STRING_ARG
}
;
server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG
- {
- OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2));
- if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size))
- yyerror("memory size expected");
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size))
+ yyerror("memory size expected");
+ free($2);
+ }
+ ;
server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
{
OUTYY(("P(server_ratelimit_size:%s)\n", $2));
@@ -2415,24 +2421,24 @@ server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
}
;
server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG
- {
- OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2));
- if(atoi($2) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->ip_ratelimit_slabs = atoi($2);
- if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
- yyerror("must be a power of 2");
- }
- free($2);
- }
- ;
+ {
+ OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2));
+ if(atoi($2) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->ip_ratelimit_slabs = atoi($2);
+ if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
+ yyerror("must be a power of 2");
+ }
+ free($2);
+ }
+ ;
server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", $2));
- if(atoi($2) == 0)
+ if(atoi($2) == 0) {
yyerror("number expected");
- else {
+ } else {
cfg_parser->cfg->ratelimit_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
yyerror("must be a power of 2");
@@ -2470,42 +2476,51 @@ server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG
}
}
;
-server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG
- {
- OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2));
- if(atoi($2) == 0 && strcmp($2, "0") != 0)
- yyerror("number expected");
- else cfg_parser->cfg->ip_ratelimit_factor = atoi($2);
- free($2);
+server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG
+ {
+ OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->ip_ratelimit_factor = atoi($2);
+ free($2);
}
;
-server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
- {
- OUTYY(("P(server_ratelimit_factor:%s)\n", $2));
+server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
+ {
+ OUTYY(("P(server_ratelimit_factor:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ratelimit_factor = atoi($2);
free($2);
}
;
-server_low_rtt: VAR_LOW_RTT STRING_ARG
- {
+server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG
+ {
+ OUTYY(("P(server_outbound_msg_retry:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->outbound_msg_retry = atoi($2);
+ free($2);
+ }
+ ;
+server_low_rtt: VAR_LOW_RTT STRING_ARG
+ {
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
free($2);
}
;
-server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG
- {
- OUTYY(("P(server_fast_server_num:%s)\n", $2));
+server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG
+ {
+ OUTYY(("P(server_fast_server_num:%s)\n", $2));
if(atoi($2) <= 0)
yyerror("number expected");
else cfg_parser->cfg->fast_server_num = atoi($2);
free($2);
}
;
-server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG
- {
- OUTYY(("P(server_fast_server_permil:%s)\n", $2));
+server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG
+ {
+ OUTYY(("P(server_fast_server_permil:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->fast_server_permil = atoi($2);
@@ -2517,7 +2532,7 @@ server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG
OUTYY(("P(server_qname_minimisation:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->qname_minimisation =
+ else cfg_parser->cfg->qname_minimisation =
(strcmp($2, "yes")==0);
free($2);
}
@@ -2527,7 +2542,7 @@ server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG
OUTYY(("P(server_qname_minimisation_strict:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->qname_minimisation_strict =
+ else cfg_parser->cfg->qname_minimisation_strict =
(strcmp($2, "yes")==0);
free($2);
}
@@ -2716,17 +2731,27 @@ stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG
OUTYY(("P(stub-ssl-upstream:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->ssl_upstream =
+ else cfg_parser->cfg->stubs->ssl_upstream =
(strcmp($2, "yes")==0);
free($2);
}
;
+stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG
+ {
+ OUTYY(("P(stub-tcp-upstream:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->tcp_upstream =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
stub_prime: VAR_STUB_PRIME STRING_ARG
{
OUTYY(("P(stub-prime:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->stubs->isprime =
+ else cfg_parser->cfg->stubs->isprime =
(strcmp($2, "yes")==0);
free($2);
}
@@ -2778,11 +2803,21 @@ forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG
OUTYY(("P(forward-ssl-upstream:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->forwards->ssl_upstream =
+ else cfg_parser->cfg->forwards->ssl_upstream =
(strcmp($2, "yes")==0);
free($2);
}
;
+forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG
+ {
+ OUTYY(("P(forward-tcp-upstream:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->tcp_upstream =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
auth_name: VAR_NAME STRING_ARG
{
OUTYY(("P(name:%s)\n", $2));
@@ -2922,7 +2957,7 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
#endif
} else {
if(!cfg_str2list_insert(
- &cfg_parser->cfg->views->local_zones,
+ &cfg_parser->cfg->views->local_zones,
$2, $3))
fatal_exit("out of memory adding local-zone");
}
@@ -2979,11 +3014,11 @@ view_first: VAR_VIEW_FIRST STRING_ARG
}
;
rcstart: VAR_REMOTE_CONTROL
- {
- OUTYY(("\nP(remote-control:)\n"));
+ {
+ OUTYY(("\nP(remote-control:)\n"));
}
;
-contents_rc: contents_rc content_rc
+contents_rc: contents_rc content_rc
| ;
content_rc: rc_control_enable | rc_control_interface | rc_control_port |
rc_server_key_file | rc_server_cert_file | rc_control_key_file |
@@ -2994,7 +3029,7 @@ rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG
OUTYY(("P(control_enable:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
- else cfg_parser->cfg->remote_control_enable =
+ else cfg_parser->cfg->remote_control_enable =
(strcmp($2, "yes")==0);
free($2);
}
@@ -3233,8 +3268,8 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
}
;
pythonstart: VAR_PYTHON
- {
- OUTYY(("\nP(python:)\n"));
+ {
+ OUTYY(("\nP(python:)\n"));
}
;
contents_py: contents_py content_py
@@ -3365,44 +3400,44 @@ dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG
;
dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG
{
- OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2));
- if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
- yyerror("memory size expected");
- free($2);
+ OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
+ yyerror("memory size expected");
+ free($2);
}
;
dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG
{
- OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2);
- if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
- yyerror("must be a power of 2");
- }
- free($2);
+ OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2));
+ if(atoi($2) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2);
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free($2);
}
;
dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG
{
- OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2));
- if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size))
- yyerror("memory size expected");
- free($2);
+ OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size))
+ yyerror("memory size expected");
+ free($2);
}
;
dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG
{
- OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2));
- if(atoi($2) == 0)
- yyerror("number expected");
- else {
- cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2);
- if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
- yyerror("must be a power of 2");
- }
- free($2);
+ OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2));
+ if(atoi($2) == 0) {
+ yyerror("number expected");
+ } else {
+ cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2);
+ if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
+ yyerror("must be a power of 2");
+ }
+ free($2);
}
;
cachedbstart: VAR_CACHEDB
diff --git a/util/data/msgencode.c b/util/data/msgencode.c
index 5f297b551bfb..fe21cfb86bd1 100644
--- a/util/data/msgencode.c
+++ b/util/data/msgencode.c
@@ -796,7 +796,10 @@ calc_edns_field_size(struct edns_data* edns)
struct edns_option* opt;
if(!edns || !edns->edns_present)
return 0;
- for(opt = edns->opt_list; opt; opt = opt->next) {
+ for(opt = edns->opt_list_inplace_cb_out; opt; opt = opt->next) {
+ rdatalen += 4 + opt->opt_len;
+ }
+ for(opt = edns->opt_list_out; opt; opt = opt->next) {
rdatalen += 4 + opt->opt_len;
}
/* domain root '.' + type + class + ttl + rdatalen */
@@ -827,7 +830,17 @@ attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns,
rdatapos = sldns_buffer_position(pkt);
sldns_buffer_write_u16(pkt, 0); /* rdatalen */
/* write rdata */
- for(opt=edns->opt_list; opt; opt=opt->next) {
+ for(opt=edns->opt_list_inplace_cb_out; opt; opt=opt->next) {
+ if (opt->opt_code == LDNS_EDNS_PADDING) {
+ padding_option = opt;
+ continue;
+ }
+ sldns_buffer_write_u16(pkt, opt->opt_code);
+ sldns_buffer_write_u16(pkt, opt->opt_len);
+ if(opt->opt_len != 0)
+ sldns_buffer_write(pkt, opt->opt_data, opt->opt_len);
+ }
+ for(opt=edns->opt_list_out; opt; opt=opt->next) {
if (opt->opt_code == LDNS_EDNS_PADDING) {
padding_option = opt;
continue;
@@ -860,8 +873,7 @@ attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns,
sldns_buffer_skip(pkt, pad_sz);
}
}
- if(edns->opt_list)
- sldns_buffer_write_u16_at(pkt, rdatapos,
+ sldns_buffer_write_u16_at(pkt, rdatapos,
sldns_buffer_position(pkt)-rdatapos-2);
sldns_buffer_flip(pkt);
}
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index 6ee5559db07b..a600a8c60151 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -37,10 +37,12 @@
* Routines for message parsing a packet buffer to a descriptive structure.
*/
#include "config.h"
+#include "util/config_file.h"
#include "util/data/msgparse.h"
#include "util/data/msgreply.h"
#include "util/data/dname.h"
#include "util/data/packed_rrset.h"
+#include "util/netevent.h"
#include "util/storage/lookup3.h"
#include "util/regional.h"
#include "sldns/rrdef.h"
@@ -938,11 +940,40 @@ parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
return 0;
}
+static int
+edns_opt_list_append_keepalive(struct edns_option** list, int msec,
+ struct regional* region)
+{
+ uint8_t data[2]; /* For keepalive value */
+ data[0] = (uint8_t)((msec >> 8) & 0xff);
+ data[1] = (uint8_t)(msec & 0xff);
+ return edns_opt_list_append(list, LDNS_EDNS_KEEPALIVE, sizeof(data),
+ data, region);
+}
+
/** parse EDNS options from EDNS wireformat rdata */
static int
-parse_edns_options(uint8_t* rdata_ptr, size_t rdata_len,
- struct edns_data* edns, struct regional* region)
+parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len,
+ struct edns_data* edns, struct config_file* cfg, struct comm_point* c,
+ struct regional* region)
{
+ /* To respond with a Keepalive option, the client connection must have
+ * received one message with a TCP Keepalive EDNS option, and that
+ * option must have 0 length data. Subsequent messages sent on that
+ * connection will have a TCP Keepalive option.
+ *
+ * In the if-statement below, the option is added unsolicited. This
+ * means that the client has sent an KEEPALIVE option earlier. We know
+ * here this is true, because c->tcp_keepalive is set.
+ */
+ if (cfg && cfg->do_tcp_keepalive && c && c->type != comm_udp && c->tcp_keepalive) {
+ if(!edns_opt_list_append_keepalive(&edns->opt_list_out,
+ c->tcp_timeout_msec / 100, region)) {
+ log_err("out of memory");
+ return LDNS_RCODE_SERVFAIL;
+ }
+ }
+
/* while still more options, and have code+len to read */
/* ignores partial content (i.e. rdata len 3) */
while(rdata_len >= 4) {
@@ -952,20 +983,81 @@ parse_edns_options(uint8_t* rdata_ptr, size_t rdata_len,
rdata_len -= 4;
if(opt_len > rdata_len)
break; /* option code partial */
- if(!edns_opt_append(edns, region, opt_code, opt_len,
- rdata_ptr)) {
+
+ /* handle parse time edns options here */
+ switch(opt_code) {
+ case LDNS_EDNS_NSID:
+ if (!cfg || !cfg->nsid)
+ break;
+ if(!edns_opt_list_append(&edns->opt_list_out,
+ LDNS_EDNS_NSID, cfg->nsid_len,
+ cfg->nsid, region)) {
+ log_err("out of memory");
+ return LDNS_RCODE_SERVFAIL;
+ }
+ break;
+
+ case LDNS_EDNS_KEEPALIVE:
+ /* To respond with a Keepalive option, the client
+ * connection must have received one message with a TCP
+ * Keepalive EDNS option, and that option must have 0
+ * length data. Subsequent messages sent on that
+ * connection will have a TCP Keepalive option.
+ *
+ * This should be the first time the client sends this
+ * option, so c->tcp_keepalive is not set.
+ * Besides adding the reply KEEPALIVE option,
+ * c->tcp_keepalive will be set so that the
+ * option will be added unsolicited in subsequent
+ * responses (see the comment above the if-statement
+ * at the start of this function).
+ */
+ if (!cfg || !cfg->do_tcp_keepalive || !c ||
+ c->type == comm_udp || c->tcp_keepalive)
+ break;
+ if(opt_len) {
+ verbose(VERB_ALGO, "query with bad edns keepalive.");
+ return LDNS_RCODE_FORMERR;
+ }
+ if(!edns_opt_list_append_keepalive(&edns->opt_list_out,
+ c->tcp_timeout_msec / 100,
+ region)) {
+ log_err("out of memory");
+ return LDNS_RCODE_SERVFAIL;
+ }
+ c->tcp_keepalive = 1;
+ break;
+
+ case LDNS_EDNS_PADDING:
+ if(!cfg || !cfg->pad_responses ||
+ !c || c->type != comm_tcp ||!c->ssl)
+ break;
+ if(!edns_opt_list_append(&edns->opt_list_out,
+ LDNS_EDNS_PADDING,
+ 0, NULL, region)) {
+ log_err("out of memory");
+ return LDNS_RCODE_SERVFAIL;
+ }
+ edns->padding_block_size = cfg->pad_responses_block_size;
+ break;
+
+ default:
+ break;
+ }
+ if(!edns_opt_list_append(&edns->opt_list_in,
+ opt_code, opt_len, rdata_ptr, region)) {
log_err("out of memory");
- return 0;
+ return LDNS_RCODE_SERVFAIL;
}
rdata_ptr += opt_len;
rdata_len -= opt_len;
}
- return 1;
+ return LDNS_RCODE_NOERROR;
}
int
-parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
- struct regional* region)
+parse_extract_edns_from_response_msg(struct msg_parse* msg,
+ struct edns_data* edns, struct regional* region)
{
struct rrset_parse* rrset = msg->rrset_first;
struct rrset_parse* prev = 0;
@@ -1019,18 +1111,35 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
edns->edns_version = found->rr_last->ttl_data[1];
edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]);
edns->udp_size = ntohs(found->rrset_class);
- edns->opt_list = NULL;
+ edns->opt_list_in = NULL;
+ edns->opt_list_out = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
edns->padding_block_size = 0;
/* take the options */
rdata_len = found->rr_first->size-2;
rdata_ptr = found->rr_first->ttl_data+6;
- if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
- return 0;
- /* ignore rrsigs */
+ /* while still more options, and have code+len to read */
+ /* ignores partial content (i.e. rdata len 3) */
+ while(rdata_len >= 4) {
+ uint16_t opt_code = sldns_read_uint16(rdata_ptr);
+ uint16_t opt_len = sldns_read_uint16(rdata_ptr+2);
+ rdata_ptr += 4;
+ rdata_len -= 4;
+ if(opt_len > rdata_len)
+ break; /* option code partial */
- return 0;
+ if(!edns_opt_list_append(&edns->opt_list_in,
+ opt_code, opt_len, rdata_ptr, region)) {
+ log_err("out of memory");
+ break;
+ }
+ rdata_ptr += opt_len;
+ rdata_len -= opt_len;
+ }
+ /* ignore rrsigs */
+ return LDNS_RCODE_NOERROR;
}
/** skip RR in packet */
@@ -1060,8 +1169,8 @@ skip_pkt_rrs(sldns_buffer* pkt, int num)
}
int
-parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns,
- struct regional* region)
+parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns,
+ struct config_file* cfg, struct comm_point* c, struct regional* region)
{
size_t rdata_len;
uint8_t* rdata_ptr;
@@ -1093,7 +1202,9 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns,
edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */
edns->edns_version = sldns_buffer_read_u8(pkt);
edns->bits = sldns_buffer_read_u16(pkt);
- edns->opt_list = NULL;
+ edns->opt_list_in = NULL;
+ edns->opt_list_out = NULL;
+ edns->opt_list_inplace_cb_out = NULL;
edns->padding_block_size = 0;
/* take the options */
@@ -1101,12 +1212,9 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns,
if(sldns_buffer_remaining(pkt) < rdata_len)
return LDNS_RCODE_FORMERR;
rdata_ptr = sldns_buffer_current(pkt);
- if(!parse_edns_options(rdata_ptr, rdata_len, edns, region))
- return LDNS_RCODE_SERVFAIL;
-
/* ignore rrsigs */
-
- return 0;
+ return parse_edns_options_from_query(rdata_ptr, rdata_len, edns, cfg,
+ c, region);
}
void
diff --git a/util/data/msgparse.h b/util/data/msgparse.h
index d2fd9c806657..4c0559a739a4 100644
--- a/util/data/msgparse.h
+++ b/util/data/msgparse.h
@@ -70,6 +70,8 @@ struct rrset_parse;
struct rr_parse;
struct regional;
struct edns_option;
+struct config_file;
+struct comm_point;
/** number of buckets in parse rrset hash table. Must be power of 2. */
#define PARSE_TABLE_SIZE 32
@@ -225,8 +227,15 @@ struct edns_data {
uint16_t bits;
/** UDP reassembly size. */
uint16_t udp_size;
- /** rdata element list, or NULL if none */
- struct edns_option* opt_list;
+ /** rdata element list of options of an incoming packet created at
+ * parse time, or NULL if none */
+ struct edns_option* opt_list_in;
+ /** rdata element list of options to encode for outgoing packets,
+ * or NULL if none */
+ struct edns_option* opt_list_out;
+ /** rdata element list of outgoing edns options from modules
+ * or NULL if none */
+ struct edns_option* opt_list_inplace_cb_out;
/** block size to pad */
uint16_t padding_block_size;
};
@@ -281,8 +290,8 @@ int parse_packet(struct sldns_buffer* pkt, struct msg_parse* msg,
* @return: 0 on success. or an RCODE on an error.
* RCODE formerr if OPT in wrong section, and so on.
*/
-int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
- struct regional* region);
+int parse_extract_edns_from_response_msg(struct msg_parse* msg,
+ struct edns_data* edns, struct regional* region);
/**
* If EDNS data follows a query section, extract it and initialize edns struct.
@@ -290,12 +299,14 @@ int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns,
* section. At end, right after EDNS data or no movement if failed.
* @param edns: the edns data allocated by the caller. Does not have to be
* initialised.
+ * @param cfg: the configuration (with nsid value etc.)
+ * @param c: commpoint to determine transport (if needed)
* @param region: region to alloc results in (edns option contents)
* @return: 0 on success, or an RCODE on error.
* RCODE formerr if OPT is badly formatted and so on.
*/
-int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
- struct regional* region);
+int parse_edns_from_query_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
+ struct config_file* cfg, struct comm_point* c, struct regional* region);
/**
* Calculate hash value for rrset in packet.
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index 00272fd1c64e..ec46e4724780 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -166,6 +166,32 @@ reply_info_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc,
return 1;
}
+struct reply_info *
+make_new_reply_info(const struct reply_info* rep, struct regional* region,
+ size_t an_numrrsets, size_t copy_rrsets)
+{
+ struct reply_info* new_rep;
+ size_t i;
+
+ /* create a base struct. we specify 'insecure' security status as
+ * the modified response won't be DNSSEC-valid. In our faked response
+ * the authority and additional sections will be empty (except possible
+ * EDNS0 OPT RR in the additional section appended on sending it out),
+ * so the total number of RRsets is an_numrrsets. */
+ new_rep = construct_reply_info_base(region, rep->flags,
+ rep->qdcount, rep->ttl, rep->prefetch_ttl,
+ rep->serve_expired_ttl, an_numrrsets, 0, 0, an_numrrsets,
+ sec_status_insecure);
+ if(!new_rep)
+ return NULL;
+ if(!reply_info_alloc_rrset_keys(new_rep, NULL, region))
+ return NULL;
+ for(i=0; i<copy_rrsets; i++)
+ new_rep->rrsets[i] = rep->rrsets[i];
+
+ return new_rep;
+}
+
/** find the minimumttl in the rdata of SOA record */
static time_t
soa_find_minttl(struct rr_parse* rr)
@@ -196,13 +222,17 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
* minimum-ttl in the rdata of the SOA record */
if(*rr_ttl > soa_find_minttl(rr))
*rr_ttl = soa_find_minttl(rr);
- if(*rr_ttl > MAX_NEG_TTL)
- *rr_ttl = MAX_NEG_TTL;
}
if(!SERVE_ORIGINAL_TTL && (*rr_ttl < MIN_TTL))
*rr_ttl = MIN_TTL;
if(!SERVE_ORIGINAL_TTL && (*rr_ttl > MAX_TTL))
*rr_ttl = MAX_TTL;
+ if(type == LDNS_RR_TYPE_SOA && section == LDNS_SECTION_AUTHORITY) {
+ /* max neg ttl overrides the min and max ttl of everything
+ * else, it is for a more specific record */
+ if(*rr_ttl > MAX_NEG_TTL)
+ *rr_ttl = MAX_NEG_TTL;
+ }
if(*rr_ttl < data->ttl)
data->ttl = *rr_ttl;
@@ -488,14 +518,13 @@ int reply_info_parse(sldns_buffer* pkt, struct alloc_cache* alloc,
if((ret = parse_packet(pkt, msg, region)) != 0) {
return ret;
}
- if((ret = parse_extract_edns(msg, edns, region)) != 0)
+ if((ret = parse_extract_edns_from_response_msg(msg, edns, region)) != 0)
return ret;
/* parse OK, allocate return structures */
/* this also performs dname decompression */
if(!parse_create_msg(pkt, msg, alloc, qinf, rep, NULL)) {
query_info_clear(qinf);
- reply_info_parsedelete(*rep, alloc);
*rep = NULL;
return LDNS_RCODE_SERVFAIL;
}
@@ -960,34 +989,6 @@ parse_reply_in_temp_region(sldns_buffer* pkt, struct regional* region,
return rep;
}
-int edns_opt_append(struct edns_data* edns, struct regional* region,
- uint16_t code, size_t len, uint8_t* data)
-{
- struct edns_option** prevp;
- struct edns_option* opt;
-
- /* allocate new element */
- opt = (struct edns_option*)regional_alloc(region, sizeof(*opt));
- if(!opt)
- return 0;
- opt->next = NULL;
- opt->opt_code = code;
- opt->opt_len = len;
- opt->opt_data = NULL;
- if(len > 0) {
- opt->opt_data = regional_alloc_init(region, data, len);
- if(!opt->opt_data)
- return 0;
- }
-
- /* append at end of list */
- prevp = &edns->opt_list;
- while(*prevp != NULL)
- prevp = &((*prevp)->next);
- *prevp = opt;
- return 1;
-}
-
int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
uint8_t* data, struct regional* region)
{
@@ -1068,7 +1069,7 @@ static int inplace_cb_reply_call_generic(
(void)(*(inplace_cb_reply_func_type*)cb->cb)(qinfo, qstate, rep,
rcode, edns, &opt_list_out, repinfo, region, start_time, cb->id, cb->cb_arg);
}
- edns->opt_list = opt_list_out;
+ edns->opt_list_inplace_cb_out = opt_list_out;
return 1;
}
diff --git a/util/data/msgreply.h b/util/data/msgreply.h
index c6b220ed8d71..81c763fc7c3a 100644
--- a/util/data/msgreply.h
+++ b/util/data/msgreply.h
@@ -382,6 +382,21 @@ struct reply_info* reply_info_copy(struct reply_info* rep,
int reply_info_alloc_rrset_keys(struct reply_info* rep,
struct alloc_cache* alloc, struct regional* region);
+/*
+ * Create a new reply_info based on 'rep'. The new info is based on
+ * the passed 'rep', but ignores any rrsets except for the first 'an_numrrsets'
+ * RRsets in the answer section. These answer rrsets are copied to the
+ * new info, up to 'copy_rrsets' rrsets (which must not be larger than
+ * 'an_numrrsets'). If an_numrrsets > copy_rrsets, the remaining rrsets array
+ * entries will be kept empty so the caller can fill them later. When rrsets
+ * are copied, they are shallow copied. The caller must ensure that the
+ * copied rrsets are valid throughout its lifetime and must provide appropriate
+ * mutex if it can be shared by multiple threads.
+ */
+struct reply_info *
+make_new_reply_info(const struct reply_info* rep, struct regional* region,
+ size_t an_numrrsets, size_t copy_rrsets);
+
/**
* Copy a parsed rrset into given key, decompressing and allocating rdata.
* @param pkt: packet for decompression
@@ -504,18 +519,6 @@ void log_query_info(enum verbosity_value v, const char* str,
struct query_info* qinf);
/**
- * Append edns option to edns data structure
- * @param edns: the edns data structure to append the edns option to.
- * @param region: region to allocate the new edns option.
- * @param code: the edns option's code.
- * @param len: the edns option's length.
- * @param data: the edns option's data.
- * @return false on failure.
- */
-int edns_opt_append(struct edns_data* edns, struct regional* region,
- uint16_t code, size_t len, uint8_t* data);
-
-/**
* Append edns option to edns option list
* @param list: the edns option list to append the edns option to.
* @param code: the edns option's code.
diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h
index ff95c0af0e8d..e1feb22bb7f6 100644
--- a/util/data/packed_rrset.h
+++ b/util/data/packed_rrset.h
@@ -61,6 +61,13 @@ typedef uint64_t rrset_id_type;
* updated on encoding in a reply. This flag is not expected to be set in
* cached data. */
#define PACKED_RRSET_FIXEDTTL 0x80000000
+/** This rrset is from RPZ. It is not real, it is synthesized data to block
+ * access. The flag makes lookups, from cache in iterator, ignore the fake
+ * items and only use actual data. Eg. when the iterator looksup NS, CNAME,
+ * A and AAAA types, it then gets items without this flag that are the
+ * actual network. But messages with these records in it can be stored in
+ * the cache and retrieved for a reply. */
+#define PACKED_RRSET_RPZ 0x8
/** number of rrs and rrsets for integer overflow protection. More than
* this is not really possible (64K packet has much less RRs and RRsets) in
@@ -88,6 +95,7 @@ struct packed_rrset_key {
* o PACKED_RRSET_PARENT_SIDE
* o PACKED_RRSET_SOA_NEG
* o PACKED_RRSET_FIXEDTTL (not supposed to be cached)
+ * o PACKED_RRSET_RPZ
*/
uint32_t flags;
/** the rrset type in network format */
diff --git a/util/edns.c b/util/edns.c
index 84308449c7f3..f55dcb97e755 100644
--- a/util/edns.c
+++ b/util/edns.c
@@ -128,53 +128,3 @@ edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen);
}
-static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in,
- struct comm_point* c, struct regional* region)
-{
- if(c->type == comm_udp)
- return 1;
-
- /* To respond with a Keepalive option, the client connection
- * must have received one message with a TCP Keepalive EDNS option,
- * and that option must have 0 length data. Subsequent messages
- * sent on that connection will have a TCP Keepalive option.
- */
- if(c->tcp_keepalive ||
- edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_KEEPALIVE)) {
- int keepalive = c->tcp_timeout_msec / 100;
- uint8_t data[2];
- data[0] = (uint8_t)((keepalive >> 8) & 0xff);
- data[1] = (uint8_t)(keepalive & 0xff);
- if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_KEEPALIVE,
- sizeof(data), data, region))
- return 0;
- c->tcp_keepalive = 1;
- }
- return 1;
-}
-
-int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in,
- struct config_file* cfg, struct comm_point* c, struct regional* region)
-{
- if(cfg->do_tcp_keepalive &&
- !edns_keepalive(edns_out, edns_in, c, region))
- return 0;
-
- if (cfg->nsid && edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_NSID)
- && !edns_opt_list_append(&edns_out->opt_list,
- LDNS_EDNS_NSID, cfg->nsid_len, cfg->nsid, region))
- return 0;
-
- if(!cfg->pad_responses || c->type != comm_tcp || !c->ssl
- || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) {
- ; /* pass */
- }
-
- else if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_PADDING
- , 0, NULL, region))
- return 0;
- else
- edns_out->padding_block_size = cfg->pad_responses_block_size;
-
- return 1;
-}
diff --git a/util/edns.h b/util/edns.h
index 11742eb5b723..d9ded0b84dc4 100644
--- a/util/edns.h
+++ b/util/edns.h
@@ -106,16 +106,4 @@ struct edns_string_addr*
edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
socklen_t addrlen);
-/**
- * Apply common EDNS options.
- *
- * @param edns_out: initialised edns information with outbound edns.
- * @param edns_in: initialised edns information with received edns.
- * @param cfg: configuration.
- * @param c: comm channel.
- * @param region: the region to allocate the edns options in.
- */
-int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in,
- struct config_file* cfg, struct comm_point* c, struct regional* region);
-
#endif
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index de6dbd02a37d..f8dac65c59a0 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -335,7 +335,7 @@ int
fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec,
int nocaps, struct sockaddr_storage* addr, socklen_t addrlen,
- uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name,
+ uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
struct module_qstate* q))
{
if(fptr == &worker_send_query) return 1;
diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h
index cd331febb070..a5470992550f 100644
--- a/util/fptr_wlist.h
+++ b/util/fptr_wlist.h
@@ -212,7 +212,7 @@ int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr);
int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec,
int nocaps, struct sockaddr_storage* addr, socklen_t addrlen,
- uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name,
+ uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
struct module_qstate* q));
/**
diff --git a/util/iana_ports.inc b/util/iana_ports.inc
index b93af015da6f..9183c3987292 100644
--- a/util/iana_ports.inc
+++ b/util/iana_ports.inc
@@ -2499,6 +2499,7 @@
2870,
2871,
2872,
+2873,
2874,
2875,
2876,
diff --git a/util/mini_event.c b/util/mini_event.c
index 661d88d2e6f6..c05dc668c676 100644
--- a/util/mini_event.c
+++ b/util/mini_event.c
@@ -337,6 +337,15 @@ int event_del(struct event* ev)
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->writes);
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->ready);
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->content);
+ if(ev->ev_fd == ev->ev_base->maxfd) {
+ int i = ev->ev_base->maxfd - 1;
+ for (; i > 3; i--) {
+ if (NULL != ev->ev_base->fds[i]) {
+ break;
+ }
+ }
+ ev->ev_base->maxfd = i;
+ }
}
ev->added = 0;
return 0;
diff --git a/util/module.h b/util/module.h
index 81a31a9cca46..c6b7e573ce00 100644
--- a/util/module.h
+++ b/util/module.h
@@ -354,10 +354,11 @@ struct module_env {
* @param addrlen: length of addr.
* @param zone: delegation point name.
* @param zonelen: length of zone name.
+ * @param tcp_upstream: use TCP for upstream queries.
* @param ssl_upstream: use SSL for upstream queries.
* @param tls_auth_name: if ssl_upstream, use this name with TLS
* authentication.
- * @param q: wich query state to reactivate upon return.
+ * @param q: which query state to reactivate upon return.
* @return: false on failure (memory or socket related). no query was
* sent. Or returns an outbound entry with qsent and qstate set.
* This outbound_entry will be used on later module invocations
@@ -366,7 +367,7 @@ struct module_env {
struct outbound_entry* (*send_query)(struct query_info* qinfo,
uint16_t flags, int dnssec, int want_dnssec, int nocaps,
struct sockaddr_storage* addr, socklen_t addrlen,
- uint8_t* zone, size_t zonelen, int ssl_upstream,
+ uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream,
char* tls_auth_name, struct module_qstate* q);
/**
diff --git a/util/net_help.c b/util/net_help.c
index 06bc1f5dd7e6..d63fccd55ca2 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -38,6 +38,12 @@
*/
#include "config.h"
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
#include "util/net_help.h"
#include "util/log.h"
#include "util/data/dname.h"
@@ -266,7 +272,10 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr,
return 0;
(void)strlcpy(buf, ip, sizeof(buf));
buf[s-ip]=0;
- sa->sin6_scope_id = (uint32_t)atoi(s+1);
+#ifdef HAVE_IF_NAMETOINDEX
+ if (!(sa->sin6_scope_id = if_nametoindex(s+1)))
+#endif /* HAVE_IF_NAMETOINDEX */
+ sa->sin6_scope_id = (uint32_t)atoi(s+1);
ip = buf;
}
if(inet_pton((int)sa->sin6_family, ip, &sa->sin6_addr) <= 0) {
@@ -881,6 +890,12 @@ log_cert(unsigned level, const char* str, void* cert)
BIO_write(bio, &nul, (int)sizeof(nul));
len = BIO_get_mem_data(bio, &pp);
if(len != 0 && pp) {
+ /* reduce size of cert printout */
+ char* s;
+ while((s=strstr(pp, " "))!=NULL)
+ memmove(s, s+1, strlen(s+1)+1);
+ while((s=strstr(pp, "\t\t"))!=NULL)
+ memmove(s, s+1, strlen(s+1)+1);
verbose(level, "%s: \n%s", str, pp);
}
BIO_free(bio);
@@ -945,9 +960,12 @@ listen_sslctx_setup(void* ctxt)
}
#endif
#if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA)
+ /* if we detect system-wide crypto policies, use those */
+ if (access( "/etc/crypto-policies/config", F_OK ) != 0 ) {
/* if we have sha256, set the cipher list to have no known vulns */
- if(!SSL_CTX_set_cipher_list(ctx, "TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"))
- log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list");
+ if(!SSL_CTX_set_cipher_list(ctx, "TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"))
+ log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list");
+ }
#endif
if((SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE) &
@@ -1172,6 +1190,7 @@ void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert)
if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) &
SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) {
log_crypto_err("could not set SSL_OP_NO_RENEGOTIATION");
+ SSL_CTX_free(ctx);
return 0;
}
#endif
diff --git a/util/netevent.c b/util/netevent.c
index 11c642a2bc38..595e5dc80516 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -300,6 +300,7 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen)
case ENETDOWN:
# endif
case EPERM:
+ case EACCES:
if(verbosity < VERB_ALGO)
return 0;
default:
@@ -817,6 +818,7 @@ setup_tcp_handler(struct comm_point* c, int fd, int cur, int max)
#endif
c->tcp_is_reading = 1;
c->tcp_byte_count = 0;
+ c->tcp_keepalive = 0;
/* if more than half the tcp handlers are in use, use a shorter
* timeout for this TCP connection, we need to make space for
* other connections to be able to get attention */
@@ -942,7 +944,16 @@ int comm_point_perform_accept(struct comm_point* c,
#ifdef USE_WINSOCK
static long win_bio_cb(BIO *b, int oper, const char* ATTR_UNUSED(argp),
- int ATTR_UNUSED(argi), long argl, long retvalue)
+#ifdef HAVE_BIO_SET_CALLBACK_EX
+ size_t ATTR_UNUSED(len),
+#endif
+ int ATTR_UNUSED(argi), long argl,
+#ifndef HAVE_BIO_SET_CALLBACK_EX
+ long retvalue
+#else
+ int retvalue, size_t* ATTR_UNUSED(processed)
+#endif
+ )
{
int wsa_err = WSAGetLastError(); /* store errcode before it is gone */
verbose(VERB_ALGO, "bio_cb %d, %s %s %s", oper,
@@ -972,9 +983,17 @@ comm_point_tcp_win_bio_cb(struct comm_point* c, void* thessl)
{
SSL* ssl = (SSL*)thessl;
/* set them both just in case, but usually they are the same BIO */
+#ifdef HAVE_BIO_SET_CALLBACK_EX
+ BIO_set_callback_ex(SSL_get_rbio(ssl), &win_bio_cb);
+#else
BIO_set_callback(SSL_get_rbio(ssl), &win_bio_cb);
+#endif
BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)c->ev->ev);
+#ifdef HAVE_BIO_SET_CALLBACK_EX
+ BIO_set_callback_ex(SSL_get_wbio(ssl), &win_bio_cb);
+#else
BIO_set_callback(SSL_get_wbio(ssl), &win_bio_cb);
+#endif
BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)c->ev->ev);
}
#endif
@@ -1036,6 +1055,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
/* clear leftover flags from previous use, and then set the
* correct event base for the event structure for libevent */
ub_event_free(c_hdl->ev->ev);
+ c_hdl->ev->ev = NULL;
if((c_hdl->type == comm_tcp && c_hdl->tcp_req_info) ||
c_hdl->type == comm_local || c_hdl->type == comm_raw)
c_hdl->tcp_do_toggle_rw = 0;
@@ -1092,6 +1112,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
/* grab the tcp handler buffers */
c->cur_tcp_count++;
c->tcp_free = c_hdl->tcp_free;
+ c_hdl->tcp_free = NULL;
if(!c->tcp_free) {
/* stop accepting incoming queries for now. */
comm_point_stop_listening(c);
@@ -1113,9 +1134,11 @@ reclaim_tcp_handler(struct comm_point* c)
}
comm_point_close(c);
if(c->tcp_parent) {
- c->tcp_parent->cur_tcp_count--;
- c->tcp_free = c->tcp_parent->tcp_free;
- c->tcp_parent->tcp_free = c;
+ if(c != c->tcp_parent->tcp_free) {
+ c->tcp_parent->cur_tcp_count--;
+ c->tcp_free = c->tcp_parent->tcp_free;
+ c->tcp_parent->tcp_free = c;
+ }
if(!c->tcp_free) {
/* re-enable listening on accept socket */
comm_point_start_listening(c->tcp_parent, -1, -1);
@@ -1862,13 +1885,22 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
if(errno == EINTR || errno == EAGAIN)
return 1;
/* Not handling EISCONN here as shouldn't ever hit that case.*/
- if(errno != EPIPE && errno != 0 && verbosity < 2)
- return 0; /* silence lots of chatter in the logs */
- if(errno != EPIPE && errno != 0) {
+ if(errno != EPIPE
+#ifdef EOPNOTSUPP
+ /* if /proc/sys/net/ipv4/tcp_fastopen is
+ * disabled on Linux, sendmsg may return
+ * 'Operation not supported', if so
+ * fallthrough to ordinary connect. */
+ && errno != EOPNOTSUPP
+#endif
+ && errno != 0) {
+ if(verbosity < 2)
+ return 0; /* silence lots of chatter in the logs */
log_err_addr("tcp sendmsg", strerror(errno),
&c->repinfo.addr, c->repinfo.addrlen);
return 0;
}
+ verbose(VERB_ALGO, "tcp sendmsg for fastopen failed (with %s), try normal connect", strerror(errno));
/* fallthrough to nonFASTOPEN
* (MSG_FASTOPEN on Linux 3 produces EPIPE)
* we need to perform connect() */
@@ -2201,9 +2233,11 @@ reclaim_http_handler(struct comm_point* c)
}
comm_point_close(c);
if(c->tcp_parent) {
- c->tcp_parent->cur_tcp_count--;
- c->tcp_free = c->tcp_parent->tcp_free;
- c->tcp_parent->tcp_free = c;
+ if(c != c->tcp_parent->tcp_free) {
+ c->tcp_parent->cur_tcp_count--;
+ c->tcp_free = c->tcp_parent->tcp_free;
+ c->tcp_parent->tcp_free = c;
+ }
if(!c->tcp_free) {
/* re-enable listening on accept socket */
comm_point_start_listening(c->tcp_parent, -1, -1);
@@ -4140,6 +4174,10 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
c->timeout->tv_sec = msec/1000;
c->timeout->tv_usec = (msec%1000)*1000;
#endif /* S_SPLINT_S */
+ } else {
+ if(msec == 0 || !c->timeout) {
+ ub_event_del_bits(c->ev->ev, UB_EV_TIMEOUT);
+ }
}
if(c->type == comm_tcp || c->type == comm_http) {
ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
@@ -4164,6 +4202,7 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
}
if(ub_event_add(c->ev->ev, msec==0?NULL:c->timeout) != 0) {
log_err("event_add failed. in cpsl.");
+ return;
}
c->event_added = 1;
}
@@ -4177,11 +4216,15 @@ void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr)
}
c->event_added = 0;
}
+ if(!c->timeout) {
+ ub_event_del_bits(c->ev->ev, UB_EV_TIMEOUT);
+ }
ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
if(rd) ub_event_add_bits(c->ev->ev, UB_EV_READ);
if(wr) ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
if(ub_event_add(c->ev->ev, c->timeout) != 0) {
log_err("event_add failed. in cplf.");
+ return;
}
c->event_added = 1;
}
diff --git a/util/netevent.h b/util/netevent.h
index c79f99b3eb6d..9f4d28ba9f8f 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -743,7 +743,7 @@ struct comm_signal* comm_signal_create(struct comm_base* base,
void (*callback)(int, void*), void* cb_arg);
/**
- * Bind signal struct to catch a signal. A signle comm_signal can be bound
+ * Bind signal struct to catch a signal. A single comm_signal can be bound
* to multiple signals, calling comm_signal_bind multiple times.
* @param comsig: the communication point, with callback information.
* @param sig: signal number.
diff --git a/util/regional.c b/util/regional.c
index bd67ecf50af3..93e911c5ec1a 100644
--- a/util/regional.c
+++ b/util/regional.c
@@ -103,6 +103,8 @@ regional_create_custom_large_object(size_t size, size_t large_object_size)
struct regional*
regional_create_custom(size_t size)
{
+ if(size < sizeof(struct regional))
+ size = sizeof(struct regional);
return regional_create_custom_large_object(size,
REGIONAL_LARGE_OBJECT_SIZE);
}
diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c
index 51039abf3ed8..6fd1f5ea638c 100644
--- a/util/shm_side/shm_main.c
+++ b/util/shm_side/shm_main.c
@@ -281,7 +281,7 @@ void shm_main_run(struct worker *worker)
shm_stat->mem.subnet = 0;
#ifdef CLIENT_SUBNET
shm_stat->mem.subnet = (long long)mod_get_mem(&worker->env,
- "subnet");
+ "subnetcache");
#endif
/* ipsecmod mem value is available in shm, also when not enabled,
* to make the struct easier to memmap by other applications,
diff --git a/util/tube.c b/util/tube.c
index dc6e3c2e7f78..40556e72020b 100644
--- a/util/tube.c
+++ b/util/tube.c
@@ -363,7 +363,11 @@ int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len,
}
d += r;
}
- log_assert(*len < 65536*2);
+ if (*len >= 65536*2) {
+ log_err("tube msg length %u is too big", (unsigned)*len);
+ (void)fd_set_nonblock(fd);
+ return 0;
+ }
*buf = (uint8_t*)malloc(*len);
if(!*buf) {
log_err("tube read out of memory");
diff --git a/util/ub_event.c b/util/ub_event.c
index 68f633bb0ef2..8cd87ec4e1d4 100644
--- a/util/ub_event.c
+++ b/util/ub_event.c
@@ -1,5 +1,5 @@
/*
- * util/ub_event.c - directly call libevent (compatability) functions
+ * util/ub_event.c - directly call libevent (compatibility) functions
*
* Copyright (c) 2007, NLnet Labs. All rights reserved.
*
diff --git a/validator/autotrust.c b/validator/autotrust.c
index 9643a3ddb38b..55e82c176dae 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -2377,7 +2377,9 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp)
edns.ext_rcode = 0;
edns.edns_version = 0;
edns.bits = EDNS_DO;
- edns.opt_list = NULL;
+ edns.opt_list_in = NULL;
+ edns.opt_list_out = NULL;
+ edns.opt_list_inplace_cb_out = NULL;
edns.padding_block_size = 0;
if(sldns_buffer_capacity(buf) < 65535)
edns.udp_size = (uint16_t)sldns_buffer_capacity(buf);
diff --git a/validator/validator.c b/validator/validator.c
index d4d48d956895..e6307284fb0e 100644
--- a/validator/validator.c
+++ b/validator/validator.c
@@ -140,7 +140,7 @@ val_apply_cfg(struct module_env* env, struct val_env* val_env,
val_env->max_restart = cfg->val_max_restart;
c = cfg_count_numbers(cfg->val_nsec3_key_iterations);
if(c < 1 || (c&1)) {
- log_err("validator: unparseable or odd nsec3 key "
+ log_err("validator: unparsable or odd nsec3 key "
"iterations: %s", cfg->val_nsec3_key_iterations);
return 0;
}
@@ -484,7 +484,7 @@ generate_keytag_query(struct module_qstate* qstate, int id,
return 0;
}
- /* Not interrested in subquery response. Restore the ext_state,
+ /* Not interested in subquery response. Restore the ext_state,
* that might be changed by generate_request() */
qstate->ext_state[id] = ext_state;
diff --git a/validator/validator.h b/validator/validator.h
index a928e10a65d8..a97eab25bc4a 100644
--- a/validator/validator.h
+++ b/validator/validator.h
@@ -68,7 +68,7 @@ struct config_strlist;
#define SENTINEL_IS "root-key-sentinel-is-ta-"
/** Root key sentinel is not ta preamble */
#define SENTINEL_NOT "root-key-sentinel-not-ta-"
-/** Root key sentinal keytag length */
+/** Root key sentinel keytag length */
#define SENTINEL_KEYTAG_LEN 5
/**