Warning: Permanently added '2620:52:3:1:dead:beef:cafe:c157' (ED25519) to the list of known hosts. You can reproduce this build on your computer by running: sudo dnf install copr-rpmbuild /usr/bin/copr-rpmbuild --verbose --drop-resultdir --task-url https://copr.fedorainfracloud.org/backend/get-build-task/9281152-fedora-rawhide-i386 --chroot fedora-rawhide-i386 Version: 1.3 PID: 3642 Logging PID: 3643 Task: {'allow_user_ssh': False, 'appstream': False, 'background': False, 'build_id': 9281152, 'buildroot_pkgs': [], 'chroot': 'fedora-rawhide-i386', 'enable_net': True, 'fedora_review': False, 'git_hash': '0e64da532640abd3f78f0c18466d064c7978fc8f', 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/packit/evverx-scapy-2/scapy', 'isolation': 'default', 'memory_reqs': 2048, 'package_name': 'scapy', 'package_version': '2.5.0-1.20250717040547795248.pr2.586.g0bf80167', 'project_dirname': 'evverx-scapy-2', 'project_name': 'evverx-scapy-2', 'project_owner': 'packit', 'repo_priority': None, 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/packit/evverx-scapy-2/fedora-rawhide-i386/', 'id': 'copr_base', 'name': 'Copr repository', 'priority': None}], 'sandbox': 'packit/evverx-scapy-2--packit', 'source_json': {}, 'source_type': None, 'ssh_public_keys': None, 'storage': 0, 'submitter': 'packit', 'tags': [], 'task_id': '9281152-fedora-rawhide-i386', 'timeout': 18000, 'uses_devel_repo': False, 'with_opts': [], 'without_opts': []} Running: git clone https://copr-dist-git.fedorainfracloud.org/git/packit/evverx-scapy-2/scapy /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/packit/evverx-scapy-2/scapy', '/var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy'... Running: git checkout 0e64da532640abd3f78f0c18466d064c7978fc8f -- cmd: ['git', 'checkout', '0e64da532640abd3f78f0c18466d064c7978fc8f', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy rc: 0 stdout: stderr: Note: switching to '0e64da532640abd3f78f0c18466d064c7978fc8f'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 0e64da5 automatic import of scapy Running: dist-git-client sources cmd: ['dist-git-client', 'sources'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy rc: 0 stdout: stderr: INFO: Reading stdout from command: git rev-parse --abbrev-ref HEAD INFO: Reading stdout from command: git rev-parse HEAD tail: /var/lib/copr-rpmbuild/main.log: file truncated INFO: Reading sources specification file: sources INFO: Downloading scapy-2.5.0.tar.gz INFO: Reading stdout from command: curl --help all INFO: Calling: curl -H Pragma: -o scapy-2.5.0.tar.gz --location --connect-timeout 60 --retry 3 --retry-delay 10 --remote-time --show-error --fail --retry-all-errors https://copr-dist-git.fedorainfracloud.org/repo/pkgs/packit/evverx-scapy-2/scapy/scapy-2.5.0.tar.gz/md5/ad1981afee9ee0234aa0544bb1debc2a/scapy-2.5.0.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7078k 100 7078k 0 0 33.1M 0 --:--:-- --:--:-- --:--:-- 33.0M INFO: Reading stdout from command: md5sum scapy-2.5.0.tar.gz Running (timeout=18000): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy/scapy.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1752725198.853093 -r /var/lib/copr-rpmbuild/results/configs/child.cfg INFO: mock.py version 6.3 starting (python version = 3.13.3, NVR = mock-6.3-1.fc42), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy/scapy.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1752725198.853093 -r /var/lib/copr-rpmbuild/results/configs/child.cfg Start(bootstrap): init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish(bootstrap): init plugins Start: init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy/scapy.spec) Config(fedora-rawhide-i686) Start: clean chroot Finish: clean chroot Mock Version: 6.3 INFO: Mock Version: 6.3 Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-i686-bootstrap-1752725198.853093/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata INFO: Guessed host environment type: unknown INFO: Using container image: registry.fedoraproject.org/fedora:rawhide INFO: Pulling image: registry.fedoraproject.org/fedora:rawhide INFO: Tagging container image as mock-bootstrap-b64c1bd4-d61e-497c-9a7f-8a9e7b8d4ee4 INFO: Checking that 8a9e7417befd54e6fe25d234b48d379dd6c98337fd259045a2ca002108454350 image matches host's architecture INFO: Copy content of container 8a9e7417befd54e6fe25d234b48d379dd6c98337fd259045a2ca002108454350 to /var/lib/mock/fedora-rawhide-i686-bootstrap-1752725198.853093/root INFO: mounting 8a9e7417befd54e6fe25d234b48d379dd6c98337fd259045a2ca002108454350 with podman image mount INFO: image 8a9e7417befd54e6fe25d234b48d379dd6c98337fd259045a2ca002108454350 as /var/lib/containers/storage/overlay/bc64c56d3a65d7cc1a9aed6d681ac8bfb7978538cea883f68ceb9ea3c22600ca/merged INFO: umounting image 8a9e7417befd54e6fe25d234b48d379dd6c98337fd259045a2ca002108454350 (/var/lib/containers/storage/overlay/bc64c56d3a65d7cc1a9aed6d681ac8bfb7978538cea883f68ceb9ea3c22600ca/merged) with podman image umount INFO: Removing image mock-bootstrap-b64c1bd4-d61e-497c-9a7f-8a9e7b8d4ee4 INFO: Package manager dnf5 detected and used (fallback) INFO: Not updating bootstrap chroot, bootstrap_image_ready=True Start(bootstrap): creating root cache Finish(bootstrap): creating root cache Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-i686-1752725198.853093/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (direct choice) INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-5.99.91-1.fc43.x86_64 rpm-sequoia-1.9.0-1.fc43.x86_64 dnf5-5.2.15.0-1.fc43.x86_64 dnf5-plugins-5.2.15.0-1.fc43.x86_64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: Copr repository 100% | 10.1 KiB/s | 1.6 KiB | 00m00s local 100% | 22.0 MiB/s | 12.7 MiB | 00m01s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash i686 5.2.37-3.fc43 local 8.3 MiB bzip2 i686 1.0.8-20.fc42 local 89.6 KiB coreutils i686 9.7-4.fc43 local 5.3 MiB cpio i686 2.15-2.fc41 local 1.1 MiB diffutils i686 3.12-2.fc43 local 1.5 MiB fedora-release noarch 43-0.16 local 0.0 B findutils i686 1:4.10.0-5.fc42 local 1.9 MiB gawk i686 5.3.2-1.fc43 local 1.8 MiB glibc-minimal-langpack i686 2.41.9000-20.fc43 local 0.0 B grep i686 3.12-1.fc43 local 1.0 MiB gzip i686 1.13-3.fc42 local 387.9 KiB info i686 7.2-4.fc43 local 360.4 KiB patch i686 2.8-1.fc43 local 233.8 KiB redhat-rpm-config noarch 343-6.fc43 local 181.4 KiB rpm-build i686 5.99.91-1.fc43 local 265.4 KiB sed i686 4.9-4.fc42 local 860.4 KiB shadow-utils i686 2:4.17.4-4.fc43 local 3.9 MiB tar i686 2:1.35-5.fc42 local 3.0 MiB unzip i686 6.0-66.fc42 local 387.7 KiB util-linux i686 2.41.1-11.fc43 local 3.3 MiB which i686 2.23-2.fc43 local 78.1 KiB xz i686 1:5.8.1-1.fc43 local 1.3 MiB Installing dependencies: add-determinism i686 0.6.0-1.fc43 local 2.4 MiB alternatives i686 1.33-1.fc43 local 61.4 KiB ansible-srpm-macros noarch 1-17.1.fc42 local 35.7 KiB audit-libs i686 4.1.0-1.fc43 local 384.5 KiB binutils i686 2.44-3.fc43 local 26.0 MiB build-reproducibility-srpm-macros noarch 0.6.0-1.fc43 local 735.0 B bzip2-libs i686 1.0.8-20.fc42 local 83.8 KiB ca-certificates noarch 2024.2.69_v8.0.401-5.fc42 local 2.6 MiB coreutils-common i686 9.7-4.fc43 local 11.3 MiB crypto-policies noarch 20250714-1.gitcd6043a.fc43 local 146.9 KiB curl i686 8.15.0-1.fc43 local 476.8 KiB cyrus-sasl-lib i686 2.1.28-30.fc42 local 2.5 MiB debugedit i686 5.2-1.fc43 local 207.3 KiB dwz i686 0.16-1.fc43 local 305.0 KiB ed i686 1.21.1-1.fc43 local 141.6 KiB efi-srpm-macros noarch 6-3.fc43 local 40.1 KiB elfutils i686 0.193-2.fc43 local 2.6 MiB elfutils-debuginfod-client i686 0.193-2.fc43 local 74.3 KiB elfutils-default-yama-scope noarch 0.193-2.fc43 local 1.8 KiB elfutils-libelf i686 0.193-2.fc43 local 1.2 MiB elfutils-libs i686 0.193-2.fc43 local 733.9 KiB fedora-gpg-keys noarch 43-0.2 local 129.0 KiB fedora-release-common noarch 43-0.16 local 20.4 KiB fedora-release-identity-basic noarch 43-0.16 local 664.0 B fedora-repos noarch 43-0.2 local 4.9 KiB fedora-repos-rawhide noarch 43-0.2 local 2.2 KiB file i686 5.46-5.fc43 local 95.2 KiB file-libs i686 5.46-5.fc43 local 11.9 MiB filesystem i686 3.18-44.fc43 local 94.0 B filesystem-srpm-macros noarch 3.18-44.fc43 local 38.2 KiB fonts-srpm-macros noarch 1:2.0.5-22.fc43 local 55.8 KiB forge-srpm-macros noarch 0.4.0-2.fc42 local 38.9 KiB fpc-srpm-macros noarch 1.3-14.fc42 local 144.0 B gdb-minimal i686 16.3-3.fc43 local 13.8 MiB gdbm-libs i686 1:1.23-9.fc42 local 128.4 KiB ghc-srpm-macros noarch 1.9.2-2.fc42 local 779.0 B glibc i686 2.41.9000-20.fc43 local 5.5 MiB glibc-common i686 2.41.9000-20.fc43 local 1.0 MiB glibc-gconv-extra i686 2.41.9000-20.fc43 local 6.7 MiB gmp i686 1:6.3.0-3.fc43 local 734.2 KiB gnat-srpm-macros noarch 6-7.fc42 local 1.0 KiB gnupg2 i686 2.4.8-2.fc43 local 6.6 MiB gnupg2-dirmngr i686 2.4.8-2.fc43 local 646.0 KiB gnupg2-gpg-agent i686 2.4.8-2.fc43 local 681.0 KiB gnupg2-gpgconf i686 2.4.8-2.fc43 local 245.9 KiB gnupg2-keyboxd i686 2.4.8-2.fc43 local 196.0 KiB gnupg2-verify i686 2.4.8-2.fc43 local 359.4 KiB gnutls i686 3.8.10-1.fc43 local 3.8 MiB go-srpm-macros noarch 3.6.0-7.fc43 local 60.8 KiB gpgverify noarch 2.2-2.fc43 local 8.7 KiB ima-evm-utils-libs i686 1.6.2-5.fc43 local 51.9 KiB jansson i686 2.14-2.fc42 local 92.3 KiB java-srpm-macros noarch 1-6.fc43 local 870.0 B json-c i686 0.18-4.fc43 local 85.9 KiB kernel-srpm-macros noarch 1.0-25.fc42 local 1.9 KiB keyutils-libs i686 1.6.3-5.fc42 local 57.5 KiB krb5-libs i686 1.21.3-6.fc43 local 2.3 MiB libacl i686 2.3.2-3.fc42 local 37.6 KiB libarchive i686 3.8.1-1.fc43 local 1.0 MiB libassuan i686 2.5.7-3.fc42 local 167.0 KiB libattr i686 2.5.2-5.fc42 local 26.4 KiB libblkid i686 2.41.1-11.fc43 local 285.4 KiB libbrotli i686 1.1.0-7.fc43 local 855.1 KiB libcap i686 2.76-1.fc43 local 193.8 KiB libcap-ng i686 0.8.5-5.fc43 local 67.4 KiB libcom_err i686 1.47.3-1.fc43 local 62.3 KiB libcurl i686 8.15.0-1.fc43 local 937.7 KiB libeconf i686 0.7.9-1.fc43 local 64.1 KiB libevent i686 2.1.12-15.fc42 local 959.3 KiB libfdisk i686 2.41.1-11.fc43 local 423.8 KiB libffi i686 3.5.1-1.fc43 local 78.7 KiB libfsverity i686 1.6-2.fc42 local 27.8 KiB libgcc i686 15.1.1-2.fc43 local 297.6 KiB libgcrypt i686 1.11.1-1.fc43 local 1.2 MiB libgomp i686 15.1.1-2.fc43 local 538.1 KiB libgpg-error i686 1.55-1.fc43 local 917.5 KiB libidn2 i686 2.3.8-1.fc43 local 551.8 KiB libksba i686 1.6.7-3.fc42 local 401.9 KiB liblastlog2 i686 2.41.1-11.fc43 local 32.3 KiB libmount i686 2.41.1-11.fc43 local 407.8 KiB libnghttp2 i686 1.66.0-1.fc43 local 161.5 KiB libpkgconf i686 2.3.0-2.fc42 local 76.6 KiB libpsl i686 0.21.5-5.fc42 local 75.7 KiB libselinux i686 3.9-1.fc43 local 212.4 KiB libsemanage i686 3.9-1.fc43 local 319.9 KiB libsepol i686 3.9-1.fc43 local 873.3 KiB libsmartcols i686 2.41.1-11.fc43 local 187.8 KiB libssh i686 0.11.2-1.fc43 local 612.6 KiB libssh-config noarch 0.11.2-1.fc43 local 277.0 B libstdc++ i686 15.1.1-2.fc43 local 2.8 MiB libtasn1 i686 4.20.0-1.fc43 local 175.5 KiB libtool-ltdl i686 2.5.4-5.fc43 local 69.4 KiB libunistring i686 1.1-9.fc42 local 1.7 MiB libusb1 i686 1.0.28-2.fc43 local 178.3 KiB libuuid i686 2.41.1-11.fc43 local 40.6 KiB libverto i686 0.3.2-10.fc42 local 24.7 KiB libxcrypt i686 4.4.38-7.fc43 local 295.8 KiB libxml2 i686 2.12.10-2.fc43 local 1.8 MiB libzstd i686 1.5.7-1.fc43 local 771.4 KiB lua-libs i686 5.4.8-1.fc43 local 308.4 KiB lua-srpm-macros noarch 1-15.fc42 local 1.3 KiB lz4-libs i686 1.10.0-2.fc42 local 156.7 KiB mpfr i686 4.2.2-1.fc43 local 963.2 KiB ncurses-base noarch 6.5-6.20250614.fc43 local 328.1 KiB ncurses-libs i686 6.5-6.20250614.fc43 local 945.6 KiB nettle i686 3.10.1-1.fc43 local 776.7 KiB npth i686 1.8-2.fc42 local 48.9 KiB ocaml-srpm-macros noarch 10-4.fc42 local 1.9 KiB openblas-srpm-macros noarch 2-19.fc42 local 112.0 B openldap i686 2.6.10-2.fc43 local 673.0 KiB openssl-libs i686 1:3.5.1-1.fc43 local 7.3 MiB p11-kit i686 0.25.5-8.fc43 local 2.3 MiB p11-kit-trust i686 0.25.5-8.fc43 local 357.5 KiB package-notes-srpm-macros noarch 0.5-13.fc42 local 1.6 KiB pam-libs i686 1.7.1-2.fc43 local 128.5 KiB pcre2 i686 10.45-1.fc43 local 688.1 KiB pcre2-syntax noarch 10.45-1.fc43 local 273.9 KiB perl-srpm-macros noarch 1-59.fc43 local 861.0 B pkgconf i686 2.3.0-2.fc42 local 82.9 KiB pkgconf-m4 noarch 2.3.0-2.fc42 local 14.4 KiB pkgconf-pkg-config i686 2.3.0-2.fc42 local 979.0 B popt i686 1.19-8.fc42 local 135.8 KiB publicsuffix-list-dafsa noarch 20250616-1.fc43 local 69.1 KiB pyproject-srpm-macros noarch 1.18.3-1.fc43 local 1.9 KiB python-srpm-macros noarch 3.14-2.fc43 local 51.5 KiB qt5-srpm-macros noarch 5.15.17-1.fc43 local 500.0 B qt6-srpm-macros noarch 6.9.1-1.fc43 local 464.0 B readline i686 8.2-13.fc43 local 457.2 KiB rpm i686 5.99.91-1.fc43 local 3.0 MiB rpm-build-libs i686 5.99.91-1.fc43 local 267.1 KiB rpm-libs i686 5.99.91-1.fc43 local 952.9 KiB rpm-sequoia i686 1.9.0-1.fc43 local 2.8 MiB rpm-sign-libs i686 5.99.91-1.fc43 local 30.9 KiB rust-srpm-macros noarch 26.3-4.fc42 local 4.8 KiB setup noarch 2.15.0-25.fc43 local 725.0 KiB sqlite-libs i686 3.50.2-1.fc43 local 1.6 MiB systemd-libs i686 257.7-1.fc43 local 2.2 MiB systemd-standalone-sysusers i686 257.7-1.fc43 local 272.5 KiB tpm2-tss i686 4.1.3-7.fc43 local 1.6 MiB tree-sitter-srpm-macros noarch 0.4.1-1.fc43 local 8.2 KiB util-linux-core i686 2.41.1-11.fc43 local 1.4 MiB xxhash-libs i686 0.8.3-2.fc42 local 113.5 KiB xz-libs i686 1:5.8.1-1.fc43 local 233.2 KiB zig-srpm-macros noarch 1-4.fc42 local 1.1 KiB zip i686 3.0-43.fc42 local 694.3 KiB zlib-ng-compat i686 2.2.4-2.fc43 local 156.9 KiB zstd i686 1.5.7-1.fc43 local 1.7 MiB Installing groups: build Transaction Summary: Installing: 169 packages Total size of inbound packages is 60 MiB. Need to download 60 MiB. After this operation, 195 MiB extra will be used (install 195 MiB, remove 0 B). [ 1/169] bzip2-0:1.0.8-20.fc42.i686 100% | 466.5 KiB/s | 52.7 KiB | 00m00s [ 2/169] cpio-0:2.15-2.fc41.i686 100% | 4.3 MiB/s | 290.8 KiB | 00m00s [ 3/169] coreutils-0:9.7-4.fc43.i686 100% | 6.3 MiB/s | 1.2 MiB | 00m00s [ 4/169] fedora-release-0:43-0.16.noar 100% | 619.2 KiB/s | 14.9 KiB | 00m00s [ 5/169] bash-0:5.2.37-3.fc43.i686 100% | 8.4 MiB/s | 1.8 MiB | 00m00s [ 6/169] diffutils-0:3.12-2.fc43.i686 100% | 8.3 MiB/s | 390.6 KiB | 00m00s [ 7/169] findutils-1:4.10.0-5.fc42.i68 100% | 20.0 MiB/s | 551.9 KiB | 00m00s [ 8/169] glibc-minimal-langpack-0:2.41 100% | 1.3 MiB/s | 32.6 KiB | 00m00s [ 9/169] grep-0:3.12-1.fc43.i686 100% | 11.0 MiB/s | 293.6 KiB | 00m00s [ 10/169] gzip-0:1.13-3.fc42.i686 100% | 6.9 MiB/s | 162.6 KiB | 00m00s [ 11/169] info-0:7.2-4.fc43.i686 100% | 7.6 MiB/s | 185.7 KiB | 00m00s [ 12/169] patch-0:2.8-1.fc43.i686 100% | 5.0 MiB/s | 118.3 KiB | 00m00s [ 13/169] redhat-rpm-config-0:343-6.fc4 100% | 3.0 MiB/s | 72.9 KiB | 00m00s [ 14/169] rpm-build-0:5.99.91-1.fc43.i6 100% | 5.5 MiB/s | 129.6 KiB | 00m00s [ 15/169] sed-0:4.9-4.fc42.i686 100% | 13.8 MiB/s | 310.6 KiB | 00m00s [ 16/169] tar-2:1.35-5.fc42.i686 100% | 30.2 MiB/s | 866.8 KiB | 00m00s [ 17/169] shadow-utils-2:4.17.4-4.fc43. 100% | 24.8 MiB/s | 1.2 MiB | 00m00s [ 18/169] unzip-0:6.0-66.fc42.i686 100% | 8.1 MiB/s | 181.4 KiB | 00m00s [ 19/169] which-0:2.23-2.fc43.i686 100% | 1.8 MiB/s | 41.8 KiB | 00m00s [ 20/169] xz-1:5.8.1-1.fc43.i686 100% | 19.6 MiB/s | 561.6 KiB | 00m00s [ 21/169] util-linux-0:2.41.1-11.fc43.i 100% | 10.3 MiB/s | 1.2 MiB | 00m00s [ 22/169] filesystem-0:3.18-44.fc43.i68 100% | 12.9 MiB/s | 1.3 MiB | 00m00s [ 23/169] glibc-0:2.41.9000-20.fc43.i68 100% | 27.9 MiB/s | 2.0 MiB | 00m00s [ 24/169] bzip2-libs-0:1.0.8-20.fc42.i6 100% | 2.1 MiB/s | 43.4 KiB | 00m00s [ 25/169] ncurses-libs-0:6.5-6.20250614 100% | 8.2 MiB/s | 353.3 KiB | 00m00s [ 26/169] gmp-1:6.3.0-3.fc43.i686 100% | 7.3 MiB/s | 313.3 KiB | 00m00s [ 27/169] gawk-0:5.3.2-1.fc43.i686 100% | 2.6 MiB/s | 1.1 MiB | 00m00s [ 28/169] coreutils-common-0:9.7-4.fc43 100% | 31.0 MiB/s | 2.1 MiB | 00m00s [ 29/169] libacl-0:2.3.2-3.fc42.i686 100% | 1.2 MiB/s | 24.3 KiB | 00m00s [ 30/169] libattr-0:2.5.2-5.fc42.i686 100% | 907.0 KiB/s | 17.2 KiB | 00m00s [ 31/169] libcap-0:2.76-1.fc43.i686 100% | 3.9 MiB/s | 88.8 KiB | 00m00s [ 32/169] libselinux-0:3.9-1.fc43.i686 100% | 4.8 MiB/s | 102.2 KiB | 00m00s [ 33/169] fedora-release-common-0:43-0. 100% | 1.1 MiB/s | 25.9 KiB | 00m00s [ 34/169] systemd-libs-0:257.7-1.fc43.i 100% | 20.9 MiB/s | 834.9 KiB | 00m00s [ 35/169] readline-0:8.2-13.fc43.i686 100% | 9.3 MiB/s | 218.2 KiB | 00m00s [ 36/169] mpfr-0:4.2.2-1.fc43.i686 100% | 8.7 MiB/s | 385.1 KiB | 00m00s [ 37/169] glibc-common-0:2.41.9000-20.f 100% | 11.3 MiB/s | 325.4 KiB | 00m00s [ 38/169] pcre2-0:10.45-1.fc43.i686 100% | 6.4 MiB/s | 257.1 KiB | 00m00s [ 39/169] ed-0:1.21.1-1.fc43.i686 100% | 3.6 MiB/s | 81.4 KiB | 00m00s [ 40/169] ansible-srpm-macros-0:1-17.1. 100% | 1.0 MiB/s | 20.3 KiB | 00m00s [ 41/169] build-reproducibility-srpm-ma 100% | 584.2 KiB/s | 11.7 KiB | 00m00s [ 42/169] dwz-0:0.16-1.fc43.i686 100% | 6.5 MiB/s | 139.4 KiB | 00m00s [ 43/169] efi-srpm-macros-0:6-3.fc43.no 100% | 1.1 MiB/s | 22.5 KiB | 00m00s [ 44/169] openssl-libs-1:3.5.1-1.fc43.i 100% | 14.5 MiB/s | 2.6 MiB | 00m00s [ 45/169] file-0:5.46-5.fc43.i686 100% | 2.3 MiB/s | 48.8 KiB | 00m00s [ 46/169] filesystem-srpm-macros-0:3.18 100% | 1.3 MiB/s | 26.0 KiB | 00m00s [ 47/169] fonts-srpm-macros-1:2.0.5-22. 100% | 1.3 MiB/s | 27.2 KiB | 00m00s [ 48/169] forge-srpm-macros-0:0.4.0-2.f 100% | 1.0 MiB/s | 19.9 KiB | 00m00s [ 49/169] fpc-srpm-macros-0:1.3-14.fc42 100% | 445.5 KiB/s | 8.0 KiB | 00m00s [ 50/169] ghc-srpm-macros-0:1.9.2-2.fc4 100% | 508.7 KiB/s | 9.2 KiB | 00m00s [ 51/169] gnat-srpm-macros-0:6-7.fc42.n 100% | 453.2 KiB/s | 8.6 KiB | 00m00s [ 52/169] go-srpm-macros-0:3.6.0-7.fc43 100% | 1.3 MiB/s | 27.6 KiB | 00m00s [ 53/169] java-srpm-macros-0:1-6.fc43.n 100% | 374.6 KiB/s | 7.9 KiB | 00m00s [ 54/169] kernel-srpm-macros-0:1.0-25.f 100% | 548.4 KiB/s | 9.9 KiB | 00m00s [ 55/169] lua-srpm-macros-0:1-15.fc42.n 100% | 495.4 KiB/s | 8.9 KiB | 00m00s [ 56/169] ocaml-srpm-macros-0:10-4.fc42 100% | 484.5 KiB/s | 9.2 KiB | 00m00s [ 57/169] openblas-srpm-macros-0:2-19.f 100% | 408.7 KiB/s | 7.8 KiB | 00m00s [ 58/169] package-notes-srpm-macros-0:0 100% | 487.4 KiB/s | 9.3 KiB | 00m00s [ 59/169] perl-srpm-macros-0:1-59.fc43. 100% | 423.1 KiB/s | 8.5 KiB | 00m00s [ 60/169] pyproject-srpm-macros-0:1.18. 100% | 665.5 KiB/s | 13.3 KiB | 00m00s [ 61/169] python-srpm-macros-0:3.14-2.f 100% | 1.1 MiB/s | 23.2 KiB | 00m00s [ 62/169] qt5-srpm-macros-0:5.15.17-1.f 100% | 435.9 KiB/s | 8.7 KiB | 00m00s [ 63/169] qt6-srpm-macros-0:6.9.1-1.fc4 100% | 469.3 KiB/s | 9.4 KiB | 00m00s [ 64/169] rpm-0:5.99.91-1.fc43.i686 100% | 20.0 MiB/s | 533.8 KiB | 00m00s [ 65/169] rust-srpm-macros-0:26.3-4.fc4 100% | 585.3 KiB/s | 11.7 KiB | 00m00s [ 66/169] tree-sitter-srpm-macros-0:0.4 100% | 620.4 KiB/s | 13.0 KiB | 00m00s [ 67/169] zig-srpm-macros-0:1-4.fc42.no 100% | 433.9 KiB/s | 8.2 KiB | 00m00s [ 68/169] zip-0:3.0-43.fc42.i686 100% | 12.4 MiB/s | 266.0 KiB | 00m00s [ 69/169] debugedit-0:5.2-1.fc43.i686 100% | 3.8 MiB/s | 84.7 KiB | 00m00s [ 70/169] elfutils-libelf-0:0.193-2.fc4 100% | 9.1 MiB/s | 214.1 KiB | 00m00s [ 71/169] elfutils-0:0.193-2.fc43.i686 100% | 13.4 MiB/s | 576.2 KiB | 00m00s [ 72/169] libarchive-0:3.8.1-1.fc43.i68 100% | 16.1 MiB/s | 462.9 KiB | 00m00s [ 73/169] libgcc-0:15.1.1-2.fc43.i686 100% | 5.9 MiB/s | 144.6 KiB | 00m00s [ 74/169] pkgconf-pkg-config-0:2.3.0-2. 100% | 394.8 KiB/s | 9.9 KiB | 00m00s [ 75/169] libstdc++-0:15.1.1-2.fc43.i68 100% | 22.7 MiB/s | 977.2 KiB | 00m00s [ 76/169] popt-0:1.19-8.fc42.i686 100% | 3.2 MiB/s | 61.5 KiB | 00m00s [ 77/169] rpm-build-libs-0:5.99.91-1.fc 100% | 6.0 MiB/s | 134.8 KiB | 00m00s [ 78/169] rpm-libs-0:5.99.91-1.fc43.i68 100% | 17.5 MiB/s | 431.2 KiB | 00m00s [ 79/169] zstd-0:1.5.7-1.fc43.i686 100% | 18.5 MiB/s | 492.7 KiB | 00m00s [ 80/169] audit-libs-0:4.1.0-1.fc43.i68 100% | 6.1 MiB/s | 142.7 KiB | 00m00s [ 81/169] libeconf-0:0.7.9-1.fc43.i686 100% | 1.7 MiB/s | 37.2 KiB | 00m00s [ 82/169] libsemanage-0:3.9-1.fc43.i686 100% | 5.9 MiB/s | 133.1 KiB | 00m00s [ 83/169] libxcrypt-0:4.4.38-7.fc43.i68 100% | 5.3 MiB/s | 129.7 KiB | 00m00s [ 84/169] pam-libs-0:1.7.1-2.fc43.i686 100% | 2.7 MiB/s | 60.2 KiB | 00m00s [ 85/169] setup-0:2.15.0-25.fc43.noarch 100% | 6.2 MiB/s | 151.5 KiB | 00m00s [ 86/169] libblkid-0:2.41.1-11.fc43.i68 100% | 6.1 MiB/s | 136.4 KiB | 00m00s [ 87/169] libcap-ng-0:0.8.5-5.fc43.i686 100% | 1.5 MiB/s | 32.8 KiB | 00m00s [ 88/169] libfdisk-0:2.41.1-11.fc43.i68 100% | 7.7 MiB/s | 180.4 KiB | 00m00s [ 89/169] liblastlog2-0:2.41.1-11.fc43. 100% | 1.2 MiB/s | 24.9 KiB | 00m00s [ 90/169] libmount-0:2.41.1-11.fc43.i68 100% | 7.3 MiB/s | 172.6 KiB | 00m00s [ 91/169] libsmartcols-0:2.41.1-11.fc43 100% | 3.7 MiB/s | 88.1 KiB | 00m00s [ 92/169] libuuid-0:2.41.1-11.fc43.i686 100% | 1.4 MiB/s | 28.8 KiB | 00m00s [ 93/169] util-linux-core-0:2.41.1-11.f 100% | 21.5 MiB/s | 551.2 KiB | 00m00s [ 94/169] zlib-ng-compat-0:2.2.4-2.fc43 100% | 3.7 MiB/s | 86.3 KiB | 00m00s [ 95/169] xz-libs-1:5.8.1-1.fc43.i686 100% | 5.8 MiB/s | 123.7 KiB | 00m00s [ 96/169] ncurses-base-0:6.5-6.20250614 100% | 2.6 MiB/s | 63.8 KiB | 00m00s [ 97/169] binutils-0:2.44-3.fc43.i686 100% | 15.0 MiB/s | 6.0 MiB | 00m00s [ 98/169] libsepol-0:3.9-1.fc43.i686 100% | 13.9 MiB/s | 356.6 KiB | 00m00s [ 99/169] glibc-gconv-extra-0:2.41.9000 100% | 18.7 MiB/s | 1.6 MiB | 00m00s [100/169] crypto-policies-0:20250714-1. 100% | 3.5 MiB/s | 75.2 KiB | 00m00s [101/169] fedora-repos-0:43-0.2.noarch 100% | 439.5 KiB/s | 9.2 KiB | 00m00s [102/169] pcre2-syntax-0:10.45-1.fc43.n 100% | 7.2 MiB/s | 161.7 KiB | 00m00s [103/169] ca-certificates-0:2024.2.69_v 100% | 15.4 MiB/s | 945.0 KiB | 00m00s [104/169] curl-0:8.15.0-1.fc43.i686 100% | 10.2 MiB/s | 241.4 KiB | 00m00s [105/169] file-libs-0:5.46-5.fc43.i686 100% | 21.5 MiB/s | 857.4 KiB | 00m00s [106/169] add-determinism-0:0.6.0-1.fc4 100% | 15.6 MiB/s | 961.0 KiB | 00m00s [107/169] alternatives-0:1.33-1.fc43.i6 100% | 1.8 MiB/s | 41.0 KiB | 00m00s [108/169] elfutils-debuginfod-client-0: 100% | 2.2 MiB/s | 48.2 KiB | 00m00s [109/169] jansson-0:2.14-2.fc42.i686 100% | 2.4 MiB/s | 47.1 KiB | 00m00s [110/169] elfutils-libs-0:0.193-2.fc43. 100% | 13.5 MiB/s | 304.6 KiB | 00m00s [111/169] libzstd-0:1.5.7-1.fc43.i686 100% | 13.1 MiB/s | 307.8 KiB | 00m00s [112/169] lz4-libs-0:1.10.0-2.fc42.i686 100% | 3.9 MiB/s | 78.9 KiB | 00m00s [113/169] pkgconf-0:2.3.0-2.fc42.i686 100% | 2.3 MiB/s | 45.1 KiB | 00m00s [114/169] libxml2-0:2.12.10-2.fc43.i686 100% | 16.6 MiB/s | 732.5 KiB | 00m00s [115/169] pkgconf-m4-0:2.3.0-2.fc42.noa 100% | 749.2 KiB/s | 14.2 KiB | 00m00s [116/169] libgomp-0:15.1.1-2.fc43.i686 100% | 15.6 MiB/s | 368.0 KiB | 00m00s [117/169] lua-libs-0:5.4.8-1.fc43.i686 100% | 6.3 MiB/s | 148.9 KiB | 00m00s [118/169] rpm-sign-libs-0:5.99.91-1.fc4 100% | 1.3 MiB/s | 28.7 KiB | 00m00s [119/169] libffi-0:3.5.1-1.fc43.i686 100% | 1.5 MiB/s | 38.9 KiB | 00m00s [120/169] rpm-sequoia-0:1.9.0-1.fc43.i6 100% | 24.1 MiB/s | 1.0 MiB | 00m00s [121/169] sqlite-libs-0:3.50.2-1.fc43.i 100% | 17.5 MiB/s | 804.2 KiB | 00m00s [122/169] p11-kit-trust-0:0.25.5-8.fc43 100% | 6.1 MiB/s | 137.5 KiB | 00m00s [123/169] fedora-gpg-keys-0:43-0.2.noar 100% | 5.9 MiB/s | 125.8 KiB | 00m00s [124/169] p11-kit-0:0.25.5-8.fc43.i686 100% | 11.1 MiB/s | 477.1 KiB | 00m00s [125/169] fedora-repos-rawhide-0:43-0.2 100% | 440.2 KiB/s | 8.8 KiB | 00m00s [126/169] json-c-0:0.18-4.fc43.i686 100% | 2.2 MiB/s | 48.0 KiB | 00m00s [127/169] elfutils-default-yama-scope-0 100% | 599.3 KiB/s | 12.6 KiB | 00m00s [128/169] libpkgconf-0:2.3.0-2.fc42.i68 100% | 2.1 MiB/s | 41.5 KiB | 00m00s [129/169] ima-evm-utils-libs-0:1.6.2-5. 100% | 1.2 MiB/s | 30.0 KiB | 00m00s [130/169] libfsverity-0:1.6-2.fc42.i686 100% | 981.2 KiB/s | 19.6 KiB | 00m00s [131/169] libtasn1-0:4.20.0-1.fc43.i686 100% | 3.5 MiB/s | 75.9 KiB | 00m00s [132/169] gpgverify-0:2.2-2.fc43.noarch 100% | 546.1 KiB/s | 10.9 KiB | 00m00s [133/169] gnupg2-dirmngr-0:2.4.8-2.fc43 100% | 12.9 MiB/s | 290.1 KiB | 00m00s [134/169] gnupg2-gpg-agent-0:2.4.8-2.fc 100% | 12.2 MiB/s | 287.6 KiB | 00m00s [135/169] gnupg2-0:2.4.8-2.fc43.i686 100% | 20.5 MiB/s | 1.7 MiB | 00m00s [136/169] gnupg2-gpgconf-0:2.4.8-2.fc43 100% | 5.3 MiB/s | 119.4 KiB | 00m00s [137/169] gnupg2-keyboxd-0:2.4.8-2.fc43 100% | 4.5 MiB/s | 97.2 KiB | 00m00s [138/169] gnupg2-verify-0:2.4.8-2.fc43. 100% | 7.5 MiB/s | 176.0 KiB | 00m00s [139/169] libassuan-0:2.5.7-3.fc42.i686 100% | 3.4 MiB/s | 69.8 KiB | 00m00s [140/169] libgcrypt-0:1.11.1-1.fc43.i68 100% | 21.4 MiB/s | 548.5 KiB | 00m00s [141/169] libgpg-error-0:1.55-1.fc43.i6 100% | 10.3 MiB/s | 242.8 KiB | 00m00s [142/169] npth-0:1.8-2.fc42.i686 100% | 1.3 MiB/s | 26.1 KiB | 00m00s [143/169] tpm2-tss-0:4.1.3-7.fc43.i686 100% | 15.0 MiB/s | 369.0 KiB | 00m00s [144/169] libksba-0:1.6.7-3.fc42.i686 100% | 7.6 MiB/s | 164.4 KiB | 00m00s [145/169] openldap-0:2.6.10-2.fc43.i686 100% | 11.3 MiB/s | 276.7 KiB | 00m00s [146/169] libusb1-0:1.0.28-2.fc43.i686 100% | 3.9 MiB/s | 82.9 KiB | 00m00s [147/169] gnutls-0:3.8.10-1.fc43.i686 100% | 21.0 MiB/s | 1.3 MiB | 00m00s [148/169] libidn2-0:2.3.8-1.fc43.i686 100% | 7.2 MiB/s | 169.9 KiB | 00m00s [149/169] libunistring-0:1.1-9.fc42.i68 100% | 12.5 MiB/s | 550.5 KiB | 00m00s [150/169] libevent-0:2.1.12-15.fc42.i68 100% | 12.3 MiB/s | 277.8 KiB | 00m00s [151/169] cyrus-sasl-lib-0:2.1.28-30.fc 100% | 15.0 MiB/s | 857.3 KiB | 00m00s [152/169] libtool-ltdl-0:2.5.4-5.fc43.i 100% | 1.8 MiB/s | 37.9 KiB | 00m00s [153/169] gdbm-libs-1:1.23-9.fc42.i686 100% | 3.1 MiB/s | 59.7 KiB | 00m00s [154/169] nettle-0:3.10.1-1.fc43.i686 100% | 5.2 MiB/s | 440.7 KiB | 00m00s [155/169] fedora-release-identity-basic 100% | 781.5 KiB/s | 15.6 KiB | 00m00s [156/169] systemd-standalone-sysusers-0 100% | 6.4 MiB/s | 138.6 KiB | 00m00s [157/169] xxhash-libs-0:0.8.3-2.fc42.i6 100% | 2.1 MiB/s | 46.9 KiB | 00m00s [158/169] libcurl-0:8.15.0-1.fc43.i686 100% | 16.2 MiB/s | 432.1 KiB | 00m00s [159/169] libbrotli-0:1.1.0-7.fc43.i686 100% | 13.9 MiB/s | 342.6 KiB | 00m00s [160/169] krb5-libs-0:1.21.3-6.fc43.i68 100% | 18.3 MiB/s | 804.8 KiB | 00m00s [161/169] libnghttp2-0:1.66.0-1.fc43.i6 100% | 3.6 MiB/s | 77.7 KiB | 00m00s [162/169] libpsl-0:0.21.5-5.fc42.i686 100% | 3.3 MiB/s | 64.6 KiB | 00m00s [163/169] libssh-0:0.11.2-1.fc43.i686 100% | 11.1 MiB/s | 250.2 KiB | 00m00s [164/169] keyutils-libs-0:1.6.3-5.fc42. 100% | 1.6 MiB/s | 31.8 KiB | 00m00s [165/169] libcom_err-0:1.47.3-1.fc43.i6 100% | 1.3 MiB/s | 27.2 KiB | 00m00s [166/169] libverto-0:0.3.2-10.fc42.i686 100% | 1.1 MiB/s | 21.2 KiB | 00m00s [167/169] publicsuffix-list-dafsa-0:202 100% | 2.8 MiB/s | 59.2 KiB | 00m00s [168/169] libssh-config-0:0.11.2-1.fc43 100% | 421.5 KiB/s | 8.9 KiB | 00m00s [169/169] gdb-minimal-0:16.3-3.fc43.i68 100% | 10.2 MiB/s | 4.8 MiB | 00m00s -------------------------------------------------------------------------------- [169/169] Total 100% | 24.7 MiB/s | 59.6 MiB | 00m02s Running transaction [ 1/171] Verify package files 100% | 698.0 B/s | 169.0 B | 00m00s [ 2/171] Prepare transaction 100% | 1.9 KiB/s | 169.0 B | 00m00s [ 3/171] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 4/171] Installing publicsuffix-list- 100% | 68.2 MiB/s | 69.8 KiB | 00m00s [ 5/171] Installing fedora-release-ide 100% | 0.0 B/s | 920.0 B | 00m00s [ 6/171] Installing fedora-repos-rawhi 100% | 0.0 B/s | 2.4 KiB | 00m00s [ 7/171] Installing fedora-gpg-keys-0: 100% | 19.1 MiB/s | 175.9 KiB | 00m00s [ 8/171] Installing fedora-repos-0:43- 100% | 0.0 B/s | 5.7 KiB | 00m00s [ 9/171] Installing fedora-release-com 100% | 12.1 MiB/s | 24.7 KiB | 00m00s [ 10/171] Installing fedora-release-0:4 100% | 9.3 KiB/s | 124.0 B | 00m00s >>> Running sysusers scriptlet: setup-0:2.15.0-25.fc43.noarch >>> Finished sysusers scriptlet: setup-0:2.15.0-25.fc43.noarch >>> Scriptlet output: >>> Creating group 'adm' with GID 4. >>> Creating group 'audio' with GID 63. >>> Creating group 'cdrom' with GID 11. >>> Creating group 'clock' with GID 103. >>> Creating group 'dialout' with GID 18. >>> Creating group 'disk' with GID 6. >>> Creating group 'floppy' with GID 19. >>> Creating group 'ftp' with GID 50. >>> Creating group 'games' with GID 20. >>> Creating group 'input' with GID 104. >>> Creating group 'kmem' with GID 9. >>> Creating group 'kvm' with GID 36. >>> Creating group 'lock' with GID 54. >>> Creating group 'lp' with GID 7. >>> Creating group 'mail' with GID 12. >>> Creating group 'man' with GID 15. >>> Creating group 'mem' with GID 8. >>> Creating group 'nobody' with GID 65534. >>> Creating group 'render' with GID 105. >>> Creating group 'root' with GID 0. >>> Creating group 'sgx' with GID 106. >>> Creating group 'sys' with GID 3. >>> Creating group 'tape' with GID 33. >>> Creating group 'tty' with GID 5. >>> Creating group 'users' with GID 100. >>> Creating group 'utmp' with GID 22. >>> Creating group 'video' with GID 39. >>> Creating group 'wheel' with GID 10. >>> Creating user 'adm' (adm) with UID 3 and GID 4. >>> Creating group 'bin' with GID 1. >>> Creating user 'bin' (bin) with UID 1 and GID 1. >>> Creating group 'daemon' with GID 2. >>> Creating user 'daemon' (daemon) with UID 2 and GID 2. >>> Creating user 'ftp' (FTP User) with UID 14 and GID 50. >>> Creating user 'games' (games) with UID 12 and GID 100. >>> Creating user 'halt' (halt) with UID 7 and GID 0. >>> Creating user 'lp' (lp) with UID 4 and GID 7. >>> Creating user 'mail' (mail) with UID 8 and GID 12. >>> Creating user 'nobody' (Kernel Overflow User) with UID 65534 and GID 65534. >>> Creating user 'operator' (operator) with UID 11 and GID 0. >>> Creating user 'root' (Super User) with UID 0 and GID 0. >>> Creating user 'shutdown' (shutdown) with UID 6 and GID 0. >>> Creating user 'sync' (sync) with UID 5 and GID 0. >>> [ 11/171] Installing setup-0:2.15.0-25. 100% | 44.6 MiB/s | 730.6 KiB | 00m00s [ 12/171] Installing filesystem-0:3.18- 100% | 1.4 MiB/s | 212.0 KiB | 00m00s [ 13/171] Installing pkgconf-m4-0:2.3.0 100% | 14.5 MiB/s | 14.8 KiB | 00m00s [ 14/171] Installing pcre2-syntax-0:10. 100% | 135.0 MiB/s | 276.4 KiB | 00m00s [ 15/171] Installing ncurses-base-0:6.5 100% | 38.4 MiB/s | 353.5 KiB | 00m00s [ 16/171] Installing rust-srpm-macros-0 100% | 0.0 B/s | 5.6 KiB | 00m00s [ 17/171] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 740.0 B | 00m00s [ 18/171] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [ 19/171] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [ 20/171] Installing package-notes-srpm 100% | 0.0 B/s | 2.0 KiB | 00m00s [ 21/171] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [ 22/171] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.2 KiB | 00m00s [ 23/171] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [ 24/171] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [ 25/171] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [ 26/171] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [ 27/171] Installing ansible-srpm-macro 100% | 35.4 MiB/s | 36.2 KiB | 00m00s [ 28/171] Installing coreutils-common-0 100% | 245.5 MiB/s | 11.3 MiB | 00m00s [ 29/171] Installing libgcc-0:15.1.1-2. 100% | 146.2 MiB/s | 299.4 KiB | 00m00s [ 30/171] Installing bash-0:5.2.37-3.fc 100% | 212.8 MiB/s | 8.3 MiB | 00m00s [ 31/171] Installing glibc-common-0:2.4 100% | 56.8 MiB/s | 1.0 MiB | 00m00s [ 32/171] Installing glibc-gconv-extra- 100% | 136.3 MiB/s | 6.8 MiB | 00m00s [ 33/171] Installing glibc-0:2.41.9000- 100% | 125.8 MiB/s | 5.5 MiB | 00m00s [ 34/171] Installing ncurses-libs-0:6.5 100% | 154.9 MiB/s | 952.0 KiB | 00m00s [ 35/171] Installing glibc-minimal-lang 100% | 10.1 KiB/s | 124.0 B | 00m00s [ 36/171] Installing crypto-policies-0: 100% | 16.8 MiB/s | 172.0 KiB | 00m00s [ 37/171] Installing filesystem-srpm-ma 100% | 38.0 MiB/s | 38.9 KiB | 00m00s [ 38/171] Installing elfutils-default-y 100% | 170.2 KiB/s | 2.0 KiB | 00m00s [ 39/171] Installing zlib-ng-compat-0:2 100% | 154.1 MiB/s | 157.8 KiB | 00m00s [ 40/171] Installing bzip2-libs-0:1.0.8 100% | 82.9 MiB/s | 84.9 KiB | 00m00s [ 41/171] Installing libgpg-error-0:1.5 100% | 47.5 MiB/s | 923.4 KiB | 00m00s [ 42/171] Installing libstdc++-0:15.1.1 100% | 259.4 MiB/s | 2.9 MiB | 00m00s [ 43/171] Installing xz-libs-1:5.8.1-1. 100% | 228.8 MiB/s | 234.3 KiB | 00m00s [ 44/171] Installing libassuan-0:2.5.7- 100% | 164.9 MiB/s | 168.8 KiB | 00m00s [ 45/171] Installing libgcrypt-0:1.11.1 100% | 249.8 MiB/s | 1.2 MiB | 00m00s [ 46/171] Installing readline-0:8.2-13. 100% | 224.3 MiB/s | 459.4 KiB | 00m00s [ 47/171] Installing gmp-1:6.3.0-3.fc43 100% | 239.7 MiB/s | 736.4 KiB | 00m00s [ 48/171] Installing libuuid-0:2.41.1-1 100% | 40.7 MiB/s | 41.7 KiB | 00m00s [ 49/171] Installing popt-0:1.19-8.fc42 100% | 34.8 MiB/s | 142.4 KiB | 00m00s [ 50/171] Installing npth-0:1.8-2.fc42. 100% | 48.8 MiB/s | 50.0 KiB | 00m00s [ 51/171] Installing libblkid-0:2.41.1- 100% | 139.8 MiB/s | 286.4 KiB | 00m00s [ 52/171] Installing libxcrypt-0:4.4.38 100% | 145.7 MiB/s | 298.5 KiB | 00m00s [ 53/171] Installing libzstd-0:1.5.7-1. 100% | 251.5 MiB/s | 772.7 KiB | 00m00s [ 54/171] Installing elfutils-libelf-0: 100% | 234.7 MiB/s | 1.2 MiB | 00m00s [ 55/171] Installing elfutils-libs-0:0. 100% | 239.5 MiB/s | 735.7 KiB | 00m00s [ 56/171] Installing sqlite-libs-0:3.50 100% | 265.9 MiB/s | 1.6 MiB | 00m00s [ 57/171] Installing gnupg2-gpgconf-0:2 100% | 18.6 MiB/s | 248.0 KiB | 00m00s [ 58/171] Installing libattr-0:2.5.2-5. 100% | 26.7 MiB/s | 27.3 KiB | 00m00s [ 59/171] Installing libacl-0:2.3.2-3.f 100% | 37.5 MiB/s | 38.4 KiB | 00m00s [ 60/171] Installing libtasn1-0:4.20.0- 100% | 173.2 MiB/s | 177.4 KiB | 00m00s [ 61/171] Installing libunistring-0:1.1 100% | 288.3 MiB/s | 1.7 MiB | 00m00s [ 62/171] Installing libidn2-0:2.3.8-1. 100% | 109.0 MiB/s | 557.9 KiB | 00m00s [ 63/171] Installing dwz-0:0.16-1.fc43. 100% | 24.9 MiB/s | 306.4 KiB | 00m00s [ 64/171] Installing gnupg2-verify-0:2. 100% | 29.4 MiB/s | 360.8 KiB | 00m00s [ 65/171] Installing mpfr-0:4.2.2-1.fc4 100% | 235.6 MiB/s | 964.9 KiB | 00m00s [ 66/171] Installing gawk-0:5.3.2-1.fc4 100% | 86.2 MiB/s | 1.8 MiB | 00m00s [ 67/171] Installing libksba-0:1.6.7-3. 100% | 197.5 MiB/s | 404.4 KiB | 00m00s [ 68/171] Installing unzip-0:6.0-66.fc4 100% | 29.4 MiB/s | 391.2 KiB | 00m00s [ 69/171] Installing file-libs-0:5.46-5 100% | 474.7 MiB/s | 11.9 MiB | 00m00s [ 70/171] Installing file-0:5.46-5.fc43 100% | 7.9 MiB/s | 96.7 KiB | 00m00s [ 71/171] Installing pcre2-0:10.45-1.fc 100% | 224.4 MiB/s | 689.5 KiB | 00m00s [ 72/171] Installing grep-0:3.12-1.fc43 100% | 52.7 MiB/s | 1.0 MiB | 00m00s [ 73/171] Installing xz-1:5.8.1-1.fc43. 100% | 60.6 MiB/s | 1.3 MiB | 00m00s [ 74/171] Installing libeconf-0:0.7.9-1 100% | 64.2 MiB/s | 65.8 KiB | 00m00s [ 75/171] Installing libcap-ng-0:0.8.5- 100% | 67.6 MiB/s | 69.3 KiB | 00m00s [ 76/171] Installing audit-libs-0:4.1.0 100% | 126.0 MiB/s | 387.2 KiB | 00m00s [ 77/171] Installing pam-libs-0:1.7.1-2 100% | 127.8 MiB/s | 130.9 KiB | 00m00s [ 78/171] Installing libcap-0:2.76-1.fc 100% | 14.9 MiB/s | 198.9 KiB | 00m00s [ 79/171] Installing systemd-libs-0:257 100% | 247.9 MiB/s | 2.2 MiB | 00m00s [ 80/171] Installing libsmartcols-0:2.4 100% | 184.5 MiB/s | 189.0 KiB | 00m00s [ 81/171] Installing libsepol-0:3.9-1.f 100% | 284.6 MiB/s | 874.3 KiB | 00m00s [ 82/171] Installing libselinux-0:3.9-1 100% | 208.7 MiB/s | 213.7 KiB | 00m00s [ 83/171] Installing findutils-1:4.10.0 100% | 89.7 MiB/s | 1.9 MiB | 00m00s [ 84/171] Installing sed-0:4.9-4.fc42.i 100% | 47.1 MiB/s | 868.6 KiB | 00m00s [ 85/171] Installing libmount-0:2.41.1- 100% | 199.7 MiB/s | 409.0 KiB | 00m00s [ 86/171] Installing alternatives-0:1.3 100% | 5.6 MiB/s | 62.9 KiB | 00m00s [ 87/171] Installing lz4-libs-0:1.10.0- 100% | 154.0 MiB/s | 157.7 KiB | 00m00s [ 88/171] Installing lua-libs-0:5.4.8-1 100% | 151.1 MiB/s | 309.5 KiB | 00m00s [ 89/171] Installing libffi-0:3.5.1-1.f 100% | 78.2 MiB/s | 80.1 KiB | 00m00s [ 90/171] Installing p11-kit-0:0.25.5-8 100% | 93.2 MiB/s | 2.3 MiB | 00m00s [ 91/171] Installing p11-kit-trust-0:0. 100% | 12.5 MiB/s | 359.1 KiB | 00m00s [ 92/171] Installing json-c-0:0.18-4.fc 100% | 42.6 MiB/s | 87.2 KiB | 00m00s [ 93/171] Installing openssl-libs-1:3.5 100% | 260.0 MiB/s | 7.3 MiB | 00m00s [ 94/171] Installing coreutils-0:9.7-4. 100% | 109.0 MiB/s | 5.3 MiB | 00m00s [ 95/171] Installing ca-certificates-0: 100% | 1.1 MiB/s | 2.4 MiB | 00m02s [ 96/171] Installing gzip-0:1.13-3.fc42 100% | 25.6 MiB/s | 393.4 KiB | 00m00s [ 97/171] Installing rpm-sequoia-0:1.9. 100% | 277.5 MiB/s | 2.8 MiB | 00m00s [ 98/171] Installing libfsverity-0:1.6- 100% | 28.1 MiB/s | 28.8 KiB | 00m00s [ 99/171] Installing libevent-0:2.1.12- 100% | 235.1 MiB/s | 963.0 KiB | 00m00s [100/171] Installing zstd-0:1.5.7-1.fc4 100% | 97.7 MiB/s | 1.7 MiB | 00m00s [101/171] Installing util-linux-core-0: 100% | 62.9 MiB/s | 1.4 MiB | 00m00s [102/171] Installing tar-2:1.35-5.fc42. 100% | 125.0 MiB/s | 3.0 MiB | 00m00s [103/171] Installing libsemanage-0:3.9- 100% | 157.1 MiB/s | 321.7 KiB | 00m00s [104/171] Installing systemd-standalone 100% | 20.5 MiB/s | 273.0 KiB | 00m00s [105/171] Installing rpm-libs-0:5.99.91 100% | 233.0 MiB/s | 954.4 KiB | 00m00s [106/171] Installing libusb1-0:1.0.28-2 100% | 11.0 MiB/s | 180.0 KiB | 00m00s >>> Running sysusers scriptlet: tpm2-tss-0:4.1.3-7.fc43.i686 >>> Finished sysusers scriptlet: tpm2-tss-0:4.1.3-7.fc43.i686 >>> Scriptlet output: >>> Creating group 'tss' with GID 59. >>> Creating user 'tss' (Account used for TPM access) with UID 59 and GID 59. >>> [107/171] Installing tpm2-tss-0:4.1.3-7 100% | 180.3 MiB/s | 1.6 MiB | 00m00s [108/171] Installing ima-evm-utils-libs 100% | 51.9 MiB/s | 53.2 KiB | 00m00s [109/171] Installing gnupg2-gpg-agent-0 100% | 23.1 MiB/s | 684.9 KiB | 00m00s [110/171] Installing zip-0:3.0-43.fc42. 100% | 42.6 MiB/s | 698.2 KiB | 00m00s [111/171] Installing gnupg2-keyboxd-0:2 100% | 16.1 MiB/s | 197.3 KiB | 00m00s [112/171] Installing libpsl-0:0.21.5-5. 100% | 75.0 MiB/s | 76.8 KiB | 00m00s [113/171] Installing liblastlog2-0:2.41 100% | 2.8 MiB/s | 34.2 KiB | 00m00s [114/171] Installing libfdisk-0:2.41.1- 100% | 138.3 MiB/s | 425.0 KiB | 00m00s [115/171] Installing nettle-0:3.10.1-1. 100% | 190.4 MiB/s | 779.8 KiB | 00m00s [116/171] Installing gnutls-0:3.8.10-1. 100% | 251.6 MiB/s | 3.8 MiB | 00m00s [117/171] Installing libxml2-0:2.12.10- 100% | 94.9 MiB/s | 1.8 MiB | 00m00s [118/171] Installing libarchive-0:3.8.1 100% | 200.1 MiB/s | 1.0 MiB | 00m00s [119/171] Installing bzip2-0:1.0.8-20.f 100% | 7.1 MiB/s | 94.1 KiB | 00m00s [120/171] Installing add-determinism-0: 100% | 123.9 MiB/s | 2.4 MiB | 00m00s [121/171] Installing build-reproducibil 100% | 1.0 MiB/s | 1.0 KiB | 00m00s [122/171] Installing cpio-0:2.15-2.fc41 100% | 65.0 MiB/s | 1.1 MiB | 00m00s [123/171] Installing diffutils-0:3.12-2 100% | 77.9 MiB/s | 1.6 MiB | 00m00s [124/171] Installing ed-0:1.21.1-1.fc43 100% | 11.7 MiB/s | 143.9 KiB | 00m00s [125/171] Installing patch-0:2.8-1.fc43 100% | 19.1 MiB/s | 235.3 KiB | 00m00s [126/171] Installing jansson-0:2.14-2.f 100% | 91.4 MiB/s | 93.6 KiB | 00m00s [127/171] Installing libgomp-0:15.1.1-2 100% | 263.5 MiB/s | 539.5 KiB | 00m00s [128/171] Installing libpkgconf-0:2.3.0 100% | 75.9 MiB/s | 77.7 KiB | 00m00s [129/171] Installing pkgconf-0:2.3.0-2. 100% | 6.9 MiB/s | 85.4 KiB | 00m00s [130/171] Installing pkgconf-pkg-config 100% | 147.1 KiB/s | 1.8 KiB | 00m00s [131/171] Installing libtool-ltdl-0:2.5 100% | 68.8 MiB/s | 70.5 KiB | 00m00s [132/171] Installing gdbm-libs-1:1.23-9 100% | 63.5 MiB/s | 130.1 KiB | 00m00s [133/171] Installing cyrus-sasl-lib-0:2 100% | 123.5 MiB/s | 2.5 MiB | 00m00s [134/171] Installing openldap-0:2.6.10- 100% | 132.2 MiB/s | 676.7 KiB | 00m00s [135/171] Installing gnupg2-dirmngr-0:2 100% | 23.5 MiB/s | 648.7 KiB | 00m00s [136/171] Installing gnupg2-0:2.4.8-2.f 100% | 174.7 MiB/s | 6.6 MiB | 00m00s [137/171] Installing gpgverify-0:2.2-2. 100% | 9.2 MiB/s | 9.4 KiB | 00m00s [138/171] Installing rpm-sign-libs-0:5. 100% | 31.0 MiB/s | 31.8 KiB | 00m00s [139/171] Installing rpm-build-libs-0:5 100% | 261.6 MiB/s | 267.9 KiB | 00m00s [140/171] Installing xxhash-libs-0:0.8. 100% | 112.2 MiB/s | 114.9 KiB | 00m00s [141/171] Installing libbrotli-0:1.1.0- 100% | 209.3 MiB/s | 857.4 KiB | 00m00s [142/171] Installing libnghttp2-0:1.66. 100% | 158.8 MiB/s | 162.6 KiB | 00m00s [143/171] Installing keyutils-libs-0:1. 100% | 57.5 MiB/s | 58.9 KiB | 00m00s [144/171] Installing libcom_err-0:1.47. 100% | 61.9 MiB/s | 63.4 KiB | 00m00s [145/171] Installing libverto-0:0.3.2-1 100% | 25.8 MiB/s | 26.5 KiB | 00m00s [146/171] Installing krb5-libs-0:1.21.3 100% | 210.6 MiB/s | 2.3 MiB | 00m00s [147/171] Installing libssh-0:0.11.2-1. 100% | 200.1 MiB/s | 614.6 KiB | 00m00s [148/171] Installing libcurl-0:8.15.0-1 100% | 229.2 MiB/s | 938.8 KiB | 00m00s [149/171] Installing elfutils-debuginfo 100% | 5.8 MiB/s | 76.6 KiB | 00m00s [150/171] Installing binutils-0:2.44-3. 100% | 236.3 MiB/s | 26.0 MiB | 00m00s [151/171] Installing elfutils-0:0.193-2 100% | 112.5 MiB/s | 2.6 MiB | 00m00s [152/171] Installing gdb-minimal-0:16.3 100% | 247.1 MiB/s | 13.8 MiB | 00m00s [153/171] Installing debugedit-0:5.2-1. 100% | 14.7 MiB/s | 210.1 KiB | 00m00s [154/171] Installing curl-0:8.15.0-1.fc 100% | 14.6 MiB/s | 479.6 KiB | 00m00s [155/171] Installing rpm-0:5.99.91-1.fc 100% | 46.6 MiB/s | 2.5 MiB | 00m00s [156/171] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.1 KiB | 00m00s [157/171] Installing java-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [158/171] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [159/171] Installing tree-sitter-srpm-m 100% | 9.0 MiB/s | 9.3 KiB | 00m00s [160/171] Installing zig-srpm-macros-0: 100% | 1.6 MiB/s | 1.7 KiB | 00m00s [161/171] Installing rpm-build-0:5.99.9 100% | 16.7 MiB/s | 274.4 KiB | 00m00s [162/171] Installing pyproject-srpm-mac 100% | 2.4 MiB/s | 2.5 KiB | 00m00s [163/171] Installing redhat-rpm-config- 100% | 61.1 MiB/s | 187.8 KiB | 00m00s [164/171] Installing forge-srpm-macros- 100% | 39.3 MiB/s | 40.3 KiB | 00m00s [165/171] Installing fonts-srpm-macros- 100% | 55.7 MiB/s | 57.0 KiB | 00m00s [166/171] Installing go-srpm-macros-0:3 100% | 60.5 MiB/s | 62.0 KiB | 00m00s [167/171] Installing python-srpm-macros 100% | 25.8 MiB/s | 52.8 KiB | 00m00s [168/171] Installing util-linux-0:2.41. 100% | 60.7 MiB/s | 3.3 MiB | 00m00s [169/171] Installing shadow-utils-2:4.1 100% | 86.0 MiB/s | 4.0 MiB | 00m00s [170/171] Installing which-0:2.23-2.fc4 100% | 6.0 MiB/s | 80.3 KiB | 00m00s [171/171] Installing info-0:7.2-4.fc43. 100% | 123.3 KiB/s | 360.8 KiB | 00m03s Warning: skipped OpenPGP checks for 169 packages from repository: local Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: add-determinism-0.6.0-1.fc43.i686 alternatives-1.33-1.fc43.i686 ansible-srpm-macros-1-17.1.fc42.noarch audit-libs-4.1.0-1.fc43.i686 bash-5.2.37-3.fc43.i686 binutils-2.44-3.fc43.i686 build-reproducibility-srpm-macros-0.6.0-1.fc43.noarch bzip2-1.0.8-20.fc42.i686 bzip2-libs-1.0.8-20.fc42.i686 ca-certificates-2024.2.69_v8.0.401-5.fc42.noarch coreutils-9.7-4.fc43.i686 coreutils-common-9.7-4.fc43.i686 cpio-2.15-2.fc41.i686 crypto-policies-20250714-1.gitcd6043a.fc43.noarch curl-8.15.0-1.fc43.i686 cyrus-sasl-lib-2.1.28-30.fc42.i686 debugedit-5.2-1.fc43.i686 diffutils-3.12-2.fc43.i686 dwz-0.16-1.fc43.i686 ed-1.21.1-1.fc43.i686 efi-srpm-macros-6-3.fc43.noarch elfutils-0.193-2.fc43.i686 elfutils-debuginfod-client-0.193-2.fc43.i686 elfutils-default-yama-scope-0.193-2.fc43.noarch elfutils-libelf-0.193-2.fc43.i686 elfutils-libs-0.193-2.fc43.i686 fedora-gpg-keys-43-0.2.noarch fedora-release-43-0.16.noarch fedora-release-common-43-0.16.noarch fedora-release-identity-basic-43-0.16.noarch fedora-repos-43-0.2.noarch fedora-repos-rawhide-43-0.2.noarch file-5.46-5.fc43.i686 file-libs-5.46-5.fc43.i686 filesystem-3.18-44.fc43.i686 filesystem-srpm-macros-3.18-44.fc43.noarch findutils-4.10.0-5.fc42.i686 fonts-srpm-macros-2.0.5-22.fc43.noarch forge-srpm-macros-0.4.0-2.fc42.noarch fpc-srpm-macros-1.3-14.fc42.noarch gawk-5.3.2-1.fc43.i686 gdb-minimal-16.3-3.fc43.i686 gdbm-libs-1.23-9.fc42.i686 ghc-srpm-macros-1.9.2-2.fc42.noarch glibc-2.41.9000-20.fc43.i686 glibc-common-2.41.9000-20.fc43.i686 glibc-gconv-extra-2.41.9000-20.fc43.i686 glibc-minimal-langpack-2.41.9000-20.fc43.i686 gmp-6.3.0-3.fc43.i686 gnat-srpm-macros-6-7.fc42.noarch gnupg2-2.4.8-2.fc43.i686 gnupg2-dirmngr-2.4.8-2.fc43.i686 gnupg2-gpg-agent-2.4.8-2.fc43.i686 gnupg2-gpgconf-2.4.8-2.fc43.i686 gnupg2-keyboxd-2.4.8-2.fc43.i686 gnupg2-verify-2.4.8-2.fc43.i686 gnutls-3.8.10-1.fc43.i686 go-srpm-macros-3.6.0-7.fc43.noarch gpgverify-2.2-2.fc43.noarch grep-3.12-1.fc43.i686 gzip-1.13-3.fc42.i686 ima-evm-utils-libs-1.6.2-5.fc43.i686 info-7.2-4.fc43.i686 jansson-2.14-2.fc42.i686 java-srpm-macros-1-6.fc43.noarch json-c-0.18-4.fc43.i686 kernel-srpm-macros-1.0-25.fc42.noarch keyutils-libs-1.6.3-5.fc42.i686 krb5-libs-1.21.3-6.fc43.i686 libacl-2.3.2-3.fc42.i686 libarchive-3.8.1-1.fc43.i686 libassuan-2.5.7-3.fc42.i686 libattr-2.5.2-5.fc42.i686 libblkid-2.41.1-11.fc43.i686 libbrotli-1.1.0-7.fc43.i686 libcap-2.76-1.fc43.i686 libcap-ng-0.8.5-5.fc43.i686 libcom_err-1.47.3-1.fc43.i686 libcurl-8.15.0-1.fc43.i686 libeconf-0.7.9-1.fc43.i686 libevent-2.1.12-15.fc42.i686 libfdisk-2.41.1-11.fc43.i686 libffi-3.5.1-1.fc43.i686 libfsverity-1.6-2.fc42.i686 libgcc-15.1.1-2.fc43.i686 libgcrypt-1.11.1-1.fc43.i686 libgomp-15.1.1-2.fc43.i686 libgpg-error-1.55-1.fc43.i686 libidn2-2.3.8-1.fc43.i686 libksba-1.6.7-3.fc42.i686 liblastlog2-2.41.1-11.fc43.i686 libmount-2.41.1-11.fc43.i686 libnghttp2-1.66.0-1.fc43.i686 libpkgconf-2.3.0-2.fc42.i686 libpsl-0.21.5-5.fc42.i686 libselinux-3.9-1.fc43.i686 libsemanage-3.9-1.fc43.i686 libsepol-3.9-1.fc43.i686 libsmartcols-2.41.1-11.fc43.i686 libssh-0.11.2-1.fc43.i686 libssh-config-0.11.2-1.fc43.noarch libstdc++-15.1.1-2.fc43.i686 libtasn1-4.20.0-1.fc43.i686 libtool-ltdl-2.5.4-5.fc43.i686 libunistring-1.1-9.fc42.i686 libusb1-1.0.28-2.fc43.i686 libuuid-2.41.1-11.fc43.i686 libverto-0.3.2-10.fc42.i686 libxcrypt-4.4.38-7.fc43.i686 libxml2-2.12.10-2.fc43.i686 libzstd-1.5.7-1.fc43.i686 lua-libs-5.4.8-1.fc43.i686 lua-srpm-macros-1-15.fc42.noarch lz4-libs-1.10.0-2.fc42.i686 mpfr-4.2.2-1.fc43.i686 ncurses-base-6.5-6.20250614.fc43.noarch ncurses-libs-6.5-6.20250614.fc43.i686 nettle-3.10.1-1.fc43.i686 npth-1.8-2.fc42.i686 ocaml-srpm-macros-10-4.fc42.noarch openblas-srpm-macros-2-19.fc42.noarch openldap-2.6.10-2.fc43.i686 openssl-libs-3.5.1-1.fc43.i686 p11-kit-0.25.5-8.fc43.i686 p11-kit-trust-0.25.5-8.fc43.i686 package-notes-srpm-macros-0.5-13.fc42.noarch pam-libs-1.7.1-2.fc43.i686 patch-2.8-1.fc43.i686 pcre2-10.45-1.fc43.i686 pcre2-syntax-10.45-1.fc43.noarch perl-srpm-macros-1-59.fc43.noarch pkgconf-2.3.0-2.fc42.i686 pkgconf-m4-2.3.0-2.fc42.noarch pkgconf-pkg-config-2.3.0-2.fc42.i686 popt-1.19-8.fc42.i686 publicsuffix-list-dafsa-20250616-1.fc43.noarch pyproject-srpm-macros-1.18.3-1.fc43.noarch python-srpm-macros-3.14-2.fc43.noarch qt5-srpm-macros-5.15.17-1.fc43.noarch qt6-srpm-macros-6.9.1-1.fc43.noarch readline-8.2-13.fc43.i686 redhat-rpm-config-343-6.fc43.noarch rpm-5.99.91-1.fc43.i686 rpm-build-5.99.91-1.fc43.i686 rpm-build-libs-5.99.91-1.fc43.i686 rpm-libs-5.99.91-1.fc43.i686 rpm-sequoia-1.9.0-1.fc43.i686 rpm-sign-libs-5.99.91-1.fc43.i686 rust-srpm-macros-26.3-4.fc42.noarch sed-4.9-4.fc42.i686 setup-2.15.0-25.fc43.noarch shadow-utils-4.17.4-4.fc43.i686 sqlite-libs-3.50.2-1.fc43.i686 systemd-libs-257.7-1.fc43.i686 systemd-standalone-sysusers-257.7-1.fc43.i686 tar-1.35-5.fc42.i686 tpm2-tss-4.1.3-7.fc43.i686 tree-sitter-srpm-macros-0.4.1-1.fc43.noarch unzip-6.0-66.fc42.i686 util-linux-2.41.1-11.fc43.i686 util-linux-core-2.41.1-11.fc43.i686 which-2.23-2.fc43.i686 xxhash-libs-0.8.3-2.fc42.i686 xz-5.8.1-1.fc43.i686 xz-libs-5.8.1-1.fc43.i686 zig-srpm-macros-1-4.fc42.noarch zip-3.0-43.fc42.i686 zlib-ng-compat-2.2.4-2.fc43.i686 zstd-1.5.7-1.fc43.i686 Start: buildsrpm Start: rpmbuild -bs Building target platforms: i686 Building for target i686 setting SOURCE_DATE_EPOCH=1752710400 Wrote: /builddir/build/SRPMS/scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-i686-1752725198.853093/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names Finish: buildsrpm INFO: Done(/var/lib/copr-rpmbuild/workspace/workdir-uq8sketk/scapy/scapy.spec) Config(child) 0 minutes 27 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_success=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot INFO: Start(/var/lib/copr-rpmbuild/results/scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm) Config(fedora-rawhide-i686) Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-i686-bootstrap-1752725198.853093/root. INFO: reusing tmpfs at /var/lib/mock/fedora-rawhide-i686-bootstrap-1752725198.853093/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-i686-1752725198.853093/root. INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-5.99.91-1.fc43.x86_64 rpm-sequoia-1.9.0-1.fc43.x86_64 dnf5-5.2.15.0-1.fc43.x86_64 dnf5-plugins-5.2.15.0-1.fc43.x86_64 Finish: chroot init Start: build phase for scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Start: build setup for scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Building target platforms: i686 Building for target i686 setting SOURCE_DATE_EPOCH=1752710400 Wrote: /builddir/build/SRPMS/scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Updating and loading repositories: Copr repository 100% | 22.5 KiB/s | 1.5 KiB | 00m00s local 100% | 53.0 KiB/s | 3.5 KiB | 00m00s Repositories loaded. Package "sed-4.9-4.fc42.i686" is already installed. Package Arch Version Repository Size Installing: can-utils i686 2025.01-1.fc42 local 640.3 KiB libpcap i686 14:1.10.5-2.fc42 local 414.5 KiB make i686 1:4.4.1-10.fc42 local 1.8 MiB openssl i686 1:3.5.1-1.fc43 local 1.8 MiB python3-brotli i686 1.1.0-7.fc43 local 858.8 KiB python3-can noarch 4.5.0-5.fc43 local 2.1 MiB python3-coverage i686 7.3.2-7.fc43 local 1.8 MiB python3-cryptography i686 45.0.4-1.fc43 local 5.7 MiB python3-devel i686 3.14.0~b4-1.fc43 local 1.9 MiB python3-ipython noarch 8.37.0-4.fc43 local 4.7 MiB python3-setuptools noarch 78.1.1-7.fc43 local 9.0 MiB python3-tkinter i686 3.14.0~b4-1.fc43 local 2.1 MiB python3-zstandard i686 0.23.0-4.fc43 local 2.2 MiB samba i686 2:4.22.3-2.fc43 local 3.3 MiB samba-client i686 2:4.22.3-2.fc43 local 2.9 MiB tcpdump i686 14:4.99.5-3.fc42 local 1.2 MiB wireshark i686 1:4.4.7-1.fc43 local 9.4 MiB Installing dependencies: OpenCL-ICD-Loader i686 3.0.6-2.20241023git5907ac1.fc42 local 89.3 KiB SDL3 i686 3.2.16-1.fc43 local 2.9 MiB abattis-cantarell-vf-fonts noarch 0.301-14.fc42 local 192.7 KiB adwaita-cursor-theme noarch 48.1-1.fc43 local 11.4 MiB adwaita-icon-theme noarch 48.1-1.fc43 local 1.2 MiB adwaita-icon-theme-legacy noarch 46.2-3.fc42 local 2.1 MiB alsa-lib i686 1.2.14-3.fc43 local 1.5 MiB aribb24 i686 1.0.3^20160216git5e9be27-2.fc42 local 81.1 KiB assimp i686 5.4.3-2.fc43 local 7.2 MiB at-spi2-atk i686 2.57.0-1.fc43 local 288.3 KiB at-spi2-core i686 2.57.0-1.fc43 local 1.5 MiB atk i686 2.57.0-1.fc43 local 255.9 KiB authselect i686 1.6.0-1.fc43 local 184.8 KiB authselect-libs i686 1.6.0-1.fc43 local 859.0 KiB avahi-glib i686 0.9~rc2-3.fc43 local 18.9 KiB avahi-libs i686 0.9~rc2-3.fc43 local 180.8 KiB bcg729 i686 1.1.1-12.fc43 local 111.1 KiB c-ares i686 1.34.5-1.fc43 local 288.5 KiB cairo i686 1.18.4-1.fc43 local 1.9 MiB cairo-gobject i686 1.18.4-1.fc43 local 30.4 KiB cdparanoia-libs i686 10.2-47.fc42 local 115.5 KiB cjson i686 1.7.18-2.fc42 local 67.1 KiB codec2 i686 1.2.0-6.fc42 local 1.4 MiB colord-libs i686 1.4.8-1.fc43 local 846.9 KiB cracklib i686 2.9.11-7.fc42 local 235.1 KiB cups-filesystem noarch 1:2.4.12-3.fc43 local 0.0 B cups-libs i686 1:2.4.12-3.fc43 local 673.4 KiB dbus i686 1:1.16.0-3.fc42 local 0.0 B dbus-broker i686 37-1.fc43 local 389.7 KiB dbus-common noarch 1:1.16.0-3.fc42 local 11.2 KiB dbus-libs i686 1:1.16.0-3.fc42 local 373.0 KiB default-fonts-core-sans noarch 4.2-4.fc42 local 11.9 KiB desktop-file-utils i686 0.28-1.fc43 local 202.1 KiB double-conversion i686 3.3.1-3.fc43 local 104.9 KiB duktape i686 2.7.0-9.fc42 local 614.9 KiB emacs-filesystem noarch 1:30.0-4.fc42 local 0.0 B expat i686 2.7.1-1.fc43 local 292.6 KiB fdk-aac-free i686 2.0.0-15.fc42 local 615.3 KiB flac-libs i686 1.5.0-2.fc43 local 766.3 KiB fontconfig i686 2.17.0-2.fc43 local 745.3 KiB fonts-filesystem noarch 1:2.0.5-22.fc43 local 0.0 B freetype i686 2.13.3-2.fc42 local 853.9 KiB fribidi i686 1.0.16-2.fc42 local 196.2 KiB game-music-emu i686 0.6.4-1.fc43 local 359.2 KiB gdbm i686 1:1.23-9.fc42 local 445.2 KiB gdk-pixbuf2 i686 2.42.12-10.fc42 local 2.5 MiB gdk-pixbuf2-modules i686 2.42.12-10.fc42 local 61.8 KiB glib2 i686 2.85.1-1.fc43 local 15.1 MiB glx-utils i686 9.0.0-9.fc42 local 432.1 KiB gnutls-dane i686 3.8.10-1.fc43 local 52.2 KiB google-noto-fonts-common noarch 20250701-2.fc43 local 17.7 KiB google-noto-sans-vf-fonts noarch 20250701-2.fc43 local 1.4 MiB gpgme i686 1.24.3-2.fc43 local 631.6 KiB graphene i686 1.10.8-1.fc43 local 221.8 KiB graphite2 i686 1.3.14-18.fc42 local 190.2 KiB gsm i686 1.0.22-8.fc42 local 68.0 KiB gssdp i686 1.6.4-1.fc43 local 149.7 KiB gstreamer1 i686 1.26.3-1.fc43 local 5.8 MiB gstreamer1-plugins-bad-free-libs i686 1.26.3-1.fc43 local 3.3 MiB gstreamer1-plugins-base i686 1.26.3-1.fc43 local 7.8 MiB gtk-update-icon-cache i686 3.24.49-2.fc43 local 57.1 KiB gtk3 i686 3.24.49-2.fc43 local 24.1 MiB gupnp i686 1.6.9-1.fc43 local 303.3 KiB gupnp-igd i686 1.6.0-6.fc42 local 70.0 KiB harfbuzz i686 11.2.1-1.fc43 local 2.9 MiB hicolor-icon-theme noarch 0.18-1.fc43 local 72.4 KiB highway i686 1.2.0-5.fc42 local 2.2 MiB hiredis i686 1.2.0-6.fc42 local 108.3 KiB hwdata noarch 0.397-1.fc43 local 9.6 MiB ilbc i686 3.0.4-15.fc43 local 90.6 KiB iso-codes noarch 4.18.0-1.fc43 local 21.5 MiB jbigkit-libs i686 2.1-31.fc42 local 115.9 KiB json-glib i686 1.10.6-2.fc42 local 602.0 KiB jsoncpp i686 1.9.6-1.fc43 local 260.9 KiB lame-libs i686 3.100-19.fc42 local 1.2 MiB lcms2 i686 2.16-5.fc42 local 472.0 KiB libICE i686 1.1.2-2.fc42 local 201.3 KiB libSM i686 1.2.5-2.fc42 local 100.2 KiB libX11 i686 1.8.11-1.fc42 local 1.3 MiB libX11-common noarch 1.8.11-1.fc42 local 1.2 MiB libX11-xcb i686 1.8.11-1.fc42 local 10.2 KiB libXau i686 1.0.12-2.fc42 local 72.2 KiB libXcomposite i686 0.4.6-5.fc42 local 43.7 KiB libXcursor i686 1.2.3-2.fc42 local 56.7 KiB libXdamage i686 1.1.6-5.fc42 local 42.9 KiB libXext i686 1.3.6-3.fc42 local 96.8 KiB libXfixes i686 6.0.1-5.fc42 local 33.5 KiB libXft i686 2.3.8-8.fc42 local 167.5 KiB libXi i686 1.8.2-2.fc42 local 83.8 KiB libXinerama i686 1.1.5-8.fc42 local 18.1 KiB libXrandr i686 1.5.4-5.fc42 local 63.0 KiB libXrender i686 0.9.12-2.fc42 local 53.2 KiB libXtst i686 1.2.5-2.fc42 local 36.6 KiB libXv i686 1.0.13-2.fc42 local 29.2 KiB libXxf86vm i686 1.1.6-2.fc42 local 28.4 KiB libaom i686 3.12.0-1.fc43 local 3.5 MiB libaribcaption i686 1.1.1-2.fc42 local 243.7 KiB libasyncns i686 0.8-30.fc42 local 58.8 KiB libavcodec-free i686 7.1.1-4.fc43 local 10.4 MiB libavformat-free i686 7.1.1-4.fc43 local 3.0 MiB libavutil-free i686 7.1.1-4.fc43 local 909.7 KiB libb2 i686 0.98.1-13.fc42 local 57.3 KiB libbluray i686 1.3.4-9.fc42 local 429.0 KiB libchromaprint i686 1.5.1-24.fc42 local 67.8 KiB libcloudproviders i686 0.3.6-1.fc43 local 123.5 KiB libdatrie i686 0.2.13-11.fc42 local 61.1 KiB libdav1d i686 1.5.1-1.fc42 local 1.1 MiB libdecor i686 0.2.3-5.fc43 local 150.3 KiB libdrm i686 2.4.125-1.fc43 local 415.4 KiB libdvdnav i686 6.1.1-10.fc42 local 123.4 KiB libdvdread i686 6.1.3-9.fc42 local 167.4 KiB libedit i686 3.1-55.20250104cvs.fc42 local 243.4 KiB libepoxy i686 1.5.10-9.fc42 local 1.1 MiB libevdev i686 1.13.4-1.fc43 local 73.2 KiB libglvnd i686 1:1.7.0-7.fc42 local 471.7 KiB libglvnd-egl i686 1:1.7.0-7.fc42 local 72.0 KiB libglvnd-glx i686 1:1.7.0-7.fc42 local 615.5 KiB libglvnd-opengl i686 1:1.7.0-7.fc42 local 132.0 KiB libgudev i686 238-7.fc42 local 86.9 KiB libgusb i686 0.4.9-3.fc42 local 161.2 KiB libibverbs i686 58.0-1.fc43 local 1.2 MiB libicu i686 76.1-4.fc42 local 36.7 MiB libinput i686 1.28.901-3.fc43 local 630.5 KiB libjpeg-turbo i686 3.1.1-1.fc43 local 875.3 KiB libjxl i686 1:0.11.1-2.fc42 local 2.6 MiB liblc3 i686 1.1.3-2.fc43 local 174.1 KiB libldb i686 2:4.22.3-2.fc43 local 479.6 KiB liblerc i686 4.0.0-8.fc42 local 671.4 KiB libmaxminddb i686 1.12.2-3.fc42 local 83.0 KiB libmodplug i686 1:0.8.9.0-27.fc42 local 370.5 KiB libnetapi i686 2:4.22.3-2.fc43 local 565.9 KiB libnice i686 0.1.22-7.fc43 local 515.4 KiB libnl3 i686 3.11.0-4.fc43 local 1.1 MiB libnsl2 i686 2.0.1-3.fc42 local 57.1 KiB libogg i686 2:1.3.5-11.fc42 local 44.6 KiB libopenmpt i686 0.8.1-1.fc43 local 1.9 MiB libpciaccess i686 0.16-15.fc42 local 47.8 KiB libpng i686 2:1.6.50-1.fc43 local 257.1 KiB libproxy i686 0.5.8-2.fc42 local 100.7 KiB libpwquality i686 1.4.5-13.fc43 local 402.0 KiB librabbitmq i686 0.15.0-2.fc42 local 89.0 KiB librist i686 0.2.7-9.fc43 local 164.6 KiB librsvg2 i686 2.60.0-1.fc43 local 5.3 MiB libsbc i686 2.0-6.fc42 local 88.7 KiB libseccomp i686 2.6.0-1.fc43 local 228.2 KiB libsmbclient i686 2:4.22.3-2.fc43 local 181.2 KiB libsmi i686 0.4.8-43.fc43 local 20.8 MiB libsndfile i686 1.2.2-9.fc43 local 633.1 KiB libsodium i686 1.0.20-5.fc43 local 451.8 KiB libsoup3 i686 3.6.5-1.fc43 local 1.2 MiB libswresample-free i686 7.1.1-4.fc43 local 154.8 KiB libswscale-free i686 7.1.1-4.fc43 local 588.4 KiB libtalloc i686 2.4.3-3.fc43 local 59.3 KiB libtdb i686 1.4.13-3.fc43 local 107.7 KiB libtevent i686 0.16.2-3.fc43 local 104.7 KiB libthai i686 0.1.29-10.fc42 local 778.6 KiB libtheora i686 1:1.1.1-39.fc42 local 499.2 KiB libtiff i686 4.7.0-3.fc42 local 653.8 KiB libtinysparql i686 3.10~alpha-1.fc43 local 1.3 MiB libtirpc i686 1.3.6-1.rc3.fc42.2 local 214.1 KiB libtommath i686 1.3.1~rc1-5.fc42 local 133.6 KiB libudfread i686 1.1.2-11.fc42 local 65.2 KiB libunwind i686 1.8.1-2.fc43 local 179.5 KiB libva i686 2.22.0-4.fc42 local 357.3 KiB libvdpau i686 1.5-9.fc42 local 20.0 KiB libvisual i686 1:0.4.2-1.fc43 local 516.0 KiB libvorbis i686 1:1.3.7-12.fc42 local 767.1 KiB libvpx i686 1.15.0-3.fc43 local 4.8 MiB libwacom i686 2.16.1-1.fc43 local 100.3 KiB libwacom-data noarch 2.16.1-1.fc43 local 1.4 MiB libwayland-client i686 1.23.1-1.fc43 local 53.0 KiB libwayland-cursor i686 1.23.1-1.fc43 local 32.3 KiB libwayland-egl i686 1.23.1-1.fc43 local 11.7 KiB libwayland-server i686 1.23.1-1.fc43 local 77.5 KiB libwbclient i686 2:4.22.3-2.fc43 local 80.6 KiB libwebp i686 1.6.0-1.fc43 local 1.0 MiB libxcb i686 1.17.0-5.fc42 local 1.0 MiB libxkbcommon i686 1.10.0-1.fc43 local 398.5 KiB libxkbcommon-x11 i686 1.10.0-1.fc43 local 34.8 KiB libxshmfence i686 1.3.2-6.fc42 local 11.7 KiB llvm-filesystem i686 20.1.8-1.fc43 local 0.0 B llvm-libs i686 20.1.8-1.fc43 local 142.8 MiB lm_sensors-libs i686 3.6.0-22.fc42 local 81.0 KiB lpcnetfreedv i686 0.5-8.fc42 local 14.8 MiB lzo i686 2.10-14.fc42 local 170.2 KiB mbedtls i686 3.6.4-2.fc43 local 1.4 MiB mesa-dri-drivers i686 25.1.4-1.fc43 local 50.0 MiB mesa-filesystem i686 25.1.4-1.fc43 local 3.6 KiB mesa-libEGL i686 25.1.4-1.fc43 local 353.7 KiB mesa-libGL i686 25.1.4-1.fc43 local 337.5 KiB mesa-libgbm i686 25.1.4-1.fc43 local 18.9 KiB mpdecimal i686 4.0.1-1.fc43 local 216.4 KiB mpg123-libs i686 1.32.10-1.fc43 local 844.3 KiB mtdev i686 1.1.6-10.fc42 local 28.4 KiB noopenh264 i686 2.6.0-1.fc43 local 38.4 KiB opencore-amr i686 0.1.6-8.fc42 local 351.3 KiB openjpeg i686 2.5.3-6.fc42 local 479.2 KiB openpgm i686 5.3.128-4.fc42 local 323.5 KiB openxr-libs i686 1.1.49-2.fc43 local 263.7 KiB opus i686 1.5.2-2.fc42 local 451.0 KiB orc i686 0.4.41-1.fc43 local 869.7 KiB pam i686 1.7.1-2.fc43 local 1.6 MiB pango i686 1.56.4-1.fc43 local 998.3 KiB pcre2-utf16 i686 10.45-1.fc43 local 621.5 KiB pixman i686 0.46.2-1.fc43 local 757.8 KiB poly2tri i686 0.0^20130501hg26242d0aa7b8-4.fc42 local 55.3 KiB protobuf-c i686 1.5.1-1.fc43 local 53.0 KiB pugixml i686 1.14-2.fc42 local 273.9 KiB pulseaudio-libs i686 17.0-6.fc43 local 3.5 MiB pyproject-rpm-macros noarch 1.18.3-1.fc43 local 114.5 KiB python-pip-wheel noarch 25.1.1-11.fc43 local 1.2 MiB python-rpm-macros noarch 3.14-2.fc43 local 22.8 KiB python3 i686 3.14.0~b4-1.fc43 local 28.0 KiB python3-asttokens noarch 3.0.0-2.fc43 local 199.3 KiB python3-cffi i686 1.17.1-3.fc43 local 1.4 MiB python3-decorator noarch 5.2.1-2.fc43 local 81.8 KiB python3-executing noarch 2.2.0-3.fc43~bootstrap local 275.9 KiB python3-jedi noarch 0.19.2-3.fc43 local 5.7 MiB python3-libs i686 3.14.0~b4-1.fc43 local 42.5 MiB python3-matplotlib-inline noarch 0.1.7-6.fc43 local 39.8 KiB python3-msgpack i686 1.1.0-3.fc43 local 345.2 KiB python3-packaging noarch 25.0-3.fc43 local 607.5 KiB python3-parso noarch 0.8.4-7.fc43 local 929.3 KiB python3-pexpect noarch 4.9.0-11.fc43 local 624.7 KiB python3-ply noarch 3.11-27.fc43 local 575.3 KiB python3-prompt-toolkit noarch 3.0.41-7.fc43 local 4.1 MiB python3-ptyprocess noarch 0.7.0-11.fc43 local 80.5 KiB python3-pure-eval noarch 0.2.3-3.fc43 local 106.0 KiB python3-pycparser noarch 2.22-2.fc43 local 1.5 MiB python3-pygments noarch 2.19.1-3.fc43 local 11.3 MiB python3-rpm-generators noarch 14-12.fc42 local 81.7 KiB python3-rpm-macros noarch 3.14-2.fc43 local 6.5 KiB python3-stack-data noarch 0.6.3-15.fc43 local 223.4 KiB python3-traitlets noarch 5.14.3-5.fc43 local 1.0 MiB python3-typing-extensions noarch 4.14.1-1.fc43 local 531.4 KiB python3-wcwidth noarch 0.2.13-13.fc43 local 559.4 KiB python3-wrapt i686 1.17.1-3.fc43 local 200.0 KiB qt6-filesystem i686 6.9.1-1.fc43 local 0.0 B qt6-qt5compat i686 6.9.1-1.fc43 local 1.7 MiB qt6-qtbase i686 6.9.1-1.fc43 local 13.6 MiB qt6-qtbase-common noarch 6.9.1-1.fc43 local 74.0 B qt6-qtbase-gui i686 6.9.1-1.fc43 local 25.1 MiB qt6-qtdeclarative i686 6.9.1-3.fc43 local 50.7 MiB qt6-qtmultimedia i686 6.9.1-1.fc43 local 3.8 MiB qt6-qtquick3d i686 6.9.1-1.fc43 local 11.0 MiB qt6-qtquicktimeline i686 6.9.1-1.fc43 local 278.4 KiB qt6-qtshadertools i686 6.9.1-1.fc43 local 6.4 MiB qt6-qtsvg i686 6.9.1-2.fc43 local 853.7 KiB rav1e-libs i686 0.7.1-5.fc42 local 2.1 MiB rsvg-pixbuf-loader i686 2.60.0-1.fc43 local 332.3 KiB samba-client-libs i686 2:4.22.3-2.fc43 local 22.4 MiB samba-common noarch 2:4.22.3-2.fc43 local 202.1 KiB samba-common-libs i686 2:4.22.3-2.fc43 local 304.7 KiB samba-common-tools i686 2:4.22.3-2.fc43 local 1.5 MiB samba-dcerpc i686 2:4.22.3-2.fc43 local 3.3 MiB samba-ldb-ldap-modules i686 2:4.22.3-2.fc43 local 55.8 KiB samba-libs i686 2:4.22.3-2.fc43 local 408.6 KiB sdl12-compat i686 1.2.68-5.fc42 local 210.9 KiB sdl2-compat i686 2.32.56-1.fc43 local 432.4 KiB shared-mime-info i686 2.4-1.fc43 local 5.2 MiB snappy i686 1.2.2-1.fc43 local 71.0 KiB soxr i686 0.1.3-18.fc42 local 185.6 KiB spandsp i686 0.0.6-20.fc42 local 868.1 KiB speex i686 1.2.0-19.fc42 local 127.7 KiB speexdsp i686 1.2.1-8.fc42 local 516.2 KiB spirv-tools-libs i686 2025.2-1.fc43 local 6.0 MiB srt-libs i686 1.5.4-2.fc42 local 1.0 MiB svt-av1-libs i686 2.3.0-1.fc43 local 2.7 MiB systemd i686 257.7-1.fc43 local 11.6 MiB systemd-pam i686 257.7-1.fc43 local 1.1 MiB systemd-rpm-macros noarch 257.7-1.fc43 local 8.5 KiB systemd-shared i686 257.7-1.fc43 local 4.7 MiB tcl i686 1:9.0.2-1.fc43 local 4.4 MiB tk i686 1:9.0.2-1.fc43 local 3.9 MiB tslib i686 1.23-1.fc43 local 371.6 KiB twolame-libs i686 0.4.0-6.fc42 local 160.8 KiB tzdata noarch 2025b-1.fc43 local 1.6 MiB unbound-libs i686 1.23.0-4.fc43 local 1.6 MiB vo-amrwbenc i686 0.1.3-22.fc42 local 153.2 KiB vulkan-loader i686 1.4.313.0-1.fc43 local 575.8 KiB wget2 i686 2.2.0-5.fc43 local 1.1 MiB wget2-libs i686 2.2.0-5.fc43 local 380.8 KiB wget2-wget i686 2.2.0-5.fc43 local 42.0 B wireshark-cli i686 1:4.4.7-1.fc43 local 85.1 MiB xcb-util i686 0.4.1-7.fc42 local 25.5 KiB xcb-util-cursor i686 0.1.5-3.fc42 local 21.8 KiB xcb-util-image i686 0.4.1-7.fc42 local 21.4 KiB xcb-util-keysyms i686 0.4.1-7.fc42 local 11.9 KiB xcb-util-renderutil i686 0.3.10-7.fc42 local 23.6 KiB xcb-util-wm i686 0.4.2-7.fc42 local 87.7 KiB xdg-utils noarch 1.2.1-3.fc42 local 346.3 KiB xkeyboard-config noarch 2.44-1.fc43 local 6.6 MiB xml-common noarch 0.6.3-66.fc42 local 78.4 KiB xprop i686 1.2.8-3.fc42 local 48.7 KiB xvidcore i686 1.3.7-13.fc42 local 905.7 KiB zeromq i686 4.3.5-21.fc42 local 912.8 KiB zvbi i686 0.2.44-1.fc43 local 1.2 MiB Transaction Summary: Installing: 314 packages Total size of inbound packages is 249 MiB. Need to download 249 MiB. After this operation, 899 MiB extra will be used (install 899 MiB, remove 0 B). [ 1/314] libpcap-14:1.10.5-2.fc42.i686 100% | 1.5 MiB/s | 185.2 KiB | 00m00s [ 2/314] can-utils-0:2025.01-1.fc42.i6 100% | 1.4 MiB/s | 206.9 KiB | 00m00s [ 3/314] make-1:4.4.1-10.fc42.i686 100% | 3.5 MiB/s | 587.9 KiB | 00m00s [ 4/314] python3-brotli-0:1.1.0-7.fc43 100% | 7.5 MiB/s | 347.0 KiB | 00m00s [ 5/314] openssl-1:3.5.1-1.fc43.i686 100% | 17.6 MiB/s | 1.2 MiB | 00m00s [ 6/314] python3-can-0:4.5.0-5.fc43.no 100% | 16.0 MiB/s | 524.9 KiB | 00m00s [ 7/314] python3-coverage-0:7.3.2-7.fc 100% | 11.7 MiB/s | 382.9 KiB | 00m00s [ 8/314] python3-devel-0:3.14.0~b4-1.f 100% | 5.4 MiB/s | 385.9 KiB | 00m00s [ 9/314] python3-cryptography-0:45.0.4 100% | 13.8 MiB/s | 1.6 MiB | 00m00s [ 10/314] python3-ipython-0:8.37.0-4.fc 100% | 10.9 MiB/s | 1.1 MiB | 00m00s [ 11/314] python3-tkinter-0:3.14.0~b4-1 100% | 11.6 MiB/s | 367.8 KiB | 00m00s [ 12/314] python3-zstandard-0:0.23.0-4. 100% | 19.9 MiB/s | 630.6 KiB | 00m00s [ 13/314] python3-setuptools-0:78.1.1-7 100% | 16.8 MiB/s | 1.9 MiB | 00m00s [ 14/314] samba-client-2:4.22.3-2.fc43. 100% | 12.1 MiB/s | 819.3 KiB | 00m00s [ 15/314] tcpdump-14:4.99.5-3.fc42.i686 100% | 12.1 MiB/s | 521.8 KiB | 00m00s [ 16/314] samba-2:4.22.3-2.fc43.i686 100% | 10.4 MiB/s | 1.0 MiB | 00m00s [ 17/314] libibverbs-0:58.0-1.fc43.i686 100% | 16.2 MiB/s | 482.3 KiB | 00m00s [ 18/314] python3-0:3.14.0~b4-1.fc43.i6 100% | 1.1 MiB/s | 27.0 KiB | 00m00s [ 19/314] python3-packaging-0:25.0-3.fc 100% | 6.7 MiB/s | 151.2 KiB | 00m00s [ 20/314] python3-msgpack-0:1.1.0-3.fc4 100% | 4.4 MiB/s | 113.8 KiB | 00m00s [ 21/314] python3-typing-extensions-0:4 100% | 4.9 MiB/s | 111.2 KiB | 00m00s [ 22/314] python3-wrapt-0:1.17.1-3.fc43 100% | 2.8 MiB/s | 70.4 KiB | 00m00s [ 23/314] python3-cffi-0:1.17.1-3.fc43. 100% | 10.9 MiB/s | 313.3 KiB | 00m00s [ 24/314] python3-decorator-0:5.2.1-2.f 100% | 1.3 MiB/s | 31.9 KiB | 00m00s [ 25/314] python3-jedi-0:0.19.2-3.fc43. 100% | 18.7 MiB/s | 1.3 MiB | 00m00s [ 26/314] python3-matplotlib-inline-0:0 100% | 963.8 KiB/s | 24.1 KiB | 00m00s [ 27/314] wireshark-1:4.4.7-1.fc43.i686 100% | 18.9 MiB/s | 4.8 MiB | 00m00s [ 28/314] python3-pexpect-0:4.9.0-11.fc 100% | 5.6 MiB/s | 161.9 KiB | 00m00s [ 29/314] python3-prompt-toolkit-0:3.0. 100% | 11.3 MiB/s | 823.1 KiB | 00m00s [ 30/314] python3-stack-data-0:0.6.3-15 100% | 2.2 MiB/s | 61.0 KiB | 00m00s [ 31/314] python3-pygments-0:2.19.1-3.f 100% | 24.1 MiB/s | 2.5 MiB | 00m00s [ 32/314] python3-libs-0:3.14.0~b4-1.fc 100% | 33.4 MiB/s | 9.6 MiB | 00m00s [ 33/314] python3-traitlets-0:5.14.3-5. 100% | 9.0 MiB/s | 211.7 KiB | 00m00s [ 34/314] cups-libs-1:2.4.12-3.fc43.i68 100% | 7.1 MiB/s | 285.2 KiB | 00m00s [ 35/314] tcl-1:9.0.2-1.fc43.i686 100% | 19.2 MiB/s | 1.3 MiB | 00m00s [ 36/314] dbus-libs-1:1.16.0-3.fc42.i68 100% | 7.2 MiB/s | 161.8 KiB | 00m00s [ 37/314] libldb-2:4.22.3-2.fc43.i686 100% | 7.4 MiB/s | 189.5 KiB | 00m00s [ 38/314] tk-1:9.0.2-1.fc43.i686 100% | 20.9 MiB/s | 1.8 MiB | 00m00s [ 39/314] libnetapi-2:4.22.3-2.fc43.i68 100% | 6.2 MiB/s | 158.9 KiB | 00m00s [ 40/314] libtalloc-0:2.4.3-3.fc43.i686 100% | 1.5 MiB/s | 34.8 KiB | 00m00s [ 41/314] libtdb-0:1.4.13-3.fc43.i686 100% | 2.5 MiB/s | 58.2 KiB | 00m00s [ 42/314] libtevent-0:0.16.2-3.fc43.i68 100% | 2.3 MiB/s | 55.0 KiB | 00m00s [ 43/314] libwbclient-2:4.22.3-2.fc43.i 100% | 2.2 MiB/s | 51.1 KiB | 00m00s [ 44/314] pam-0:1.7.1-2.fc43.i686 100% | 16.0 MiB/s | 525.5 KiB | 00m00s [ 45/314] samba-common-2:4.22.3-2.fc43. 100% | 7.2 MiB/s | 178.0 KiB | 00m00s [ 46/314] samba-common-libs-2:4.22.3-2. 100% | 4.6 MiB/s | 117.4 KiB | 00m00s [ 47/314] samba-common-tools-2:4.22.3-2 100% | 18.2 MiB/s | 522.6 KiB | 00m00s [ 48/314] samba-libs-2:4.22.3-2.fc43.i6 100% | 5.5 MiB/s | 135.0 KiB | 00m00s [ 49/314] samba-dcerpc-2:4.22.3-2.fc43. 100% | 16.8 MiB/s | 758.8 KiB | 00m00s [ 50/314] libsmbclient-2:4.22.3-2.fc43. 100% | 3.7 MiB/s | 83.5 KiB | 00m00s [ 51/314] hicolor-icon-theme-0:0.18-1.f 100% | 2.9 MiB/s | 66.0 KiB | 00m00s [ 52/314] libmaxminddb-0:1.12.2-3.fc42. 100% | 1.9 MiB/s | 43.5 KiB | 00m00s [ 53/314] libnl3-0:3.11.0-4.fc43.i686 100% | 12.2 MiB/s | 386.2 KiB | 00m00s [ 54/314] glib2-0:2.85.1-1.fc43.i686 100% | 24.6 MiB/s | 3.1 MiB | 00m00s [ 55/314] qt6-qt5compat-0:6.9.1-1.fc43. 100% | 11.9 MiB/s | 522.6 KiB | 00m00s [ 56/314] samba-client-libs-2:4.22.3-2. 100% | 14.3 MiB/s | 5.7 MiB | 00m00s [ 57/314] qt6-qtbase-0:6.9.1-1.fc43.i68 100% | 25.7 MiB/s | 4.5 MiB | 00m00s [ 58/314] speexdsp-0:1.2.1-8.fc42.i686 100% | 15.3 MiB/s | 455.5 KiB | 00m00s [ 59/314] qt6-qtmultimedia-0:6.9.1-1.fc 100% | 11.9 MiB/s | 1.3 MiB | 00m00s [ 60/314] xdg-utils-0:1.2.1-3.fc42.noar 100% | 3.7 MiB/s | 79.4 KiB | 00m00s [ 61/314] qt6-qtbase-gui-0:6.9.1-1.fc43 100% | 25.9 MiB/s | 8.6 MiB | 00m00s [ 62/314] python3-pycparser-0:2.22-2.fc 100% | 8.6 MiB/s | 264.2 KiB | 00m00s [ 63/314] expat-0:2.7.1-1.fc43.i686 100% | 5.1 MiB/s | 120.1 KiB | 00m00s [ 64/314] mpdecimal-0:4.0.1-1.fc43.i686 100% | 4.4 MiB/s | 99.2 KiB | 00m00s [ 65/314] tzdata-0:2025b-1.fc43.noarch 100% | 10.5 MiB/s | 429.4 KiB | 00m00s [ 66/314] python-pip-wheel-0:25.1.1-11. 100% | 19.1 MiB/s | 1.2 MiB | 00m00s [ 67/314] python3-parso-0:0.8.4-7.fc43. 100% | 7.7 MiB/s | 204.0 KiB | 00m00s [ 68/314] python3-ptyprocess-0:0.7.0-11 100% | 1.7 MiB/s | 36.2 KiB | 00m00s [ 69/314] python3-wcwidth-0:0.2.13-13.f 100% | 1.9 MiB/s | 47.5 KiB | 00m00s [ 70/314] python3-asttokens-0:3.0.0-2.f 100% | 2.3 MiB/s | 55.5 KiB | 00m00s [ 71/314] python3-executing-0:2.2.0-3.f 100% | 2.8 MiB/s | 68.7 KiB | 00m00s [ 72/314] python3-pure-eval-0:0.2.3-3.f 100% | 1.5 MiB/s | 35.5 KiB | 00m00s [ 73/314] libtommath-0:1.3.1~rc1-5.fc42 100% | 3.0 MiB/s | 65.4 KiB | 00m00s [ 74/314] fontconfig-0:2.17.0-2.fc43.i6 100% | 11.3 MiB/s | 266.0 KiB | 00m00s [ 75/314] libXft-0:2.3.8-8.fc42.i686 100% | 3.3 MiB/s | 74.1 KiB | 00m00s [ 76/314] libX11-0:1.8.11-1.fc42.i686 100% | 11.2 MiB/s | 677.1 KiB | 00m00s [ 77/314] avahi-libs-0:0.9~rc2-3.fc43.i 100% | 3.5 MiB/s | 75.5 KiB | 00m00s [ 78/314] authselect-0:1.6.0-1.fc43.i68 100% | 7.3 MiB/s | 172.3 KiB | 00m00s [ 79/314] cups-filesystem-1:2.4.12-3.fc 100% | 484.0 KiB/s | 13.6 KiB | 00m00s [ 80/314] gdbm-1:1.23-9.fc42.i686 100% | 6.6 MiB/s | 148.3 KiB | 00m00s [ 81/314] libnsl2-0:2.0.1-3.fc42.i686 100% | 1.4 MiB/s | 30.6 KiB | 00m00s [ 82/314] libtirpc-0:1.3.6-1.rc3.fc42.2 100% | 4.6 MiB/s | 104.3 KiB | 00m00s [ 83/314] libpwquality-0:1.4.5-13.fc43. 100% | 4.6 MiB/s | 107.8 KiB | 00m00s [ 84/314] samba-ldb-ldap-modules-2:4.22 100% | 1.8 MiB/s | 40.1 KiB | 00m00s [ 85/314] wireshark-cli-1:4.4.7-1.fc43. 100% | 28.3 MiB/s | 19.9 MiB | 00m01s [ 86/314] qt6-qtshadertools-0:6.9.1-1.f 100% | 24.7 MiB/s | 2.1 MiB | 00m00s [ 87/314] double-conversion-0:3.3.1-3.f 100% | 2.5 MiB/s | 56.2 KiB | 00m00s [ 88/314] libb2-0:0.98.1-13.fc42.i686 100% | 1.3 MiB/s | 28.5 KiB | 00m00s [ 89/314] libproxy-0:0.5.8-2.fc42.i686 100% | 2.2 MiB/s | 46.6 KiB | 00m00s [ 90/314] pcre2-utf16-0:10.45-1.fc43.i6 100% | 10.5 MiB/s | 236.0 KiB | 00m00s [ 91/314] qt6-filesystem-0:6.9.1-1.fc43 100% | 452.7 KiB/s | 10.0 KiB | 00m00s [ 92/314] qt6-qtbase-common-0:6.9.1-1.f 100% | 625.6 KiB/s | 12.5 KiB | 00m00s [ 93/314] freetype-0:2.13.3-2.fc42.i686 100% | 16.5 MiB/s | 422.0 KiB | 00m00s [ 94/314] glx-utils-0:9.0.0-9.fc42.i686 100% | 3.2 MiB/s | 72.8 KiB | 00m00s [ 95/314] harfbuzz-0:11.2.1-1.fc43.i686 100% | 22.9 MiB/s | 1.1 MiB | 00m00s [ 96/314] libICE-0:1.1.2-2.fc42.i686 100% | 3.2 MiB/s | 81.0 KiB | 00m00s [ 97/314] libSM-0:1.2.5-2.fc42.i686 100% | 2.1 MiB/s | 45.0 KiB | 00m00s [ 98/314] libX11-xcb-0:1.8.11-1.fc42.i6 100% | 577.2 KiB/s | 11.5 KiB | 00m00s [ 99/314] libicu-0:76.1-4.fc42.i686 100% | 15.8 MiB/s | 10.9 MiB | 00m01s [100/314] qt6-qtdeclarative-0:6.9.1-3.f 100% | 19.8 MiB/s | 13.6 MiB | 00m01s [101/314] libdrm-0:2.4.125-1.fc43.i686 100% | 3.9 MiB/s | 174.8 KiB | 00m00s [102/314] libglvnd-egl-1:1.7.0-7.fc42.i 100% | 1.8 MiB/s | 37.4 KiB | 00m00s [103/314] libglvnd-opengl-1:1.7.0-7.fc4 100% | 1.7 MiB/s | 37.4 KiB | 00m00s [104/314] libglvnd-glx-1:1.7.0-7.fc42.i 100% | 5.9 MiB/s | 132.6 KiB | 00m00s [105/314] libinput-0:1.28.901-3.fc43.i6 100% | 9.9 MiB/s | 253.6 KiB | 00m00s [106/314] libjpeg-turbo-0:3.1.1-1.fc43. 100% | 11.4 MiB/s | 269.5 KiB | 00m00s [107/314] libpng-2:1.6.50-1.fc43.i686 100% | 5.6 MiB/s | 131.4 KiB | 00m00s [108/314] libxcb-0:1.17.0-5.fc42.i686 100% | 10.7 MiB/s | 251.9 KiB | 00m00s [109/314] libxkbcommon-x11-0:1.10.0-1.f 100% | 1.0 MiB/s | 22.9 KiB | 00m00s [110/314] libxkbcommon-0:1.10.0-1.fc43. 100% | 7.4 MiB/s | 173.1 KiB | 00m00s [111/314] mesa-libgbm-0:25.1.4-1.fc43.i 100% | 1.4 MiB/s | 28.1 KiB | 00m00s [112/314] mtdev-0:1.1.6-10.fc42.i686 100% | 1.0 MiB/s | 21.5 KiB | 00m00s [113/314] tslib-0:1.23-1.fc43.i686 100% | 5.9 MiB/s | 145.8 KiB | 00m00s [114/314] xcb-util-cursor-0:0.1.5-3.fc4 100% | 931.9 KiB/s | 18.6 KiB | 00m00s [115/314] xcb-util-image-0:0.4.1-7.fc42 100% | 966.4 KiB/s | 19.3 KiB | 00m00s [116/314] xcb-util-keysyms-0:0.4.1-7.fc 100% | 717.5 KiB/s | 14.3 KiB | 00m00s [117/314] xcb-util-renderutil-0:0.3.10- 100% | 883.0 KiB/s | 17.7 KiB | 00m00s [118/314] xcb-util-wm-0:0.4.2-7.fc42.i6 100% | 1.6 MiB/s | 33.3 KiB | 00m00s [119/314] gstreamer1-plugins-bad-free-l 100% | 13.4 MiB/s | 1.0 MiB | 00m00s [120/314] libXext-0:1.3.6-3.fc42.i686 100% | 2.0 MiB/s | 42.0 KiB | 00m00s [121/314] gstreamer1-0:1.26.3-1.fc43.i6 100% | 16.5 MiB/s | 1.7 MiB | 00m00s [122/314] gstreamer1-plugins-base-0:1.2 100% | 24.1 MiB/s | 2.4 MiB | 00m00s [123/314] libXrandr-0:1.5.4-5.fc42.i686 100% | 1.4 MiB/s | 29.1 KiB | 00m00s [124/314] libavutil-free-0:7.1.1-4.fc43 100% | 8.8 MiB/s | 379.9 KiB | 00m00s [125/314] libavformat-free-0:7.1.1-4.fc 100% | 20.8 MiB/s | 1.3 MiB | 00m00s [126/314] libswresample-free-0:7.1.1-4. 100% | 3.2 MiB/s | 74.5 KiB | 00m00s [127/314] libswscale-free-0:7.1.1-4.fc4 100% | 7.9 MiB/s | 202.0 KiB | 00m00s [128/314] pulseaudio-libs-0:17.0-6.fc43 100% | 11.8 MiB/s | 701.4 KiB | 00m00s [129/314] bcg729-0:1.1.1-12.fc43.i686 100% | 2.4 MiB/s | 59.2 KiB | 00m00s [130/314] c-ares-0:1.34.5-1.fc43.i686 100% | 5.1 MiB/s | 131.7 KiB | 00m00s [131/314] libavcodec-free-0:7.1.1-4.fc4 100% | 20.4 MiB/s | 4.3 MiB | 00m00s [132/314] ilbc-0:3.0.4-15.fc43.i686 100% | 2.4 MiB/s | 56.3 KiB | 00m00s [133/314] libsbc-0:2.0-6.fc42.i686 100% | 2.1 MiB/s | 45.6 KiB | 00m00s [134/314] qt6-qtquick3d-0:6.9.1-1.fc43. 100% | 26.4 MiB/s | 3.7 MiB | 00m00s [135/314] opencore-amr-0:0.1.6-8.fc42.i 100% | 7.1 MiB/s | 182.5 KiB | 00m00s [136/314] opus-0:1.5.2-2.fc42.i686 100% | 10.2 MiB/s | 241.3 KiB | 00m00s [137/314] snappy-0:1.2.2-1.fc43.i686 100% | 1.8 MiB/s | 41.3 KiB | 00m00s [138/314] spandsp-0:0.0.6-20.fc42.i686 100% | 14.1 MiB/s | 345.5 KiB | 00m00s [139/314] desktop-file-utils-0:0.28-1.f 100% | 3.1 MiB/s | 70.7 KiB | 00m00s [140/314] python3-ply-0:3.11-27.fc43.no 100% | 5.6 MiB/s | 132.2 KiB | 00m00s [141/314] default-fonts-core-sans-0:4.2 100% | 1.3 MiB/s | 25.2 KiB | 00m00s [142/314] fonts-filesystem-1:2.0.5-22.f 100% | 433.5 KiB/s | 8.7 KiB | 00m00s [143/314] xml-common-0:0.6.3-66.fc42.no 100% | 1.6 MiB/s | 31.2 KiB | 00m00s [144/314] libX11-common-0:1.8.11-1.fc42 100% | 6.4 MiB/s | 145.1 KiB | 00m00s [145/314] libXrender-0:0.9.12-2.fc42.i6 100% | 1.4 MiB/s | 29.0 KiB | 00m00s [146/314] libsmi-0:0.4.8-43.fc43.i686 100% | 15.6 MiB/s | 2.5 MiB | 00m00s [147/314] authselect-libs-0:1.6.0-1.fc4 100% | 9.4 MiB/s | 210.7 KiB | 00m00s [148/314] cracklib-0:2.9.11-7.fc42.i686 100% | 3.8 MiB/s | 82.2 KiB | 00m00s [149/314] qt6-qtsvg-0:6.9.1-2.fc43.i686 100% | 9.9 MiB/s | 314.9 KiB | 00m00s [150/314] duktape-0:2.7.0-9.fc42.i686 100% | 7.1 MiB/s | 175.3 KiB | 00m00s [151/314] graphite2-0:1.3.14-18.fc42.i6 100% | 4.5 MiB/s | 97.3 KiB | 00m00s [152/314] libpciaccess-0:0.16-15.fc42.i 100% | 1.4 MiB/s | 28.8 KiB | 00m00s [153/314] spirv-tools-libs-0:2025.2-1.f 100% | 26.4 MiB/s | 1.7 MiB | 00m00s [154/314] libglvnd-1:1.7.0-7.fc42.i686 100% | 5.6 MiB/s | 114.0 KiB | 00m00s [155/314] mesa-libEGL-0:25.1.4-1.fc43.i 100% | 6.7 MiB/s | 150.5 KiB | 00m00s [156/314] mesa-libGL-0:25.1.4-1.fc43.i6 100% | 6.4 MiB/s | 144.5 KiB | 00m00s [157/314] libevdev-0:1.13.4-1.fc43.i686 100% | 1.8 MiB/s | 38.8 KiB | 00m00s [158/314] libwacom-0:2.16.1-1.fc43.i686 100% | 2.6 MiB/s | 53.8 KiB | 00m00s [159/314] libXau-0:1.0.12-2.fc42.i686 100% | 1.6 MiB/s | 34.0 KiB | 00m00s [160/314] sdl2-compat-0:2.32.56-1.fc43. 100% | 6.4 MiB/s | 150.1 KiB | 00m00s [161/314] xcb-util-0:0.4.1-7.fc42.i686 100% | 884.4 KiB/s | 18.6 KiB | 00m00s [162/314] libunwind-0:1.8.1-2.fc43.i686 100% | 3.5 MiB/s | 74.9 KiB | 00m00s [163/314] xkeyboard-config-0:2.44-1.fc4 100% | 14.5 MiB/s | 923.4 KiB | 00m00s [164/314] libnice-0:0.1.22-7.fc43.i686 100% | 8.3 MiB/s | 211.9 KiB | 00m00s [165/314] libva-0:2.22.0-4.fc42.i686 100% | 5.4 MiB/s | 122.5 KiB | 00m00s [166/314] libwayland-client-0:1.23.1-1. 100% | 1.6 MiB/s | 33.5 KiB | 00m00s [167/314] vulkan-loader-0:1.4.313.0-1.f 100% | 6.9 MiB/s | 162.1 KiB | 00m00s [168/314] cdparanoia-libs-0:10.2-47.fc4 100% | 2.5 MiB/s | 56.4 KiB | 00m00s [169/314] alsa-lib-0:1.2.14-3.fc43.i686 100% | 12.4 MiB/s | 558.1 KiB | 00m00s [170/314] graphene-0:1.10.8-1.fc43.i686 100% | 3.2 MiB/s | 77.7 KiB | 00m00s [171/314] cairo-0:1.18.4-1.fc43.i686 100% | 12.9 MiB/s | 777.4 KiB | 00m00s [172/314] libXi-0:1.8.2-2.fc42.i686 100% | 2.0 MiB/s | 42.7 KiB | 00m00s [173/314] libXv-0:1.0.13-2.fc42.i686 100% | 830.2 KiB/s | 19.1 KiB | 00m00s [174/314] libgudev-0:238-7.fc42.i686 100% | 1.6 MiB/s | 35.1 KiB | 00m00s [175/314] libogg-2:1.3.5-11.fc42.i686 100% | 1.7 MiB/s | 33.9 KiB | 00m00s [176/314] libtheora-1:1.1.1-39.fc42.i68 100% | 6.8 MiB/s | 173.0 KiB | 00m00s [177/314] libvisual-1:0.4.2-1.fc43.i686 100% | 6.9 MiB/s | 175.7 KiB | 00m00s [178/314] libvorbis-1:1.3.7-12.fc42.i68 100% | 8.2 MiB/s | 193.2 KiB | 00m00s [179/314] libwayland-cursor-0:1.23.1-1. 100% | 883.4 KiB/s | 19.4 KiB | 00m00s [180/314] libwayland-egl-0:1.23.1-1.fc4 100% | 615.8 KiB/s | 12.3 KiB | 00m00s [181/314] orc-0:0.4.41-1.fc43.i686 100% | 8.7 MiB/s | 241.1 KiB | 00m00s [182/314] pango-0:1.56.4-1.fc43.i686 100% | 14.3 MiB/s | 367.3 KiB | 00m00s [183/314] iso-codes-0:4.18.0-1.fc43.noa 100% | 20.8 MiB/s | 3.6 MiB | 00m00s [184/314] aribb24-0:1.0.3^20160216git5e 100% | 1.6 MiB/s | 39.1 KiB | 00m00s [185/314] gsm-0:1.0.22-8.fc42.i686 100% | 1.7 MiB/s | 36.7 KiB | 00m00s [186/314] codec2-0:1.2.0-6.fc42.i686 100% | 15.1 MiB/s | 651.2 KiB | 00m00s [187/314] fdk-aac-free-0:2.0.0-15.fc42. 100% | 8.0 MiB/s | 335.2 KiB | 00m00s [188/314] lame-libs-0:3.100-19.fc42.i68 100% | 14.1 MiB/s | 345.4 KiB | 00m00s [189/314] lcms2-0:2.16-5.fc42.i686 100% | 8.6 MiB/s | 201.4 KiB | 00m00s [190/314] libaribcaption-0:1.1.1-2.fc42 100% | 4.5 MiB/s | 115.2 KiB | 00m00s [191/314] libdav1d-0:1.5.1-1.fc42.i686 100% | 14.9 MiB/s | 395.7 KiB | 00m00s [192/314] liblc3-0:1.1.3-2.fc43.i686 100% | 4.3 MiB/s | 105.6 KiB | 00m00s [193/314] libaom-0:3.12.0-1.fc43.i686 100% | 16.2 MiB/s | 1.3 MiB | 00m00s [194/314] libjxl-1:0.11.1-2.fc42.i686 100% | 16.3 MiB/s | 1.0 MiB | 00m00s [195/314] libwebp-0:1.6.0-1.fc43.i686 100% | 14.3 MiB/s | 336.0 KiB | 00m00s [196/314] noopenh264-0:2.6.0-1.fc43.i68 100% | 1.0 MiB/s | 22.0 KiB | 00m00s [197/314] librsvg2-0:2.60.0-1.fc43.i686 100% | 24.8 MiB/s | 2.0 MiB | 00m00s [198/314] openjpeg-0:2.5.3-6.fc42.i686 100% | 8.7 MiB/s | 205.5 KiB | 00m00s [199/314] libvpx-0:1.15.0-3.fc43.i686 100% | 14.3 MiB/s | 1.4 MiB | 00m00s [200/314] speex-0:1.2.0-19.fc42.i686 100% | 3.0 MiB/s | 71.6 KiB | 00m00s [201/314] rav1e-libs-0:0.7.1-5.fc42.i68 100% | 18.7 MiB/s | 802.9 KiB | 00m00s [202/314] twolame-libs-0:0.4.0-6.fc42.i 100% | 3.1 MiB/s | 69.7 KiB | 00m00s [203/314] vo-amrwbenc-0:0.1.3-22.fc42.i 100% | 3.3 MiB/s | 81.9 KiB | 00m00s [204/314] xvidcore-0:1.3.7-13.fc42.i686 100% | 10.3 MiB/s | 262.5 KiB | 00m00s [205/314] svt-av1-libs-0:2.3.0-1.fc43.i 100% | 15.3 MiB/s | 974.1 KiB | 00m00s [206/314] zvbi-0:0.2.44-1.fc43.i686 100% | 10.3 MiB/s | 442.3 KiB | 00m00s [207/314] game-music-emu-0:0.6.4-1.fc43 100% | 6.7 MiB/s | 171.5 KiB | 00m00s [208/314] libbluray-0:1.3.4-9.fc42.i686 100% | 7.4 MiB/s | 181.2 KiB | 00m00s [209/314] libchromaprint-0:1.5.1-24.fc4 100% | 2.1 MiB/s | 44.3 KiB | 00m00s [210/314] libdvdnav-0:6.1.1-10.fc42.i68 100% | 2.5 MiB/s | 58.5 KiB | 00m00s [211/314] libdvdread-0:6.1.3-9.fc42.i68 100% | 3.0 MiB/s | 74.9 KiB | 00m00s [212/314] libmodplug-1:0.8.9.0-27.fc42. 100% | 7.4 MiB/s | 182.7 KiB | 00m00s [213/314] librabbitmq-0:0.15.0-2.fc42.i 100% | 2.0 MiB/s | 46.9 KiB | 00m00s [214/314] librist-0:0.2.7-9.fc43.i686 100% | 3.4 MiB/s | 84.2 KiB | 00m00s [215/314] libopenmpt-0:0.8.1-1.fc43.i68 100% | 17.9 MiB/s | 823.9 KiB | 00m00s [216/314] libvdpau-0:1.5-9.fc42.i686 100% | 738.2 KiB/s | 17.0 KiB | 00m00s [217/314] srt-libs-0:1.5.4-2.fc42.i686 100% | 10.3 MiB/s | 423.0 KiB | 00m00s [218/314] zeromq-0:4.3.5-21.fc42.i686 100% | 11.0 MiB/s | 473.6 KiB | 00m00s [219/314] soxr-0:0.1.3-18.fc42.i686 100% | 3.6 MiB/s | 88.6 KiB | 00m00s [220/314] libasyncns-0:0.8-30.fc42.i686 100% | 1.4 MiB/s | 30.5 KiB | 00m00s [221/314] libsndfile-0:1.2.2-9.fc43.i68 100% | 9.7 MiB/s | 248.8 KiB | 00m00s [222/314] openxr-libs-0:1.1.49-2.fc43.i 100% | 4.2 MiB/s | 116.9 KiB | 00m00s [223/314] qt6-qtquicktimeline-0:6.9.1-1 100% | 3.9 MiB/s | 96.1 KiB | 00m00s [224/314] libtiff-0:4.7.0-3.fc42.i686 100% | 10.1 MiB/s | 238.5 KiB | 00m00s [225/314] emacs-filesystem-1:30.0-4.fc4 100% | 387.1 KiB/s | 7.4 KiB | 00m00s [226/314] abattis-cantarell-vf-fonts-0: 100% | 5.9 MiB/s | 120.3 KiB | 00m00s [227/314] assimp-0:5.4.3-2.fc43.i686 100% | 24.9 MiB/s | 2.5 MiB | 00m00s [228/314] google-noto-sans-vf-fonts-0:2 100% | 14.0 MiB/s | 614.5 KiB | 00m00s [229/314] libwayland-server-0:1.23.1-1. 100% | 2.0 MiB/s | 43.5 KiB | 00m00s [230/314] libXxf86vm-0:1.1.6-2.fc42.i68 100% | 895.0 KiB/s | 18.8 KiB | 00m00s [231/314] libwacom-data-0:2.16.1-1.fc43 100% | 8.8 MiB/s | 207.5 KiB | 00m00s [232/314] hwdata-0:0.397-1.fc43.noarch 100% | 16.4 MiB/s | 1.7 MiB | 00m00s [233/314] gupnp-igd-0:1.6.0-6.fc42.i686 100% | 1.5 MiB/s | 35.0 KiB | 00m00s [234/314] SDL3-0:3.2.16-1.fc43.i686 100% | 22.2 MiB/s | 1.1 MiB | 00m00s [235/314] libXfixes-0:6.0.1-5.fc42.i686 100% | 900.8 KiB/s | 19.8 KiB | 00m00s [236/314] mesa-filesystem-0:25.1.4-1.fc 100% | 1.1 MiB/s | 21.7 KiB | 00m00s [237/314] lzo-0:2.10-14.fc42.i686 100% | 3.2 MiB/s | 71.8 KiB | 00m00s [238/314] pixman-0:0.46.2-1.fc43.i686 100% | 11.5 MiB/s | 304.9 KiB | 00m00s [239/314] sdl12-compat-0:1.2.68-5.fc42. 100% | 3.7 MiB/s | 95.3 KiB | 00m00s [240/314] fribidi-0:1.0.16-2.fc42.i686 100% | 2.5 MiB/s | 54.2 KiB | 00m00s [241/314] libthai-0:0.1.29-10.fc42.i686 100% | 9.0 MiB/s | 212.2 KiB | 00m00s [242/314] highway-0:1.2.0-5.fc42.i686 100% | 10.1 MiB/s | 423.8 KiB | 00m00s [243/314] shared-mime-info-0:2.4-1.fc43 100% | 9.8 MiB/s | 401.1 KiB | 00m00s [244/314] cairo-gobject-0:1.18.4-1.fc43 100% | 763.5 KiB/s | 16.8 KiB | 00m00s [245/314] gdk-pixbuf2-0:2.42.12-10.fc42 100% | 10.4 MiB/s | 477.8 KiB | 00m00s [246/314] rsvg-pixbuf-loader-0:2.60.0-1 100% | 8.1 MiB/s | 182.0 KiB | 00m00s [247/314] libudfread-0:1.1.2-11.fc42.i6 100% | 1.5 MiB/s | 36.2 KiB | 00m00s [248/314] lpcnetfreedv-0:0.5-8.fc42.i68 100% | 29.3 MiB/s | 7.3 MiB | 00m00s [249/314] mpg123-libs-0:1.32.10-1.fc43. 100% | 8.2 MiB/s | 361.0 KiB | 00m00s [250/314] cjson-0:1.7.18-2.fc42.i686 100% | 1.4 MiB/s | 33.2 KiB | 00m00s [251/314] mbedtls-0:3.6.4-2.fc43.i686 100% | 17.7 MiB/s | 542.3 KiB | 00m00s [252/314] libsodium-0:1.0.20-5.fc43.i68 100% | 7.5 MiB/s | 193.2 KiB | 00m00s [253/314] openpgm-0:5.3.128-4.fc42.i686 100% | 7.0 MiB/s | 186.1 KiB | 00m00s [254/314] flac-libs-0:1.5.0-2.fc43.i686 100% | 11.6 MiB/s | 297.7 KiB | 00m00s [255/314] poly2tri-0:0.0^20130501hg2624 100% | 1.3 MiB/s | 32.8 KiB | 00m00s [256/314] pugixml-0:1.14-2.fc42.i686 100% | 4.3 MiB/s | 113.9 KiB | 00m00s [257/314] jsoncpp-0:1.9.6-1.fc43.i686 100% | 5.2 MiB/s | 112.0 KiB | 00m00s [258/314] jbigkit-libs-0:2.1-31.fc42.i6 100% | 2.4 MiB/s | 53.4 KiB | 00m00s [259/314] liblerc-0:4.0.0-8.fc42.i686 100% | 9.3 MiB/s | 228.7 KiB | 00m00s [260/314] google-noto-fonts-common-0:20 100% | 824.6 KiB/s | 17.3 KiB | 00m00s [261/314] mesa-dri-drivers-0:25.1.4-1.f 100% | 22.2 MiB/s | 13.2 MiB | 00m01s [262/314] libxshmfence-0:1.3.2-6.fc42.i 100% | 418.1 KiB/s | 13.4 KiB | 00m00s [263/314] lm_sensors-libs-0:3.6.0-22.fc 100% | 1.7 MiB/s | 41.0 KiB | 00m00s [264/314] libdecor-0:0.2.3-5.fc43.i686 100% | 2.5 MiB/s | 60.6 KiB | 00m00s [265/314] gssdp-0:1.6.4-1.fc43.i686 100% | 2.5 MiB/s | 60.3 KiB | 00m00s [266/314] gupnp-0:1.6.9-1.fc43.i686 100% | 4.6 MiB/s | 112.7 KiB | 00m00s [267/314] libdatrie-0:0.2.13-11.fc42.i6 100% | 1.5 MiB/s | 32.9 KiB | 00m00s [268/314] libedit-0:3.1-55.20250104cvs. 100% | 4.9 MiB/s | 110.7 KiB | 00m00s [269/314] llvm-filesystem-0:20.1.8-1.fc 100% | 749.1 KiB/s | 15.0 KiB | 00m00s [270/314] libsoup3-0:3.6.5-1.fc43.i686 100% | 15.6 MiB/s | 400.3 KiB | 00m00s [271/314] dbus-1:1.16.0-3.fc42.i686 100% | 350.0 KiB/s | 7.7 KiB | 00m00s [272/314] adwaita-icon-theme-0:48.1-1.f 100% | 11.9 MiB/s | 279.4 KiB | 00m00s [273/314] at-spi2-atk-0:2.57.0-1.fc43.i 100% | 4.0 MiB/s | 94.2 KiB | 00m00s [274/314] atk-0:2.57.0-1.fc43.i686 100% | 3.5 MiB/s | 82.1 KiB | 00m00s [275/314] colord-libs-0:1.4.8-1.fc43.i6 100% | 9.9 MiB/s | 242.9 KiB | 00m00s [276/314] gdk-pixbuf2-modules-0:2.42.12 100% | 1.4 MiB/s | 29.3 KiB | 00m00s [277/314] gtk-update-icon-cache-0:3.24. 100% | 1.7 MiB/s | 34.0 KiB | 00m00s [278/314] libXcomposite-0:0.4.6-5.fc42. 100% | 1.2 MiB/s | 24.6 KiB | 00m00s [279/314] libXcursor-0:1.2.3-2.fc42.i68 100% | 1.5 MiB/s | 33.2 KiB | 00m00s [280/314] gtk3-0:3.24.49-2.fc43.i686 100% | 22.4 MiB/s | 6.0 MiB | 00m00s [281/314] libXdamage-0:1.1.6-5.fc42.i68 100% | 1.0 MiB/s | 23.6 KiB | 00m00s [282/314] libXinerama-0:1.1.5-8.fc42.i6 100% | 658.1 KiB/s | 14.5 KiB | 00m00s [283/314] libcloudproviders-0:0.3.6-1.f 100% | 2.2 MiB/s | 49.8 KiB | 00m00s [284/314] libepoxy-0:1.5.10-9.fc42.i686 100% | 10.5 MiB/s | 246.6 KiB | 00m00s [285/314] libtinysparql-0:3.10~alpha-1. 100% | 14.7 MiB/s | 392.7 KiB | 00m00s [286/314] adwaita-cursor-theme-0:48.1-1 100% | 15.2 MiB/s | 373.4 KiB | 00m00s [287/314] at-spi2-core-0:2.57.0-1.fc43. 100% | 14.2 MiB/s | 379.3 KiB | 00m00s [288/314] libgusb-0:0.4.9-3.fc42.i686 100% | 3.1 MiB/s | 67.4 KiB | 00m00s [289/314] avahi-glib-0:0.9~rc2-3.fc43.i 100% | 800.2 KiB/s | 16.0 KiB | 00m00s [290/314] adwaita-icon-theme-legacy-0:4 100% | 22.0 MiB/s | 2.2 MiB | 00m00s [291/314] json-glib-0:1.10.6-2.fc42.i68 100% | 7.3 MiB/s | 165.0 KiB | 00m00s [292/314] libXtst-0:1.2.5-2.fc42.i686 100% | 1.0 MiB/s | 21.5 KiB | 00m00s [293/314] xprop-0:1.2.8-3.fc42.i686 100% | 1.6 MiB/s | 35.5 KiB | 00m00s [294/314] dbus-broker-0:37-1.fc43.i686 100% | 8.1 MiB/s | 181.6 KiB | 00m00s [295/314] libseccomp-0:2.6.0-1.fc43.i68 100% | 3.6 MiB/s | 77.9 KiB | 00m00s [296/314] systemd-pam-0:257.7-1.fc43.i6 100% | 16.1 MiB/s | 413.2 KiB | 00m00s [297/314] systemd-shared-0:257.7-1.fc43 100% | 23.5 MiB/s | 1.8 MiB | 00m00s [298/314] systemd-0:257.7-1.fc43.i686 100% | 22.3 MiB/s | 4.0 MiB | 00m00s [299/314] dbus-common-1:1.16.0-3.fc42.n 100% | 722.7 KiB/s | 14.5 KiB | 00m00s [300/314] wget2-wget-0:2.2.0-5.fc43.i68 100% | 420.8 KiB/s | 9.7 KiB | 00m00s [301/314] wget2-0:2.2.0-5.fc43.i686 100% | 10.5 MiB/s | 279.7 KiB | 00m00s [302/314] gpgme-0:1.24.3-2.fc43.i686 100% | 9.8 MiB/s | 230.0 KiB | 00m00s [303/314] wget2-libs-0:2.2.0-5.fc43.i68 100% | 6.3 MiB/s | 161.9 KiB | 00m00s [304/314] gnutls-dane-0:3.8.10-1.fc43.i 100% | 1.8 MiB/s | 37.0 KiB | 00m00s [305/314] unbound-libs-0:1.23.0-4.fc43. 100% | 20.3 MiB/s | 582.2 KiB | 00m00s [306/314] hiredis-0:1.2.0-6.fc42.i686 100% | 2.5 MiB/s | 54.5 KiB | 00m00s [307/314] protobuf-c-0:1.5.1-1.fc43.i68 100% | 1.4 MiB/s | 33.0 KiB | 00m00s [308/314] OpenCL-ICD-Loader-0:3.0.6-2.2 100% | 1.3 MiB/s | 32.3 KiB | 00m00s [309/314] systemd-rpm-macros-0:257.7-1. 100% | 655.1 KiB/s | 13.1 KiB | 00m00s [310/314] pyproject-rpm-macros-0:1.18.3 100% | 2.0 MiB/s | 44.3 KiB | 00m00s [311/314] python-rpm-macros-0:3.14-2.fc 100% | 850.7 KiB/s | 17.0 KiB | 00m00s [312/314] python3-rpm-generators-0:14-1 100% | 1.4 MiB/s | 29.2 KiB | 00m00s [313/314] python3-rpm-macros-0:3.14-2.f 100% | 578.7 KiB/s | 11.6 KiB | 00m00s [314/314] llvm-libs-0:20.1.8-1.fc43.i68 100% | 20.2 MiB/s | 34.7 MiB | 00m02s -------------------------------------------------------------------------------- [314/314] Total 100% | 39.5 MiB/s | 248.7 MiB | 00m06s Running transaction [ 1/316] Verify package files 100% | 337.0 B/s | 314.0 B | 00m01s [ 2/316] Prepare transaction 100% | 1.4 KiB/s | 314.0 B | 00m00s [ 3/316] Installing glib2-0:2.85.1-1.f 100% | 202.2 MiB/s | 15.2 MiB | 00m00s [ 4/316] Installing libtalloc-0:2.4.3- 100% | 59.0 MiB/s | 60.4 KiB | 00m00s [ 5/316] Installing libtevent-0:0.16.2 100% | 103.3 MiB/s | 105.8 KiB | 00m00s [ 6/316] Installing libwayland-client- 100% | 52.9 MiB/s | 54.1 KiB | 00m00s [ 7/316] Installing libpng-2:1.6.50-1. 100% | 126.1 MiB/s | 258.3 KiB | 00m00s [ 8/316] Installing libtdb-0:1.4.13-3. 100% | 106.3 MiB/s | 108.8 KiB | 00m00s [ 9/316] Installing dbus-libs-1:1.16.0 100% | 182.7 MiB/s | 374.1 KiB | 00m00s [ 10/316] Installing python-rpm-macros- 100% | 23.0 MiB/s | 23.5 KiB | 00m00s [ 11/316] Installing fonts-filesystem-1 100% | 0.0 B/s | 788.0 B | 00m00s [ 12/316] Installing python3-rpm-macros 100% | 0.0 B/s | 6.8 KiB | 00m00s [ 13/316] Installing mesa-filesystem-0: 100% | 476.6 KiB/s | 4.3 KiB | 00m00s [ 14/316] Installing xml-common-0:0.6.3 100% | 39.6 MiB/s | 81.1 KiB | 00m00s [ 15/316] Installing hicolor-icon-theme 100% | 8.0 MiB/s | 179.7 KiB | 00m00s [ 16/316] Installing libogg-2:1.3.5-11. 100% | 45.0 MiB/s | 46.1 KiB | 00m00s [ 17/316] Installing libX11-xcb-0:1.8.1 100% | 10.8 MiB/s | 11.0 KiB | 00m00s [ 18/316] Installing expat-0:2.7.1-1.fc 100% | 18.0 MiB/s | 294.7 KiB | 00m00s [ 19/316] Installing libjpeg-turbo-0:3. 100% | 214.1 MiB/s | 877.1 KiB | 00m00s [ 20/316] Installing libvorbis-1:1.3.7- 100% | 187.9 MiB/s | 769.6 KiB | 00m00s [ 21/316] Installing avahi-libs-0:0.9~r 100% | 89.5 MiB/s | 183.4 KiB | 00m00s [ 22/316] Installing opus-0:1.5.2-2.fc4 100% | 220.8 MiB/s | 452.1 KiB | 00m00s [ 23/316] Installing libicu-0:76.1-4.fc 100% | 303.3 MiB/s | 36.7 MiB | 00m00s [ 24/316] Installing libwayland-cursor- 100% | 32.7 MiB/s | 33.4 KiB | 00m00s [ 25/316] Installing libsoup3-0:3.6.5-1 100% | 109.8 MiB/s | 1.2 MiB | 00m00s [ 26/316] Installing libglvnd-1:1.7.0-7 100% | 231.0 MiB/s | 473.0 KiB | 00m00s [ 27/316] Installing libtirpc-0:1.3.6-1 100% | 105.4 MiB/s | 215.8 KiB | 00m00s [ 28/316] Installing libnl3-0:3.11.0-4. 100% | 181.6 MiB/s | 1.1 MiB | 00m00s [ 29/316] Installing libglvnd-opengl-1: 100% | 129.7 MiB/s | 132.8 KiB | 00m00s [ 30/316] Installing gssdp-0:1.6.4-1.fc 100% | 74.1 MiB/s | 151.7 KiB | 00m00s [ 31/316] Installing libtheora-1:1.1.1- 100% | 163.3 MiB/s | 501.6 KiB | 00m00s [ 32/316] Installing libgudev-0:238-7.f 100% | 43.2 MiB/s | 88.5 KiB | 00m00s [ 33/316] Installing shared-mime-info-0 100% | 74.1 MiB/s | 2.6 MiB | 00m00s [ 34/316] Installing gdk-pixbuf2-0:2.42 100% | 79.2 MiB/s | 2.5 MiB | 00m00s [ 35/316] Installing json-glib-0:1.10.6 100% | 66.6 MiB/s | 613.9 KiB | 00m00s [ 36/316] Installing gpgme-0:1.24.3-2.f 100% | 38.7 MiB/s | 634.1 KiB | 00m00s [ 37/316] Installing libseccomp-0:2.6.0 100% | 112.3 MiB/s | 230.0 KiB | 00m00s [ 38/316] Installing mpg123-libs-0:1.32 100% | 165.4 MiB/s | 846.8 KiB | 00m00s [ 39/316] Installing fribidi-0:1.0.16-2 100% | 13.9 MiB/s | 198.7 KiB | 00m00s [ 40/316] Installing libwayland-server- 100% | 76.8 MiB/s | 78.7 KiB | 00m00s [ 41/316] Installing libdvdread-0:6.1.3 100% | 82.6 MiB/s | 169.1 KiB | 00m00s [ 42/316] Installing libwebp-0:1.6.0-1. 100% | 200.2 MiB/s | 1.0 MiB | 00m00s [ 43/316] Installing libdav1d-0:1.5.1-1 100% | 268.4 MiB/s | 1.1 MiB | 00m00s [ 44/316] Installing lcms2-0:2.16-5.fc4 100% | 154.2 MiB/s | 473.6 KiB | 00m00s [ 45/316] Installing lame-libs-0:3.100- 100% | 305.2 MiB/s | 1.2 MiB | 00m00s [ 46/316] Installing gsm-0:1.0.22-8.fc4 100% | 68.0 MiB/s | 69.6 KiB | 00m00s [ 47/316] Installing libwayland-egl-0:1 100% | 12.5 MiB/s | 12.8 KiB | 00m00s [ 48/316] Installing libunwind-0:1.8.1- 100% | 89.2 MiB/s | 182.7 KiB | 00m00s [ 49/316] Installing libevdev-0:1.13.4- 100% | 72.6 MiB/s | 74.3 KiB | 00m00s [ 50/316] Installing spirv-tools-libs-0 100% | 302.7 MiB/s | 6.1 MiB | 00m00s [ 51/316] Installing snappy-0:1.2.2-1.f 100% | 71.0 MiB/s | 72.7 KiB | 00m00s [ 52/316] Installing opencore-amr-0:0.1 100% | 172.7 MiB/s | 353.7 KiB | 00m00s [ 53/316] Installing ilbc-0:3.0.4-15.fc 100% | 90.0 MiB/s | 92.1 KiB | 00m00s [ 54/316] Installing mtdev-0:1.1.6-10.f 100% | 29.0 MiB/s | 29.7 KiB | 00m00s [ 55/316] Installing libICE-0:1.1.2-2.f 100% | 197.9 MiB/s | 202.7 KiB | 00m00s [ 56/316] Installing speexdsp-0:1.2.1-8 100% | 253.1 MiB/s | 518.3 KiB | 00m00s [ 57/316] Installing libmaxminddb-0:1.1 100% | 5.5 MiB/s | 85.2 KiB | 00m00s [ 58/316] Installing iso-codes-0:4.18.0 100% | 191.4 MiB/s | 21.6 MiB | 00m00s [ 59/316] Installing pyproject-rpm-macr 100% | 113.7 MiB/s | 116.5 KiB | 00m00s [ 60/316] Installing abattis-cantarell- 100% | 13.6 MiB/s | 194.4 KiB | 00m00s >>> Running sysusers scriptlet: dbus-common-1:1.16.0-3.fc42.noarch >>> Finished sysusers scriptlet: dbus-common-1:1.16.0-3.fc42.noarch >>> Scriptlet output: >>> Creating group 'dbus' with GID 81. >>> Creating user 'dbus' (System Message Bus) with UID 81 and GID 81. >>> [ 61/316] Installing dbus-common-1:1.16 100% | 967.9 KiB/s | 13.6 KiB | 00m00s [ 62/316] Installing adwaita-icon-theme 100% | 30.8 MiB/s | 2.4 MiB | 00m00s [ 63/316] Installing adwaita-cursor-the 100% | 439.5 MiB/s | 11.4 MiB | 00m00s [ 64/316] Installing adwaita-icon-theme 100% | 38.2 MiB/s | 1.3 MiB | 00m00s [ 65/316] Installing llvm-filesystem-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [ 66/316] Installing google-noto-fonts- 100% | 18.1 MiB/s | 18.5 KiB | 00m00s [ 67/316] Installing google-noto-sans-v 100% | 231.9 MiB/s | 1.4 MiB | 00m00s [ 68/316] Installing default-fonts-core 100% | 4.4 MiB/s | 18.2 KiB | 00m00s [ 69/316] Installing libwacom-data-0:2. 100% | 44.8 MiB/s | 1.5 MiB | 00m00s [ 70/316] Installing hwdata-0:0.397-1.f 100% | 398.4 MiB/s | 9.6 MiB | 00m00s [ 71/316] Installing emacs-filesystem-1 100% | 531.2 KiB/s | 544.0 B | 00m00s [ 72/316] Installing xkeyboard-config-0 100% | 180.3 MiB/s | 6.7 MiB | 00m00s [ 73/316] Installing libX11-common-0:1. 100% | 66.0 MiB/s | 1.2 MiB | 00m00s [ 74/316] Installing qt6-filesystem-0:6 100% | 2.0 MiB/s | 2.0 KiB | 00m00s [ 75/316] Installing cups-filesystem-1: 100% | 593.8 KiB/s | 1.8 KiB | 00m00s [ 76/316] Installing tzdata-0:2025b-1.f 100% | 25.2 MiB/s | 1.9 MiB | 00m00s [ 77/316] Installing python-pip-wheel-0 100% | 415.0 MiB/s | 1.2 MiB | 00m00s [ 78/316] Installing cups-libs-1:2.4.12 100% | 164.8 MiB/s | 674.9 KiB | 00m00s [ 79/316] Installing libxkbcommon-0:1.1 100% | 130.3 MiB/s | 400.2 KiB | 00m00s [ 80/316] Installing desktop-file-utils 100% | 13.4 MiB/s | 205.8 KiB | 00m00s [ 81/316] Installing xdg-utils-0:1.2.1- 100% | 22.8 MiB/s | 349.5 KiB | 00m00s [ 82/316] Installing libpciaccess-0:0.1 100% | 48.0 MiB/s | 49.2 KiB | 00m00s [ 83/316] Installing libdrm-0:2.4.125-1 100% | 25.6 MiB/s | 419.3 KiB | 00m00s [ 84/316] Installing dbus-broker-0:37-1 100% | 14.2 MiB/s | 392.3 KiB | 00m00s [ 85/316] Installing dbus-1:1.16.0-3.fc 100% | 0.0 B/s | 124.0 B | 00m00s [ 86/316] Installing gupnp-0:1.6.9-1.fc 100% | 149.0 MiB/s | 305.1 KiB | 00m00s [ 87/316] Installing gupnp-igd-0:1.6.0- 100% | 70.1 MiB/s | 71.8 KiB | 00m00s [ 88/316] Installing libnice-0:0.1.22-7 100% | 29.8 MiB/s | 518.2 KiB | 00m00s [ 89/316] Installing libSM-0:1.2.5-2.fc 100% | 99.2 MiB/s | 101.6 KiB | 00m00s [ 90/316] Installing libdvdnav-0:6.1.1- 100% | 122.1 MiB/s | 125.1 KiB | 00m00s [ 91/316] Installing libopenmpt-0:0.8.1 100% | 267.1 MiB/s | 1.9 MiB | 00m00s [ 92/316] Installing systemd-shared-0:2 100% | 118.6 MiB/s | 4.7 MiB | 00m00s >>> Running sysusers scriptlet: systemd-0:257.7-1.fc43.i686 >>> Finished sysusers scriptlet: systemd-0:257.7-1.fc43.i686 >>> Scriptlet output: >>> Creating group 'systemd-journal' with GID 190. >>> >>> Running sysusers scriptlet: systemd-0:257.7-1.fc43.i686 >>> Finished sysusers scriptlet: systemd-0:257.7-1.fc43.i686 >>> Scriptlet output: >>> Creating group 'systemd-oom' with GID 999. >>> Creating user 'systemd-oom' (systemd Userspace OOM Killer) with UID 999 and >>> [ 93/316] Installing systemd-0:257.7-1. 100% | 40.8 MiB/s | 11.7 MiB | 00m00s [ 94/316] Installing systemd-pam-0:257. 100% | 46.8 MiB/s | 1.1 MiB | 00m00s >>> Running sysusers scriptlet: samba-common-2:4.22.3-2.fc43.noarch >>> Finished sysusers scriptlet: samba-common-2:4.22.3-2.fc43.noarch >>> Scriptlet output: >>> Creating group 'printadmin' with GID 998. >>> [ 95/316] Installing samba-common-2:4.2 100% | 12.6 MiB/s | 205.6 KiB | 00m00s [ 96/316] Installing samba-client-libs- 100% | 249.8 MiB/s | 22.5 MiB | 00m00s [ 97/316] Installing libwbclient-2:4.22 100% | 39.8 MiB/s | 81.4 KiB | 00m00s [ 98/316] Installing samba-common-libs- 100% | 100.0 MiB/s | 307.2 KiB | 00m00s [ 99/316] Installing libldb-2:4.22.3-2. 100% | 94.7 MiB/s | 484.8 KiB | 00m00s [100/316] Installing libnetapi-2:4.22.3 100% | 184.4 MiB/s | 566.6 KiB | 00m00s [101/316] Installing samba-libs-2:4.22. 100% | 100.8 MiB/s | 413.1 KiB | 00m00s [102/316] Installing libsmbclient-2:4.2 100% | 88.8 MiB/s | 181.9 KiB | 00m00s [103/316] Installing samba-dcerpc-2:4.2 100% | 274.0 MiB/s | 3.3 MiB | 00m00s [104/316] Installing samba-ldb-ldap-mod 100% | 55.6 MiB/s | 57.0 KiB | 00m00s [105/316] Installing libgusb-0:0.4.9-3. 100% | 79.5 MiB/s | 162.9 KiB | 00m00s [106/316] Installing colord-libs-0:1.4. 100% | 207.5 MiB/s | 849.8 KiB | 00m00s [107/316] Installing gtk-update-icon-ca 100% | 4.1 MiB/s | 58.3 KiB | 00m00s [108/316] Installing libibverbs-0:58.0- 100% | 134.5 MiB/s | 1.2 MiB | 00m00s [109/316] Installing libpcap-14:1.10.5- 100% | 135.6 MiB/s | 416.6 KiB | 00m00s [110/316] Installing libnsl2-0:2.0.1-3. 100% | 56.8 MiB/s | 58.2 KiB | 00m00s [111/316] Installing avahi-glib-0:0.9~r 100% | 19.2 MiB/s | 19.7 KiB | 00m00s [112/316] Installing libtinysparql-0:3. 100% | 221.6 MiB/s | 1.3 MiB | 00m00s [113/316] Installing flac-libs-0:1.5.0- 100% | 187.8 MiB/s | 769.0 KiB | 00m00s [114/316] Installing libsndfile-0:1.2.2 100% | 206.6 MiB/s | 634.6 KiB | 00m00s [115/316] Installing aribb24-0:1.0.3^20 100% | 80.5 MiB/s | 82.5 KiB | 00m00s [116/316] Installing zvbi-0:0.2.44-1.fc 100% | 30.8 MiB/s | 1.2 MiB | 00m00s [117/316] Installing graphene-0:1.10.8- 100% | 109.1 MiB/s | 223.5 KiB | 00m00s [118/316] Installing libcloudproviders- 100% | 122.5 MiB/s | 125.4 KiB | 00m00s [119/316] Installing OpenCL-ICD-Loader- 100% | 88.3 MiB/s | 90.4 KiB | 00m00s [120/316] Installing protobuf-c-0:1.5.1 100% | 53.3 MiB/s | 54.6 KiB | 00m00s [121/316] Installing hiredis-0:1.2.0-6. 100% | 107.4 MiB/s | 110.0 KiB | 00m00s [122/316] Installing libepoxy-0:1.5.10- 100% | 268.2 MiB/s | 1.1 MiB | 00m00s [123/316] Installing libedit-0:3.1-55.2 100% | 119.7 MiB/s | 245.1 KiB | 00m00s [124/316] Installing llvm-libs-0:20.1.8 100% | 350.9 MiB/s | 142.8 MiB | 00m00s [125/316] Installing libdatrie-0:0.2.13 100% | 60.7 MiB/s | 62.2 KiB | 00m00s [126/316] Installing libthai-0:0.1.29-1 100% | 190.5 MiB/s | 780.4 KiB | 00m00s [127/316] Installing lm_sensors-libs-0: 100% | 80.2 MiB/s | 82.1 KiB | 00m00s [128/316] Installing libxshmfence-0:1.3 100% | 12.5 MiB/s | 12.8 KiB | 00m00s [129/316] Installing liblerc-0:4.0.0-8. 100% | 219.0 MiB/s | 672.9 KiB | 00m00s [130/316] Installing jbigkit-libs-0:2.1 100% | 115.2 MiB/s | 117.9 KiB | 00m00s [131/316] Installing libtiff-0:4.7.0-3. 100% | 213.6 MiB/s | 656.1 KiB | 00m00s [132/316] Installing spandsp-0:0.0.6-20 100% | 212.4 MiB/s | 870.1 KiB | 00m00s [133/316] Installing gdk-pixbuf2-module 100% | 61.5 MiB/s | 63.0 KiB | 00m00s [134/316] Installing jsoncpp-0:1.9.6-1. 100% | 128.2 MiB/s | 262.5 KiB | 00m00s [135/316] Installing openxr-libs-0:1.1. 100% | 129.2 MiB/s | 264.5 KiB | 00m00s [136/316] Installing pugixml-0:1.14-2.f 100% | 134.4 MiB/s | 275.3 KiB | 00m00s [137/316] Installing poly2tri-0:0.0^201 100% | 55.4 MiB/s | 56.7 KiB | 00m00s [138/316] Installing assimp-0:5.4.3-2.f 100% | 195.4 MiB/s | 7.2 MiB | 00m00s [139/316] Installing openpgm-0:5.3.128- 100% | 158.7 MiB/s | 324.9 KiB | 00m00s [140/316] Installing libsodium-0:1.0.20 100% | 147.4 MiB/s | 452.9 KiB | 00m00s [141/316] Installing zeromq-0:4.3.5-21. 100% | 47.6 MiB/s | 925.3 KiB | 00m00s [142/316] Installing mbedtls-0:3.6.4-2. 100% | 229.8 MiB/s | 1.4 MiB | 00m00s [143/316] Installing cjson-0:1.7.18-2.f 100% | 2.8 MiB/s | 68.5 KiB | 00m00s [144/316] Installing librist-0:0.2.7-9. 100% | 81.1 MiB/s | 166.1 KiB | 00m00s [145/316] Installing libudfread-0:1.1.2 100% | 65.0 MiB/s | 66.6 KiB | 00m00s [146/316] Installing highway-0:1.2.0-5. 100% | 280.4 MiB/s | 2.2 MiB | 00m00s [147/316] Installing libjxl-1:0.11.1-2. 100% | 258.9 MiB/s | 2.6 MiB | 00m00s [148/316] Installing lpcnetfreedv-0:0.5 100% | 423.5 MiB/s | 14.8 MiB | 00m00s [149/316] Installing codec2-0:1.2.0-6.f 100% | 228.1 MiB/s | 1.4 MiB | 00m00s [150/316] Installing pixman-0:0.46.2-1. 100% | 247.0 MiB/s | 758.9 KiB | 00m00s [151/316] Installing lzo-0:2.10-14.fc42 100% | 167.8 MiB/s | 171.8 KiB | 00m00s [152/316] Installing libasyncns-0:0.8-3 100% | 58.6 MiB/s | 60.0 KiB | 00m00s [153/316] Installing soxr-0:0.1.3-18.fc 100% | 91.6 MiB/s | 187.6 KiB | 00m00s [154/316] Installing srt-libs-0:1.5.4-2 100% | 100.2 MiB/s | 1.0 MiB | 00m00s [155/316] Installing librabbitmq-0:0.15 100% | 88.0 MiB/s | 90.1 KiB | 00m00s [156/316] Installing libmodplug-1:0.8.9 100% | 181.8 MiB/s | 372.3 KiB | 00m00s [157/316] Installing game-music-emu-0:0 100% | 176.1 MiB/s | 360.6 KiB | 00m00s [158/316] Installing xvidcore-0:1.3.7-1 100% | 295.4 MiB/s | 907.4 KiB | 00m00s [159/316] Installing vo-amrwbenc-0:0.1. 100% | 151.1 MiB/s | 154.7 KiB | 00m00s [160/316] Installing twolame-libs-0:0.4 100% | 158.1 MiB/s | 161.9 KiB | 00m00s [161/316] Installing svt-av1-libs-0:2.3 100% | 275.1 MiB/s | 2.8 MiB | 00m00s [162/316] Installing speex-0:1.2.0-19.f 100% | 63.3 MiB/s | 129.7 KiB | 00m00s [163/316] Installing rav1e-libs-0:0.7.1 100% | 258.3 MiB/s | 2.1 MiB | 00m00s [164/316] Installing openjpeg-0:2.5.3-6 100% | 156.6 MiB/s | 481.1 KiB | 00m00s [165/316] Installing noopenh264-0:2.6.0 100% | 39.1 MiB/s | 40.0 KiB | 00m00s [166/316] Installing libvpx-0:1.15.0-3. 100% | 319.2 MiB/s | 4.8 MiB | 00m00s [167/316] Installing liblc3-0:1.1.3-2.f 100% | 171.0 MiB/s | 175.1 KiB | 00m00s [168/316] Installing libaom-0:3.12.0-1. 100% | 320.3 MiB/s | 3.5 MiB | 00m00s [169/316] Installing fdk-aac-free-0:2.0 100% | 200.8 MiB/s | 616.8 KiB | 00m00s [170/316] Installing orc-0:0.4.41-1.fc4 100% | 50.1 MiB/s | 872.3 KiB | 00m00s [171/316] Installing cdparanoia-libs-0: 100% | 114.1 MiB/s | 116.9 KiB | 00m00s [172/316] Installing alsa-lib-0:1.2.14- 100% | 70.7 MiB/s | 1.6 MiB | 00m00s [173/316] Installing vulkan-loader-0:1. 100% | 188.3 MiB/s | 578.4 KiB | 00m00s [174/316] Installing libXau-0:1.0.12-2. 100% | 72.0 MiB/s | 73.7 KiB | 00m00s [175/316] Installing libxcb-0:1.17.0-5. 100% | 132.0 MiB/s | 1.1 MiB | 00m00s [176/316] Installing libX11-0:1.8.11-1. 100% | 267.7 MiB/s | 1.3 MiB | 00m00s [177/316] Installing libXext-0:1.3.6-3. 100% | 95.8 MiB/s | 98.1 KiB | 00m00s [178/316] Installing libXrender-0:0.9.1 100% | 53.2 MiB/s | 54.4 KiB | 00m00s [179/316] Installing libXi-0:1.8.2-2.fc 100% | 82.9 MiB/s | 84.9 KiB | 00m00s [180/316] Installing libXfixes-0:6.0.1- 100% | 34.0 MiB/s | 34.8 KiB | 00m00s [181/316] Installing mesa-dri-drivers-0 100% | 342.8 MiB/s | 50.0 MiB | 00m00s [182/316] Installing mesa-libgbm-0:25.1 100% | 19.2 MiB/s | 19.7 KiB | 00m00s [183/316] Installing libXrandr-0:1.5.4- 100% | 62.7 MiB/s | 64.2 KiB | 00m00s [184/316] Installing xcb-util-renderuti 100% | 24.4 MiB/s | 25.0 KiB | 00m00s [185/316] Installing mesa-libEGL-0:25.1 100% | 173.2 MiB/s | 354.7 KiB | 00m00s [186/316] Installing libglvnd-egl-1:1.7 100% | 71.8 MiB/s | 73.6 KiB | 00m00s [187/316] Installing libXcursor-0:1.2.3 100% | 57.0 MiB/s | 58.4 KiB | 00m00s [188/316] Installing libXdamage-0:1.1.6 100% | 43.4 MiB/s | 44.4 KiB | 00m00s [189/316] Installing libXtst-0:1.2.5-2. 100% | 36.8 MiB/s | 37.7 KiB | 00m00s [190/316] Installing libXv-0:1.0.13-2.f 100% | 29.7 MiB/s | 30.4 KiB | 00m00s [191/316] Installing libvdpau-0:1.5-9.f 100% | 21.1 MiB/s | 21.6 KiB | 00m00s [192/316] Installing libXxf86vm-0:1.1.6 100% | 29.0 MiB/s | 29.7 KiB | 00m00s [193/316] Installing mesa-libGL-0:25.1. 100% | 165.3 MiB/s | 338.5 KiB | 00m00s [194/316] Installing libglvnd-glx-1:1.7 100% | 301.2 MiB/s | 616.9 KiB | 00m00s [195/316] Installing libva-0:2.22.0-4.f 100% | 117.6 MiB/s | 361.3 KiB | 00m00s [196/316] Installing libavutil-free-0:7 100% | 222.4 MiB/s | 910.9 KiB | 00m00s [197/316] Installing libswresample-free 100% | 152.5 MiB/s | 156.1 KiB | 00m00s [198/316] Installing libswscale-free-0: 100% | 287.9 MiB/s | 589.6 KiB | 00m00s [199/316] Installing glx-utils-0:9.0.0- 100% | 30.2 MiB/s | 433.3 KiB | 00m00s [200/316] Installing libXinerama-0:1.1. 100% | 18.8 MiB/s | 19.2 KiB | 00m00s [201/316] Installing libXcomposite-0:0. 100% | 44.2 MiB/s | 45.3 KiB | 00m00s [202/316] Installing xprop-0:1.2.8-3.fc 100% | 3.8 MiB/s | 50.1 KiB | 00m00s [203/316] Installing libxkbcommon-x11-0 100% | 34.8 MiB/s | 35.6 KiB | 00m00s [204/316] Installing xcb-util-keysyms-0 100% | 12.7 MiB/s | 13.0 KiB | 00m00s [205/316] Installing xcb-util-wm-0:0.4. 100% | 87.6 MiB/s | 89.7 KiB | 00m00s [206/316] Installing pulseaudio-libs-0: 100% | 216.6 MiB/s | 3.5 MiB | 00m00s [207/316] Installing xcb-util-0:0.4.1-7 100% | 26.3 MiB/s | 26.9 KiB | 00m00s [208/316] Installing xcb-util-image-0:0 100% | 22.3 MiB/s | 22.8 KiB | 00m00s [209/316] Installing xcb-util-cursor-0: 100% | 22.7 MiB/s | 23.2 KiB | 00m00s [210/316] Installing graphite2-0:1.3.14 100% | 13.4 MiB/s | 192.3 KiB | 00m00s [211/316] Installing harfbuzz-0:11.2.1- 100% | 262.4 MiB/s | 2.9 MiB | 00m00s [212/316] Installing freetype-0:2.13.3- 100% | 208.9 MiB/s | 855.6 KiB | 00m00s [213/316] Installing fontconfig-0:2.17. 100% | 728.2 KiB/s | 764.6 KiB | 00m01s [214/316] Installing cairo-0:1.18.4-1.f 100% | 234.2 MiB/s | 1.9 MiB | 00m00s [215/316] Installing cairo-gobject-0:1. 100% | 0.0 B/s | 31.2 KiB | 00m00s [216/316] Installing libXft-0:2.3.8-8.f 100% | 82.5 MiB/s | 169.0 KiB | 00m00s [217/316] Installing pango-0:1.56.4-1.f 100% | 51.6 MiB/s | 1.0 MiB | 00m00s [218/316] Installing rsvg-pixbuf-loader 100% | 162.7 MiB/s | 333.3 KiB | 00m00s [219/316] Installing librsvg2-0:2.60.0- 100% | 279.0 MiB/s | 5.3 MiB | 00m00s [220/316] Installing libaribcaption-0:1 100% | 119.7 MiB/s | 245.2 KiB | 00m00s [221/316] Installing libavcodec-free-0: 100% | 296.2 MiB/s | 10.4 MiB | 00m00s [222/316] Installing libchromaprint-0:1 100% | 67.8 MiB/s | 69.4 KiB | 00m00s [223/316] Installing libbluray-0:1.3.4- 100% | 210.2 MiB/s | 430.6 KiB | 00m00s [224/316] Installing libavformat-free-0 100% | 268.5 MiB/s | 3.0 MiB | 00m00s [225/316] Installing duktape-0:2.7.0-9. 100% | 200.8 MiB/s | 616.9 KiB | 00m00s [226/316] Installing libproxy-0:0.5.8-2 100% | 50.3 MiB/s | 102.9 KiB | 00m00s [227/316] Installing cracklib-0:2.9.11- 100% | 12.7 MiB/s | 246.4 KiB | 00m00s [228/316] Installing libpwquality-0:1.4 100% | 19.3 MiB/s | 414.3 KiB | 00m00s [229/316] Installing authselect-libs-0: 100% | 85.4 MiB/s | 874.3 KiB | 00m00s [230/316] Installing libsbc-0:2.0-6.fc4 100% | 87.7 MiB/s | 89.8 KiB | 00m00s [231/316] Installing c-ares-0:1.34.5-1. 100% | 141.6 MiB/s | 290.0 KiB | 00m00s [232/316] Installing bcg729-0:1.1.1-12. 100% | 110.0 MiB/s | 112.6 KiB | 00m00s [233/316] Installing pcre2-utf16-0:10.4 100% | 303.9 MiB/s | 622.3 KiB | 00m00s [234/316] Installing libb2-0:0.98.1-13. 100% | 57.0 MiB/s | 58.4 KiB | 00m00s [235/316] Installing double-conversion- 100% | 52.1 MiB/s | 106.6 KiB | 00m00s [236/316] Installing qt6-qtbase-0:6.9.1 100% | 206.0 MiB/s | 13.6 MiB | 00m00s [237/316] Installing qt6-qtbase-common- 100% | 0.0 B/s | 352.0 B | 00m00s [238/316] Installing gdbm-1:1.23-9.fc42 100% | 25.9 MiB/s | 450.1 KiB | 00m00s [239/316] Installing pam-0:1.7.1-2.fc43 100% | 44.6 MiB/s | 1.6 MiB | 00m00s [240/316] Installing libtommath-0:1.3.1 100% | 65.8 MiB/s | 134.7 KiB | 00m00s [241/316] Installing tcl-1:9.0.2-1.fc43 100% | 97.2 MiB/s | 4.5 MiB | 00m00s [242/316] Installing tk-1:9.0.2-1.fc43. 100% | 100.1 MiB/s | 3.9 MiB | 00m00s [243/316] Installing mpdecimal-0:4.0.1- 100% | 106.4 MiB/s | 217.9 KiB | 00m00s [244/316] Installing systemd-rpm-macros 100% | 2.2 MiB/s | 8.9 KiB | 00m00s [245/316] Installing python3-libs-0:3.1 100% | 206.1 MiB/s | 42.9 MiB | 00m00s [246/316] Installing python3-0:3.14.0~b 100% | 2.1 MiB/s | 29.8 KiB | 00m00s [247/316] Installing gstreamer1-0:1.26. 100% | 148.0 MiB/s | 5.8 MiB | 00m00s [248/316] Installing python3-packaging- 100% | 121.1 MiB/s | 620.0 KiB | 00m00s [249/316] Installing python3-traitlets- 100% | 149.1 MiB/s | 1.0 MiB | 00m00s [250/316] Installing at-spi2-core-0:2.5 100% | 91.6 MiB/s | 1.6 MiB | 00m00s [251/316] Installing python3-matplotlib 100% | 21.5 MiB/s | 44.1 KiB | 00m00s [252/316] Installing python3-rpm-genera 100% | 40.5 MiB/s | 82.9 KiB | 00m00s [253/316] Installing python3-setuptools 100% | 129.9 MiB/s | 9.2 MiB | 00m00s [254/316] Installing python3-typing-ext 100% | 260.6 MiB/s | 533.7 KiB | 00m00s [255/316] Installing python3-decorator- 100% | 27.5 MiB/s | 84.5 KiB | 00m00s [256/316] Installing python3-pygments-0 100% | 140.1 MiB/s | 11.5 MiB | 00m00s [257/316] Installing python3-parso-0:0. 100% | 83.9 MiB/s | 945.2 KiB | 00m00s [258/316] Installing python3-jedi-0:0.1 100% | 43.5 MiB/s | 6.1 MiB | 00m00s [259/316] Installing python3-ptyprocess 100% | 41.4 MiB/s | 84.8 KiB | 00m00s [260/316] Installing python3-pexpect-0: 100% | 89.7 MiB/s | 643.2 KiB | 00m00s [261/316] Installing python3-wcwidth-0: 100% | 137.9 MiB/s | 564.9 KiB | 00m00s [262/316] Installing python3-prompt-too 100% | 123.3 MiB/s | 4.2 MiB | 00m00s [263/316] Installing python3-asttokens- 100% | 66.8 MiB/s | 205.3 KiB | 00m00s [264/316] Installing python3-executing- 100% | 91.7 MiB/s | 281.8 KiB | 00m00s [265/316] Installing python3-pure-eval- 100% | 54.2 MiB/s | 110.9 KiB | 00m00s [266/316] Installing python3-stack-data 100% | 111.8 MiB/s | 228.9 KiB | 00m00s [267/316] Installing python3-ply-0:3.11 100% | 188.9 MiB/s | 580.4 KiB | 00m00s [268/316] Installing atk-0:2.57.0-1.fc4 100% | 125.6 MiB/s | 257.3 KiB | 00m00s [269/316] Installing python3-pycparser- 100% | 188.1 MiB/s | 1.5 MiB | 00m00s [270/316] Installing python3-cffi-0:1.1 100% | 194.9 MiB/s | 1.4 MiB | 00m00s [271/316] Installing at-spi2-atk-0:2.57 100% | 141.8 MiB/s | 290.3 KiB | 00m00s [272/316] Installing gtk3-0:3.24.49-2.f 100% | 240.9 MiB/s | 24.1 MiB | 00m00s [273/316] Installing libdecor-0:0.2.3-5 100% | 74.6 MiB/s | 152.8 KiB | 00m00s [274/316] Installing SDL3-0:3.2.16-1.fc 100% | 293.6 MiB/s | 2.9 MiB | 00m00s [275/316] Installing sdl2-compat-0:2.32 100% | 141.3 MiB/s | 434.1 KiB | 00m00s [276/316] Installing tslib-0:1.23-1.fc4 100% | 19.9 MiB/s | 387.9 KiB | 00m00s [277/316] Installing sdl12-compat-0:1.2 100% | 103.8 MiB/s | 212.6 KiB | 00m00s [278/316] Installing libvisual-1:0.4.2- 100% | 31.7 MiB/s | 519.0 KiB | 00m00s [279/316] Installing gstreamer1-plugins 100% | 216.4 MiB/s | 7.8 MiB | 00m00s [280/316] Installing gstreamer1-plugins 100% | 155.7 MiB/s | 3.3 MiB | 00m00s [281/316] Installing python3-msgpack-0: 100% | 114.0 MiB/s | 350.2 KiB | 00m00s [282/316] Installing python3-wrapt-0:1. 100% | 67.3 MiB/s | 206.9 KiB | 00m00s [283/316] Installing samba-common-tools 100% | 77.1 MiB/s | 1.5 MiB | 00m00s [284/316] Installing libwacom-0:2.16.1- 100% | 7.1 MiB/s | 102.4 KiB | 00m00s [285/316] Installing libinput-0:1.28.90 100% | 21.7 MiB/s | 643.5 KiB | 00m00s [286/316] Installing qt6-qtbase-gui-0:6 100% | 285.8 MiB/s | 25.1 MiB | 00m00s [287/316] Installing qt6-qtshadertools- 100% | 183.7 MiB/s | 6.4 MiB | 00m00s [288/316] Installing qt6-qtsvg-0:6.9.1- 100% | 119.5 MiB/s | 856.8 KiB | 00m00s [289/316] Installing qt6-qtdeclarative- 100% | 236.3 MiB/s | 51.1 MiB | 00m00s [290/316] Installing qt6-qt5compat-0:6. 100% | 195.1 MiB/s | 1.8 MiB | 00m00s [291/316] Installing qt6-qtquicktimelin 100% | 68.9 MiB/s | 282.3 KiB | 00m00s [292/316] Installing qt6-qtquick3d-0:6. 100% | 191.0 MiB/s | 11.1 MiB | 00m00s [293/316] Installing qt6-qtmultimedia-0 100% | 135.9 MiB/s | 3.8 MiB | 00m00s >>> Running sysusers scriptlet: unbound-libs-0:1.23.0-4.fc43.i686 >>> Finished sysusers scriptlet: unbound-libs-0:1.23.0-4.fc43.i686 >>> Scriptlet output: >>> Creating group 'unbound' with GID 997. >>> Creating user 'unbound' (Unbound DNS resolver) with UID 997 and GID 997. >>> [294/316] Installing unbound-libs-0:1.2 100% | 194.4 MiB/s | 1.6 MiB | 00m00s [295/316] Installing python3-can-0:4.5. 100% | 61.5 MiB/s | 2.2 MiB | 00m00s [296/316] Installing python3-ipython-0: 100% | 96.9 MiB/s | 4.8 MiB | 00m00s [297/316] Installing python3-devel-0:3. 100% | 66.3 MiB/s | 2.0 MiB | 00m00s [298/316] Installing gnutls-dane-0:3.8. 100% | 51.8 MiB/s | 53.0 KiB | 00m00s [299/316] Installing wget2-libs-0:2.2.0 100% | 186.6 MiB/s | 382.1 KiB | 00m00s [300/316] Installing wget2-0:2.2.0-5.fc 100% | 55.7 MiB/s | 1.1 MiB | 00m00s [301/316] Installing wget2-wget-0:2.2.0 100% | 33.4 KiB/s | 444.0 B | 00m00s [302/316] Installing libsmi-0:0.4.8-43. 100% | 217.8 MiB/s | 20.9 MiB | 00m00s >>> Running sysusers scriptlet: wireshark-cli-1:4.4.7-1.fc43.i686 >>> Finished sysusers scriptlet: wireshark-cli-1:4.4.7-1.fc43.i686 >>> Scriptlet output: >>> Creating group 'usbmon' with GID 996. >>> Creating group 'wireshark' with GID 995. >>> [303/316] Installing wireshark-cli-1:4. 100% | 287.9 MiB/s | 85.2 MiB | 00m00s [304/316] Installing wireshark-1:4.4.7- 100% | 205.2 MiB/s | 9.4 MiB | 00m00s [305/316] Installing samba-2:4.22.3-2.f 100% | 42.6 MiB/s | 3.4 MiB | 00m00s [306/316] Installing python3-cryptograp 100% | 139.9 MiB/s | 5.7 MiB | 00m00s [307/316] Installing python3-coverage-0 100% | 76.3 MiB/s | 1.8 MiB | 00m00s [308/316] Installing python3-brotli-0:1 100% | 168.2 MiB/s | 861.3 KiB | 00m00s [309/316] Installing python3-tkinter-0: 100% | 192.3 MiB/s | 2.1 MiB | 00m00s [310/316] Installing python3-zstandard- 100% | 241.0 MiB/s | 2.2 MiB | 00m00s [311/316] Installing authselect-0:1.6.0 100% | 4.4 MiB/s | 190.0 KiB | 00m00s >>> Running sysusers scriptlet: tcpdump-14:4.99.5-3.fc42.i686 >>> Finished sysusers scriptlet: tcpdump-14:4.99.5-3.fc42.i686 >>> Scriptlet output: >>> Creating group 'tcpdump' with GID 72. >>> Creating user 'tcpdump' (tcpdump) with UID 72 and GID 72. >>> [312/316] Installing tcpdump-14:4.99.5- 100% | 62.1 MiB/s | 1.2 MiB | 00m00s [313/316] Installing samba-client-2:4.2 100% | 73.9 MiB/s | 2.9 MiB | 00m00s [314/316] Installing openssl-1:3.5.1-1. 100% | 56.6 MiB/s | 1.9 MiB | 00m00s [315/316] Installing make-1:4.4.1-10.fc 100% | 78.8 MiB/s | 1.8 MiB | 00m00s [316/316] Installing can-utils-0:2025.0 100% | 835.6 KiB/s | 655.1 KiB | 00m01s Warning: skipped OpenPGP checks for 314 packages from repository: local Complete! Finish: build setup for scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Start: rpmbuild scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Building target platforms: i686 Building for target i686 warning: The %py3_build macro is deprecated and will likely stop working in Fedora 44. See the current Python packaging guidelines: https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ warning: The %py3_install macro is deprecated and will likely stop working in Fedora 44. See the current Python packaging guidelines: https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ setting SOURCE_DATE_EPOCH=1752710400 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.mRA2oe Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.YUmKkZ + umask 022 + cd /builddir/build/BUILD/scapy-2.5.0-build + cd /builddir/build/BUILD/scapy-2.5.0-build + rm -rf scapy-2.5.0 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/scapy-2.5.0.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd scapy-2.5.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . ++ find ./scapy -name '*.py' -print ++ xargs grep -l -e '^#!.*env python' + SHEBANGS='./scapy/contrib/automotive/doip.py ./scapy/contrib/automotive/autosar/pdu.py' + for FILE in $SHEBANGS + sed -i.orig -e 1d ./scapy/contrib/automotive/doip.py + touch -r ./scapy/contrib/automotive/doip.py.orig ./scapy/contrib/automotive/doip.py + rm ./scapy/contrib/automotive/doip.py.orig + for FILE in $SHEBANGS + sed -i.orig -e 1d ./scapy/contrib/automotive/autosar/pdu.py + touch -r ./scapy/contrib/automotive/autosar/pdu.py.orig ./scapy/contrib/automotive/autosar/pdu.py + rm ./scapy/contrib/automotive/autosar/pdu.py.orig + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.RAhzlb + umask 022 + cd /builddir/build/BUILD/scapy-2.5.0-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd scapy-2.5.0 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + /usr/bin/python3 setup.py build '--executable=/usr/bin/python3 -sP' /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 (GPLv2) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 (GPLv2) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running build running build_py creating build/lib/scapy copying scapy/volatile.py -> build/lib/scapy copying scapy/utils6.py -> build/lib/scapy copying scapy/utils.py -> build/lib/scapy copying scapy/themes.py -> build/lib/scapy copying scapy/supersocket.py -> build/lib/scapy copying scapy/sessions.py -> build/lib/scapy copying scapy/sendrecv.py -> build/lib/scapy copying scapy/scapypipes.py -> build/lib/scapy copying scapy/route6.py -> build/lib/scapy copying scapy/route.py -> build/lib/scapy copying scapy/pton_ntop.py -> build/lib/scapy copying scapy/plist.py -> build/lib/scapy copying scapy/pipetool.py -> build/lib/scapy copying scapy/packet.py -> build/lib/scapy copying scapy/main.py -> build/lib/scapy copying scapy/interfaces.py -> build/lib/scapy copying scapy/fwdmachine.py -> build/lib/scapy copying scapy/fields.py -> build/lib/scapy copying scapy/error.py -> build/lib/scapy copying scapy/data.py -> build/lib/scapy copying scapy/dadict.py -> build/lib/scapy copying scapy/consts.py -> build/lib/scapy copying scapy/config.py -> build/lib/scapy copying scapy/compat.py -> build/lib/scapy copying scapy/base_classes.py -> build/lib/scapy copying scapy/autorun.py -> build/lib/scapy copying scapy/automaton.py -> build/lib/scapy copying scapy/asn1packet.py -> build/lib/scapy copying scapy/asn1fields.py -> build/lib/scapy copying scapy/as_resolvers.py -> build/lib/scapy copying scapy/ansmachine.py -> build/lib/scapy copying scapy/all.py -> build/lib/scapy copying scapy/__main__.py -> build/lib/scapy copying scapy/__init__.py -> build/lib/scapy creating build/lib/scapy/tools copying scapy/tools/scapy_pyannotate.py -> build/lib/scapy/tools copying scapy/tools/generate_manuf.py -> build/lib/scapy/tools copying scapy/tools/generate_ethertypes.py -> build/lib/scapy/tools copying scapy/tools/check_asdis.py -> build/lib/scapy/tools copying scapy/tools/__init__.py -> build/lib/scapy/tools copying scapy/tools/UTscapy.py -> build/lib/scapy/tools creating build/lib/scapy/modules copying scapy/modules/voip.py -> build/lib/scapy/modules copying scapy/modules/ticketer.py -> build/lib/scapy/modules copying scapy/modules/p0fv2.py -> build/lib/scapy/modules copying scapy/modules/p0f.py -> build/lib/scapy/modules copying scapy/modules/nmap.py -> build/lib/scapy/modules copying scapy/modules/ldaphero.py -> build/lib/scapy/modules copying scapy/modules/__init__.py -> build/lib/scapy/modules creating build/lib/scapy/libs copying scapy/libs/winpcapy.py -> build/lib/scapy/libs copying scapy/libs/test_pyx.py -> build/lib/scapy/libs copying scapy/libs/structures.py -> build/lib/scapy/libs copying scapy/libs/rfc3961.py -> build/lib/scapy/libs copying scapy/libs/matplot.py -> build/lib/scapy/libs copying scapy/libs/manuf.py -> build/lib/scapy/libs copying scapy/libs/extcap.py -> build/lib/scapy/libs copying scapy/libs/ethertypes.py -> build/lib/scapy/libs copying scapy/libs/__init__.py -> build/lib/scapy/libs creating build/lib/scapy/layers copying scapy/layers/zigbee.py -> build/lib/scapy/layers copying scapy/layers/x509.py -> build/lib/scapy/layers copying scapy/layers/vxlan.py -> build/lib/scapy/layers copying scapy/layers/vrrp.py -> build/lib/scapy/layers copying scapy/layers/usb.py -> build/lib/scapy/layers copying scapy/layers/tuntap.py -> build/lib/scapy/layers copying scapy/layers/tftp.py -> build/lib/scapy/layers copying scapy/layers/ssh.py -> build/lib/scapy/layers copying scapy/layers/spnego.py -> build/lib/scapy/layers copying scapy/layers/snmp.py -> build/lib/scapy/layers copying scapy/layers/smbserver.py -> build/lib/scapy/layers copying scapy/layers/smbclient.py -> build/lib/scapy/layers copying scapy/layers/smb2.py -> build/lib/scapy/layers copying scapy/layers/smb.py -> build/lib/scapy/layers copying scapy/layers/skinny.py -> build/lib/scapy/layers copying scapy/layers/sixlowpan.py -> build/lib/scapy/layers copying scapy/layers/sctp.py -> build/lib/scapy/layers copying scapy/layers/rtp.py -> build/lib/scapy/layers copying scapy/layers/rip.py -> build/lib/scapy/layers copying scapy/layers/radius.py -> build/lib/scapy/layers copying scapy/layers/quic.py -> build/lib/scapy/layers copying scapy/layers/pptp.py -> build/lib/scapy/layers copying scapy/layers/ppp.py -> build/lib/scapy/layers copying scapy/layers/ppi.py -> build/lib/scapy/layers copying scapy/layers/pflog.py -> build/lib/scapy/layers copying scapy/layers/ntp.py -> build/lib/scapy/layers copying scapy/layers/ntlm.py -> build/lib/scapy/layers copying scapy/layers/netflow.py -> build/lib/scapy/layers copying scapy/layers/netbios.py -> build/lib/scapy/layers copying scapy/layers/ms_nrtp.py -> build/lib/scapy/layers copying scapy/layers/mobileip.py -> build/lib/scapy/layers copying scapy/layers/mgcp.py -> build/lib/scapy/layers copying scapy/layers/lltd.py -> build/lib/scapy/layers copying scapy/layers/llmnr.py -> build/lib/scapy/layers copying scapy/layers/ldap.py -> build/lib/scapy/layers copying scapy/layers/l2tp.py -> build/lib/scapy/layers copying scapy/layers/l2.py -> build/lib/scapy/layers copying scapy/layers/kerberos.py -> build/lib/scapy/layers copying scapy/layers/isakmp.py -> build/lib/scapy/layers copying scapy/layers/ir.py -> build/lib/scapy/layers copying scapy/layers/ipsec.py -> build/lib/scapy/layers copying scapy/layers/inet6.py -> build/lib/scapy/layers copying scapy/layers/inet.py -> build/lib/scapy/layers copying scapy/layers/http.py -> build/lib/scapy/layers copying scapy/layers/hsrp.py -> build/lib/scapy/layers copying scapy/layers/gssapi.py -> build/lib/scapy/layers copying scapy/layers/gprs.py -> build/lib/scapy/layers copying scapy/layers/eap.py -> build/lib/scapy/layers copying scapy/layers/dot15d4.py -> build/lib/scapy/layers copying scapy/layers/dot11.py -> build/lib/scapy/layers copying scapy/layers/dns.py -> build/lib/scapy/layers copying scapy/layers/dhcp6.py -> build/lib/scapy/layers copying scapy/layers/dhcp.py -> build/lib/scapy/layers copying scapy/layers/dcerpc.py -> build/lib/scapy/layers copying scapy/layers/clns.py -> build/lib/scapy/layers copying scapy/layers/can.py -> build/lib/scapy/layers copying scapy/layers/bluetooth4LE.py -> build/lib/scapy/layers copying scapy/layers/bluetooth.py -> build/lib/scapy/layers copying scapy/layers/all.py -> build/lib/scapy/layers copying scapy/layers/__init__.py -> build/lib/scapy/layers creating build/lib/scapy/contrib copying scapy/contrib/wireguard.py -> build/lib/scapy/contrib copying scapy/contrib/vtp.py -> build/lib/scapy/contrib copying scapy/contrib/vqp.py -> build/lib/scapy/contrib copying scapy/contrib/tzsp.py -> build/lib/scapy/contrib copying scapy/contrib/tcpros.py -> build/lib/scapy/contrib copying scapy/contrib/tcpao.py -> build/lib/scapy/contrib copying scapy/contrib/tacacs.py -> build/lib/scapy/contrib copying scapy/contrib/stun.py -> build/lib/scapy/contrib copying scapy/contrib/stamp.py -> build/lib/scapy/contrib copying scapy/contrib/socks.py -> build/lib/scapy/contrib copying scapy/contrib/slowprot.py -> build/lib/scapy/contrib copying scapy/contrib/skinny.py -> build/lib/scapy/contrib copying scapy/contrib/send.py -> build/lib/scapy/contrib copying scapy/contrib/sebek.py -> build/lib/scapy/contrib copying scapy/contrib/sdnv.py -> build/lib/scapy/contrib copying scapy/contrib/rtsp.py -> build/lib/scapy/contrib copying scapy/contrib/rtr.py -> build/lib/scapy/contrib copying scapy/contrib/rtcp.py -> build/lib/scapy/contrib copying scapy/contrib/rsvp.py -> build/lib/scapy/contrib copying scapy/contrib/rpl_metrics.py -> build/lib/scapy/contrib copying scapy/contrib/rpl.py -> build/lib/scapy/contrib copying scapy/contrib/roce.py -> build/lib/scapy/contrib copying scapy/contrib/ripng.py -> build/lib/scapy/contrib copying scapy/contrib/psp.py -> build/lib/scapy/contrib copying scapy/contrib/ppi_geotag.py -> build/lib/scapy/contrib copying scapy/contrib/ppi_cace.py -> build/lib/scapy/contrib copying scapy/contrib/postgres.py -> build/lib/scapy/contrib copying scapy/contrib/portmap.py -> build/lib/scapy/contrib copying scapy/contrib/pnio_rpc.py -> build/lib/scapy/contrib copying scapy/contrib/pnio_dcp.py -> build/lib/scapy/contrib copying scapy/contrib/pnio.py -> build/lib/scapy/contrib copying scapy/contrib/pim.py -> build/lib/scapy/contrib copying scapy/contrib/pfcp.py -> build/lib/scapy/contrib copying scapy/contrib/ospf.py -> build/lib/scapy/contrib copying scapy/contrib/openflow3.py -> build/lib/scapy/contrib copying scapy/contrib/openflow.py -> build/lib/scapy/contrib copying scapy/contrib/opc_da.py -> build/lib/scapy/contrib copying scapy/contrib/oncrpc.py -> build/lib/scapy/contrib copying scapy/contrib/oam.py -> build/lib/scapy/contrib copying scapy/contrib/nsh.py -> build/lib/scapy/contrib copying scapy/contrib/nrf_sniffer.py -> build/lib/scapy/contrib copying scapy/contrib/nlm.py -> build/lib/scapy/contrib copying scapy/contrib/nfs.py -> build/lib/scapy/contrib copying scapy/contrib/mqttsn.py -> build/lib/scapy/contrib copying scapy/contrib/mqtt.py -> build/lib/scapy/contrib copying scapy/contrib/mpls.py -> build/lib/scapy/contrib copying scapy/contrib/mount.py -> build/lib/scapy/contrib copying scapy/contrib/modbus.py -> build/lib/scapy/contrib copying scapy/contrib/metawatch.py -> build/lib/scapy/contrib copying scapy/contrib/macsec.py -> build/lib/scapy/contrib copying scapy/contrib/mac_control.py -> build/lib/scapy/contrib copying scapy/contrib/ltp.py -> build/lib/scapy/contrib copying scapy/contrib/loraphy2wan.py -> build/lib/scapy/contrib copying scapy/contrib/lldp.py -> build/lib/scapy/contrib copying scapy/contrib/ldp.py -> build/lib/scapy/contrib copying scapy/contrib/lacp.py -> build/lib/scapy/contrib copying scapy/contrib/knx.py -> build/lib/scapy/contrib copying scapy/contrib/isis.py -> build/lib/scapy/contrib copying scapy/contrib/ikev2.py -> build/lib/scapy/contrib copying scapy/contrib/igmpv3.py -> build/lib/scapy/contrib copying scapy/contrib/igmp.py -> build/lib/scapy/contrib copying scapy/contrib/ife.py -> build/lib/scapy/contrib copying scapy/contrib/icmp_extensions.py -> build/lib/scapy/contrib copying scapy/contrib/ibeacon.py -> build/lib/scapy/contrib copying scapy/contrib/http2.py -> build/lib/scapy/contrib copying scapy/contrib/homeplugsg.py -> build/lib/scapy/contrib copying scapy/contrib/homepluggp.py -> build/lib/scapy/contrib copying scapy/contrib/homeplugav.py -> build/lib/scapy/contrib copying scapy/contrib/hicp.py -> build/lib/scapy/contrib copying scapy/contrib/gxrp.py -> build/lib/scapy/contrib copying scapy/contrib/gtp_v2.py -> build/lib/scapy/contrib copying scapy/contrib/gtp.py -> build/lib/scapy/contrib copying scapy/contrib/geneve.py -> build/lib/scapy/contrib copying scapy/contrib/exposure_notification.py -> build/lib/scapy/contrib copying scapy/contrib/etherip.py -> build/lib/scapy/contrib copying scapy/contrib/ethercat.py -> build/lib/scapy/contrib copying scapy/contrib/esmc.py -> build/lib/scapy/contrib copying scapy/contrib/erspan.py -> build/lib/scapy/contrib copying scapy/contrib/enipTCP.py -> build/lib/scapy/contrib copying scapy/contrib/eigrp.py -> build/lib/scapy/contrib copying scapy/contrib/eddystone.py -> build/lib/scapy/contrib copying scapy/contrib/dtp.py -> build/lib/scapy/contrib copying scapy/contrib/diameter.py -> build/lib/scapy/contrib copying scapy/contrib/concox.py -> build/lib/scapy/contrib copying scapy/contrib/coap.py -> build/lib/scapy/contrib copying scapy/contrib/chdlc.py -> build/lib/scapy/contrib copying scapy/contrib/cdp.py -> build/lib/scapy/contrib copying scapy/contrib/carp.py -> build/lib/scapy/contrib copying scapy/contrib/cansocket_python_can.py -> build/lib/scapy/contrib copying scapy/contrib/cansocket_native.py -> build/lib/scapy/contrib copying scapy/contrib/cansocket.py -> build/lib/scapy/contrib copying scapy/contrib/bp.py -> build/lib/scapy/contrib copying scapy/contrib/bier.py -> build/lib/scapy/contrib copying scapy/contrib/bgp.py -> build/lib/scapy/contrib copying scapy/contrib/bfd.py -> build/lib/scapy/contrib copying scapy/contrib/avs.py -> build/lib/scapy/contrib copying scapy/contrib/aoe.py -> build/lib/scapy/contrib copying scapy/contrib/altbeacon.py -> build/lib/scapy/contrib copying scapy/contrib/__init__.py -> build/lib/scapy/contrib creating build/lib/scapy/asn1 copying scapy/asn1/mib.py -> build/lib/scapy/asn1 copying scapy/asn1/ber.py -> build/lib/scapy/asn1 copying scapy/asn1/asn1.py -> build/lib/scapy/asn1 copying scapy/asn1/__init__.py -> build/lib/scapy/asn1 creating build/lib/scapy/arch copying scapy/arch/unix.py -> build/lib/scapy/arch copying scapy/arch/solaris.py -> build/lib/scapy/arch copying scapy/arch/libpcap.py -> build/lib/scapy/arch copying scapy/arch/common.py -> build/lib/scapy/arch copying scapy/arch/__init__.py -> build/lib/scapy/arch creating build/lib/scapy/tools/automotive copying scapy/tools/automotive/xcpscanner.py -> build/lib/scapy/tools/automotive copying scapy/tools/automotive/obdscanner.py -> build/lib/scapy/tools/automotive copying scapy/tools/automotive/isotpscanner.py -> build/lib/scapy/tools/automotive copying scapy/tools/automotive/__init__.py -> build/lib/scapy/tools/automotive creating build/lib/scapy/modules/krack copying scapy/modules/krack/crypto.py -> build/lib/scapy/modules/krack copying scapy/modules/krack/automaton.py -> build/lib/scapy/modules/krack copying scapy/modules/krack/__init__.py -> build/lib/scapy/modules/krack creating build/lib/scapy/layers/tls copying scapy/layers/tls/tools.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/session.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/record_tls13.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/record_sslv2.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/record.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/quic.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/keyexchange_tls13.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/keyexchange.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/handshake_sslv2.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/handshake.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/extensions.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/cert.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/basefields.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/automaton_srv.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/automaton_cli.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/automaton.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/all.py -> build/lib/scapy/layers/tls copying scapy/layers/tls/__init__.py -> build/lib/scapy/layers/tls creating build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/rpcserver.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/rpcclient.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/mspac.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/msnrpc.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/mseerr.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/msdrsr.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/msdcom.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/ept.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/all.py -> build/lib/scapy/layers/msrpce copying scapy/layers/msrpce/__init__.py -> build/lib/scapy/layers/msrpce creating build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/suites.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/prf.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/pkcs1.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/md4.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/kx_algs.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/hkdf.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/hash.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/h_mac.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/groups.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/compression.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/common.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/ciphers.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/cipher_stream.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/cipher_block.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/cipher_aead.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/all.py -> build/lib/scapy/layers/tls/crypto copying scapy/layers/tls/crypto/__init__.py -> build/lib/scapy/layers/tls/crypto creating build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_wkst.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_srvs.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_samr.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_nrpc.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_drsr.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ms_dcom.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/ept.py -> build/lib/scapy/layers/msrpce/raw copying scapy/layers/msrpce/raw/__init__.py -> build/lib/scapy/layers/msrpce/raw creating build/lib/scapy/contrib/scada copying scapy/contrib/scada/pcom.py -> build/lib/scapy/contrib/scada copying scapy/contrib/scada/__init__.py -> build/lib/scapy/contrib/scada creating build/lib/scapy/contrib/rtps copying scapy/contrib/rtps/rtps.py -> build/lib/scapy/contrib/rtps copying scapy/contrib/rtps/pid_types.py -> build/lib/scapy/contrib/rtps copying scapy/contrib/rtps/common_types.py -> build/lib/scapy/contrib/rtps copying scapy/contrib/rtps/__init__.py -> build/lib/scapy/contrib/rtps creating build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/isotp_utils.py -> build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/isotp_soft_socket.py -> build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/isotp_scanner.py -> build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/isotp_packet.py -> build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/isotp_native_socket.py -> build/lib/scapy/contrib/isotp copying scapy/contrib/isotp/__init__.py -> build/lib/scapy/contrib/isotp creating build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/doip.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/uds_scan.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/uds_logging.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/uds_ecu_states.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/uds.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/someip.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/kwp.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/ecu.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/ccp.py -> build/lib/scapy/contrib/automotive copying scapy/contrib/automotive/__init__.py -> build/lib/scapy/contrib/automotive creating build/lib/scapy/contrib/scada/iec104 copying scapy/contrib/scada/iec104/iec104_information_objects.py -> build/lib/scapy/contrib/scada/iec104 copying scapy/contrib/scada/iec104/iec104_information_elements.py -> build/lib/scapy/contrib/scada/iec104 copying scapy/contrib/scada/iec104/iec104_fields.py -> build/lib/scapy/contrib/scada/iec104 copying scapy/contrib/scada/iec104/__init__.py -> build/lib/scapy/contrib/scada/iec104 creating build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/xcp.py -> build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/utils.py -> build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/scanner.py -> build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/cto_commands_slave.py -> build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/cto_commands_master.py -> build/lib/scapy/contrib/automotive/xcp copying scapy/contrib/automotive/xcp/__init__.py -> build/lib/scapy/contrib/automotive/xcp creating build/lib/scapy/contrib/automotive/volkswagen copying scapy/contrib/automotive/volkswagen/definitions.py -> build/lib/scapy/contrib/automotive/volkswagen copying scapy/contrib/automotive/volkswagen/__init__.py -> build/lib/scapy/contrib/automotive/volkswagen creating build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/test_case.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/staged_test_case.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/graph.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/executor.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/enumerator.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/configuration.py -> build/lib/scapy/contrib/automotive/scanner copying scapy/contrib/automotive/scanner/__init__.py -> build/lib/scapy/contrib/automotive/scanner creating build/lib/scapy/contrib/automotive/obd copying scapy/contrib/automotive/obd/services.py -> build/lib/scapy/contrib/automotive/obd copying scapy/contrib/automotive/obd/scanner.py -> build/lib/scapy/contrib/automotive/obd copying scapy/contrib/automotive/obd/packet.py -> build/lib/scapy/contrib/automotive/obd copying scapy/contrib/automotive/obd/obd.py -> build/lib/scapy/contrib/automotive/obd copying scapy/contrib/automotive/obd/__init__.py -> build/lib/scapy/contrib/automotive/obd creating build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/gmlanutils.py -> build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/gmlan_scanner.py -> build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/gmlan_logging.py -> build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/gmlan_ecu_states.py -> build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/gmlan.py -> build/lib/scapy/contrib/automotive/gm copying scapy/contrib/automotive/gm/__init__.py -> build/lib/scapy/contrib/automotive/gm creating build/lib/scapy/contrib/automotive/bmw copying scapy/contrib/automotive/bmw/hsfz.py -> build/lib/scapy/contrib/automotive/bmw copying scapy/contrib/automotive/bmw/enumerator.py -> build/lib/scapy/contrib/automotive/bmw copying scapy/contrib/automotive/bmw/definitions.py -> build/lib/scapy/contrib/automotive/bmw copying scapy/contrib/automotive/bmw/__init__.py -> build/lib/scapy/contrib/automotive/bmw creating build/lib/scapy/contrib/automotive/autosar copying scapy/contrib/automotive/autosar/pdu.py -> build/lib/scapy/contrib/automotive/autosar copying scapy/contrib/automotive/autosar/secoc_pdu.py -> build/lib/scapy/contrib/automotive/autosar copying scapy/contrib/automotive/autosar/secoc_canfd.py -> build/lib/scapy/contrib/automotive/autosar copying scapy/contrib/automotive/autosar/secoc.py -> build/lib/scapy/contrib/automotive/autosar copying scapy/contrib/automotive/autosar/__init__.py -> build/lib/scapy/contrib/automotive/autosar creating build/lib/scapy/contrib/automotive/obd/tid copying scapy/contrib/automotive/obd/tid/tids.py -> build/lib/scapy/contrib/automotive/obd/tid copying scapy/contrib/automotive/obd/tid/__init__.py -> build/lib/scapy/contrib/automotive/obd/tid creating build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_A0_C0.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_80_9F.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_60_7F.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_40_5F.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_20_3F.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids_00_1F.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/pids.py -> build/lib/scapy/contrib/automotive/obd/pid copying scapy/contrib/automotive/obd/pid/__init__.py -> build/lib/scapy/contrib/automotive/obd/pid creating build/lib/scapy/contrib/automotive/obd/mid copying scapy/contrib/automotive/obd/mid/mids.py -> build/lib/scapy/contrib/automotive/obd/mid copying scapy/contrib/automotive/obd/mid/__init__.py -> build/lib/scapy/contrib/automotive/obd/mid creating build/lib/scapy/contrib/automotive/obd/iid copying scapy/contrib/automotive/obd/iid/iids.py -> build/lib/scapy/contrib/automotive/obd/iid copying scapy/contrib/automotive/obd/iid/__init__.py -> build/lib/scapy/contrib/automotive/obd/iid creating build/lib/scapy/arch/windows copying scapy/arch/windows/structures.py -> build/lib/scapy/arch/windows copying scapy/arch/windows/native.py -> build/lib/scapy/arch/windows copying scapy/arch/windows/__init__.py -> build/lib/scapy/arch/windows creating build/lib/scapy/arch/linux copying scapy/arch/linux/rtnetlink.py -> build/lib/scapy/arch/linux copying scapy/arch/linux/__init__.py -> build/lib/scapy/arch/linux creating build/lib/scapy/arch/bpf copying scapy/arch/bpf/supersocket.py -> build/lib/scapy/arch/bpf copying scapy/arch/bpf/pfroute.py -> build/lib/scapy/arch/bpf copying scapy/arch/bpf/core.py -> build/lib/scapy/arch/bpf copying scapy/arch/bpf/consts.py -> build/lib/scapy/arch/bpf copying scapy/arch/bpf/__init__.py -> build/lib/scapy/arch/bpf running egg_info creating scapy.egg-info writing scapy.egg-info/PKG-INFO writing dependency_links to scapy.egg-info/dependency_links.txt writing entry points to scapy.egg-info/entry_points.txt writing requirements to scapy.egg-info/requires.txt writing top-level names to scapy.egg-info/top_level.txt writing manifest file 'scapy.egg-info/SOURCES.txt' reading manifest file 'scapy.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'scapy.egg-info/SOURCES.txt' copying scapy/py.typed -> build/lib/scapy + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Arin5T + umask 022 + cd /builddir/build/BUILD/scapy-2.5.0-build + '[' /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT ++ dirname /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT + mkdir -p /builddir/build/BUILD/scapy-2.5.0-build + mkdir /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd scapy-2.5.0 + install -dp -m0755 /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/share/man/man1 + install -Dp -m0644 doc/scapy.1 /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/share/man/man1/ + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + /usr/bin/python3 setup.py install -O1 --skip-build --root /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT --prefix /usr /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 (GPLv2) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 (GPLv2) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running install /usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py:90: SetuptoolsDeprecationWarning: setup.py install is deprecated. !! ******************************************************************************** Please avoid running ``setup.py`` directly. Instead, use pypa/build, pypa/installer or other standards-based tools. Follow the current Python packaging guidelines when building Python RPM packages. See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html and https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ for details. ******************************************************************************** !! self.initialize_options() running install_lib creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/VERSION -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/py.typed -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf copying build/lib/scapy/arch/bpf/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf copying build/lib/scapy/arch/bpf/consts.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf copying build/lib/scapy/arch/bpf/core.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf copying build/lib/scapy/arch/bpf/pfroute.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf copying build/lib/scapy/arch/bpf/supersocket.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux copying build/lib/scapy/arch/linux/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux copying build/lib/scapy/arch/linux/rtnetlink.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows copying build/lib/scapy/arch/windows/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows copying build/lib/scapy/arch/windows/native.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows copying build/lib/scapy/arch/windows/structures.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows copying build/lib/scapy/arch/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch copying build/lib/scapy/arch/common.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch copying build/lib/scapy/arch/libpcap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch copying build/lib/scapy/arch/solaris.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch copying build/lib/scapy/arch/unix.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1 copying build/lib/scapy/asn1/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1 copying build/lib/scapy/asn1/asn1.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1 copying build/lib/scapy/asn1/ber.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1 copying build/lib/scapy/asn1/mib.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1 creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar copying build/lib/scapy/contrib/automotive/autosar/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar copying build/lib/scapy/contrib/automotive/autosar/secoc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar copying build/lib/scapy/contrib/automotive/autosar/secoc_canfd.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar copying build/lib/scapy/contrib/automotive/autosar/secoc_pdu.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar copying build/lib/scapy/contrib/automotive/autosar/pdu.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw copying build/lib/scapy/contrib/automotive/bmw/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw copying build/lib/scapy/contrib/automotive/bmw/definitions.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw copying build/lib/scapy/contrib/automotive/bmw/enumerator.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw copying build/lib/scapy/contrib/automotive/bmw/hsfz.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/gmlan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/gmlan_ecu_states.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/gmlan_logging.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/gmlan_scanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm copying build/lib/scapy/contrib/automotive/gm/gmlanutils.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid copying build/lib/scapy/contrib/automotive/obd/iid/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid copying build/lib/scapy/contrib/automotive/obd/iid/iids.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid copying build/lib/scapy/contrib/automotive/obd/mid/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid copying build/lib/scapy/contrib/automotive/obd/mid/mids.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_00_1F.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_20_3F.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_40_5F.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_60_7F.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_80_9F.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid copying build/lib/scapy/contrib/automotive/obd/pid/pids_A0_C0.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid copying build/lib/scapy/contrib/automotive/obd/tid/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid copying build/lib/scapy/contrib/automotive/obd/tid/tids.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid copying build/lib/scapy/contrib/automotive/obd/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd copying build/lib/scapy/contrib/automotive/obd/obd.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd copying build/lib/scapy/contrib/automotive/obd/packet.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd copying build/lib/scapy/contrib/automotive/obd/scanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd copying build/lib/scapy/contrib/automotive/obd/services.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/configuration.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/enumerator.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/executor.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/graph.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/staged_test_case.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner copying build/lib/scapy/contrib/automotive/scanner/test_case.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen copying build/lib/scapy/contrib/automotive/volkswagen/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen copying build/lib/scapy/contrib/automotive/volkswagen/definitions.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/cto_commands_master.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/cto_commands_slave.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/scanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/utils.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/xcp/xcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp copying build/lib/scapy/contrib/automotive/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/ccp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/ecu.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/kwp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/someip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/uds.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/uds_ecu_states.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/uds_logging.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/uds_scan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive copying build/lib/scapy/contrib/automotive/doip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/isotp_native_socket.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/isotp_packet.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/isotp_scanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/isotp_soft_socket.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp copying build/lib/scapy/contrib/isotp/isotp_utils.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps copying build/lib/scapy/contrib/rtps/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps copying build/lib/scapy/contrib/rtps/common_types.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps copying build/lib/scapy/contrib/rtps/pid_types.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps copying build/lib/scapy/contrib/rtps/rtps.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104 copying build/lib/scapy/contrib/scada/iec104/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104 copying build/lib/scapy/contrib/scada/iec104/iec104_fields.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104 copying build/lib/scapy/contrib/scada/iec104/iec104_information_elements.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104 copying build/lib/scapy/contrib/scada/iec104/iec104_information_objects.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104 copying build/lib/scapy/contrib/scada/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada copying build/lib/scapy/contrib/scada/pcom.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada copying build/lib/scapy/contrib/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/altbeacon.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/aoe.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/avs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/bfd.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/bgp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/bier.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/bp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/cansocket.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/cansocket_native.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/cansocket_python_can.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/carp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/cdp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/chdlc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/coap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/concox.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/diameter.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/dtp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/eddystone.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/eigrp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/enipTCP.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/erspan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/esmc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ethercat.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/etherip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/exposure_notification.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/geneve.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/gtp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/gtp_v2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/gxrp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/hicp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/homeplugav.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/homepluggp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/homeplugsg.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/http2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ibeacon.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/icmp_extensions.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ife.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/igmp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/igmpv3.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ikev2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/isis.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/knx.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/lacp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ldp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/lldp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/loraphy2wan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ltp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/mac_control.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/macsec.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/metawatch.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/modbus.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/mount.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/mpls.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/mqtt.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/mqttsn.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/nfs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/nlm.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/nrf_sniffer.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/nsh.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/oam.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/oncrpc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/opc_da.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/openflow.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/openflow3.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ospf.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/pfcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/pim.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/pnio.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/pnio_dcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/pnio_rpc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/portmap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/postgres.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ppi_cace.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ppi_geotag.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/psp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/ripng.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/roce.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rpl.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rpl_metrics.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rsvp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rtcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rtr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/rtsp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/sdnv.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/sebek.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/send.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/skinny.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/slowprot.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/socks.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/stamp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/stun.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/tacacs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/tcpao.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/tcpros.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/tzsp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/vqp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/vtp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib copying build/lib/scapy/contrib/wireguard.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ept.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_dcom.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_drsr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_nrpc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_samr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_srvs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/raw/ms_wkst.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw copying build/lib/scapy/layers/msrpce/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/all.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/ept.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/msdcom.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/msdrsr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/mseerr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/msnrpc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/mspac.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/rpcclient.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce copying build/lib/scapy/layers/msrpce/rpcserver.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/all.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/cipher_aead.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/cipher_block.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/cipher_stream.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/ciphers.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/common.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/compression.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/groups.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/h_mac.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/hash.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/hkdf.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/kx_algs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/md4.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/pkcs1.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/prf.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/crypto/suites.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto copying build/lib/scapy/layers/tls/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/all.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/automaton.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/automaton_cli.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/automaton_srv.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/basefields.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/cert.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/extensions.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/handshake.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/handshake_sslv2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/keyexchange.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/keyexchange_tls13.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/quic.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/record.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/record_sslv2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/record_tls13.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/session.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/tls/tools.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls copying build/lib/scapy/layers/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/all.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/bluetooth.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/bluetooth4LE.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/can.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/clns.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dcerpc.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dhcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dhcp6.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dns.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dot11.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/dot15d4.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/eap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/gprs.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/gssapi.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/hsrp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/http.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/inet.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/inet6.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ipsec.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ir.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/isakmp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/kerberos.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/l2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/l2tp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ldap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/llmnr.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/lltd.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/mgcp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/mobileip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ms_nrtp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/netbios.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/netflow.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ntlm.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ntp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/pflog.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ppi.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ppp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/pptp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/quic.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/radius.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/rip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/rtp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/sctp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/sixlowpan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/skinny.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/smb.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/smb2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/smbclient.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/smbserver.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/snmp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/spnego.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/ssh.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/tftp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/tuntap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/usb.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/vrrp.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/vxlan.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/x509.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers copying build/lib/scapy/layers/zigbee.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/ethertypes.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/extcap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/manuf.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/matplot.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/rfc3961.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/structures.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/test_pyx.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs copying build/lib/scapy/libs/winpcapy.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack copying build/lib/scapy/modules/krack/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack copying build/lib/scapy/modules/krack/automaton.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack copying build/lib/scapy/modules/krack/crypto.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack copying build/lib/scapy/modules/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/ldaphero.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/nmap.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/p0f.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/p0fv2.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/ticketer.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules copying build/lib/scapy/modules/voip.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools creating /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive copying build/lib/scapy/tools/automotive/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive copying build/lib/scapy/tools/automotive/isotpscanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive copying build/lib/scapy/tools/automotive/obdscanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive copying build/lib/scapy/tools/automotive/xcpscanner.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive copying build/lib/scapy/tools/UTscapy.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/tools/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/tools/check_asdis.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/tools/generate_ethertypes.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/tools/generate_manuf.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/tools/scapy_pyannotate.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools copying build/lib/scapy/__init__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/__main__.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/all.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/ansmachine.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/as_resolvers.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/asn1fields.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/asn1packet.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/automaton.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/autorun.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/base_classes.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/compat.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/config.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/consts.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/dadict.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/data.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/error.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/fields.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/fwdmachine.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/interfaces.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/main.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/packet.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/pipetool.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/plist.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/pton_ntop.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/route.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/route6.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/scapypipes.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/sendrecv.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/sessions.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/supersocket.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/themes.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/utils.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/utils6.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy copying build/lib/scapy/volatile.py -> /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/consts.py to consts.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/core.py to core.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/pfroute.py to pfroute.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/supersocket.py to supersocket.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux/rtnetlink.py to rtnetlink.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/native.py to native.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/structures.py to structures.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/common.py to common.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/libpcap.py to libpcap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/solaris.py to solaris.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/unix.py to unix.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/asn1.py to asn1.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/ber.py to ber.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/mib.py to mib.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/secoc.py to secoc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/secoc_canfd.py to secoc_canfd.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/secoc_pdu.py to secoc_pdu.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/pdu.py to pdu.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/definitions.py to definitions.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/enumerator.py to enumerator.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/hsfz.py to hsfz.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/gmlan.py to gmlan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/gmlan_ecu_states.py to gmlan_ecu_states.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/gmlan_logging.py to gmlan_logging.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/gmlan_scanner.py to gmlan_scanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/gmlanutils.py to gmlanutils.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid/iids.py to iids.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid/mids.py to mids.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids.py to pids.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_00_1F.py to pids_00_1F.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_20_3F.py to pids_20_3F.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_40_5F.py to pids_40_5F.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_60_7F.py to pids_60_7F.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_80_9F.py to pids_80_9F.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/pids_A0_C0.py to pids_A0_C0.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid/tids.py to tids.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/obd.py to obd.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/packet.py to packet.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/scanner.py to scanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/services.py to services.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/configuration.py to configuration.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/enumerator.py to enumerator.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/executor.py to executor.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/graph.py to graph.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/staged_test_case.py to staged_test_case.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/test_case.py to test_case.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen/definitions.py to definitions.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/cto_commands_master.py to cto_commands_master.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/cto_commands_slave.py to cto_commands_slave.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/scanner.py to scanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/utils.py to utils.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/xcp.py to xcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/ccp.py to ccp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/ecu.py to ecu.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/kwp.py to kwp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/someip.py to someip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/uds.py to uds.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/uds_ecu_states.py to uds_ecu_states.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/uds_logging.py to uds_logging.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/uds_scan.py to uds_scan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/doip.py to doip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/isotp_native_socket.py to isotp_native_socket.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/isotp_packet.py to isotp_packet.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/isotp_scanner.py to isotp_scanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/isotp_soft_socket.py to isotp_soft_socket.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/isotp_utils.py to isotp_utils.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/common_types.py to common_types.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/pid_types.py to pid_types.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/rtps.py to rtps.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/iec104_fields.py to iec104_fields.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/iec104_information_elements.py to iec104_information_elements.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/iec104_information_objects.py to iec104_information_objects.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/pcom.py to pcom.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/altbeacon.py to altbeacon.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/aoe.py to aoe.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/avs.py to avs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/bfd.py to bfd.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/bgp.py to bgp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/bier.py to bier.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/bp.py to bp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/cansocket.py to cansocket.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/cansocket_native.py to cansocket_native.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/cansocket_python_can.py to cansocket_python_can.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/carp.py to carp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/cdp.py to cdp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/chdlc.py to chdlc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/coap.py to coap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/concox.py to concox.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/diameter.py to diameter.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/dtp.py to dtp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/eddystone.py to eddystone.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/eigrp.py to eigrp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/enipTCP.py to enipTCP.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/erspan.py to erspan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/esmc.py to esmc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ethercat.py to ethercat.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/etherip.py to etherip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/exposure_notification.py to exposure_notification.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/geneve.py to geneve.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/gtp.py to gtp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/gtp_v2.py to gtp_v2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/gxrp.py to gxrp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/hicp.py to hicp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/homeplugav.py to homeplugav.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/homepluggp.py to homepluggp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/homeplugsg.py to homeplugsg.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/http2.py to http2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ibeacon.py to ibeacon.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/icmp_extensions.py to icmp_extensions.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ife.py to ife.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/igmp.py to igmp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/igmpv3.py to igmpv3.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ikev2.py to ikev2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isis.py to isis.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/knx.py to knx.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/lacp.py to lacp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ldp.py to ldp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/lldp.py to lldp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/loraphy2wan.py to loraphy2wan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ltp.py to ltp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/mac_control.py to mac_control.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/macsec.py to macsec.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/metawatch.py to metawatch.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/modbus.py to modbus.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/mount.py to mount.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/mpls.py to mpls.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/mqtt.py to mqtt.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/mqttsn.py to mqttsn.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/nfs.py to nfs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/nlm.py to nlm.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/nrf_sniffer.py to nrf_sniffer.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/nsh.py to nsh.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/oam.py to oam.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/oncrpc.py to oncrpc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/opc_da.py to opc_da.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/openflow.py to openflow.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/openflow3.py to openflow3.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ospf.py to ospf.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/pfcp.py to pfcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/pim.py to pim.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/pnio.py to pnio.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/pnio_dcp.py to pnio_dcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/pnio_rpc.py to pnio_rpc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/portmap.py to portmap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/postgres.py to postgres.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ppi_cace.py to ppi_cace.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ppi_geotag.py to ppi_geotag.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/psp.py to psp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/ripng.py to ripng.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/roce.py to roce.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rpl.py to rpl.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rpl_metrics.py to rpl_metrics.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rsvp.py to rsvp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtcp.py to rtcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtr.py to rtr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtsp.py to rtsp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/sdnv.py to sdnv.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/sebek.py to sebek.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/send.py to send.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/skinny.py to skinny.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/slowprot.py to slowprot.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/socks.py to socks.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/stamp.py to stamp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/stun.py to stun.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/tacacs.py to tacacs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/tcpao.py to tcpao.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/tcpros.py to tcpros.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/tzsp.py to tzsp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/vqp.py to vqp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/vtp.py to vtp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/wireguard.py to wireguard.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ept.py to ept.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_dcom.py to ms_dcom.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_drsr.py to ms_drsr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_nrpc.py to ms_nrpc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_samr.py to ms_samr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_srvs.py to ms_srvs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/ms_wkst.py to ms_wkst.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/all.py to all.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/ept.py to ept.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/msdcom.py to msdcom.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/msdrsr.py to msdrsr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/mseerr.py to mseerr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/msnrpc.py to msnrpc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/mspac.py to mspac.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/rpcclient.py to rpcclient.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/rpcserver.py to rpcserver.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/all.py to all.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/cipher_aead.py to cipher_aead.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/cipher_block.py to cipher_block.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/cipher_stream.py to cipher_stream.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/ciphers.py to ciphers.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/common.py to common.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/compression.py to compression.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/groups.py to groups.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/h_mac.py to h_mac.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/hash.py to hash.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/hkdf.py to hkdf.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/kx_algs.py to kx_algs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/md4.py to md4.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/pkcs1.py to pkcs1.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/prf.py to prf.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/suites.py to suites.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/all.py to all.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/automaton.py to automaton.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/automaton_cli.py to automaton_cli.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/automaton_srv.py to automaton_srv.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/basefields.py to basefields.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/cert.py to cert.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/extensions.py to extensions.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/handshake.py to handshake.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/handshake_sslv2.py to handshake_sslv2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/keyexchange.py to keyexchange.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/keyexchange_tls13.py to keyexchange_tls13.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/quic.py to quic.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/record.py to record.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/record_sslv2.py to record_sslv2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/record_tls13.py to record_tls13.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/session.py to session.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/tools.py to tools.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/all.py to all.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/bluetooth.py to bluetooth.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/bluetooth4LE.py to bluetooth4LE.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/can.py to can.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/clns.py to clns.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dcerpc.py to dcerpc.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dhcp.py to dhcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dhcp6.py to dhcp6.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dns.py to dns.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dot11.py to dot11.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/dot15d4.py to dot15d4.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/eap.py to eap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/gprs.py to gprs.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/gssapi.py to gssapi.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/hsrp.py to hsrp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/http.py to http.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/inet.py to inet.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/inet6.py to inet6.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ipsec.py to ipsec.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ir.py to ir.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/isakmp.py to isakmp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/kerberos.py to kerberos.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/l2.py to l2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/l2tp.py to l2tp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ldap.py to ldap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/llmnr.py to llmnr.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/lltd.py to lltd.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/mgcp.py to mgcp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/mobileip.py to mobileip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ms_nrtp.py to ms_nrtp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/netbios.py to netbios.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/netflow.py to netflow.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ntlm.py to ntlm.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ntp.py to ntp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/pflog.py to pflog.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ppi.py to ppi.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ppp.py to ppp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/pptp.py to pptp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/quic.py to quic.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/radius.py to radius.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/rip.py to rip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/rtp.py to rtp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/sctp.py to sctp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/sixlowpan.py to sixlowpan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/skinny.py to skinny.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/smb.py to smb.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/smb2.py to smb2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/smbclient.py to smbclient.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/smbserver.py to smbserver.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/snmp.py to snmp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/spnego.py to spnego.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/ssh.py to ssh.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tftp.py to tftp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tuntap.py to tuntap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/usb.py to usb.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/vrrp.py to vrrp.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/vxlan.py to vxlan.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/x509.py to x509.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/zigbee.py to zigbee.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/ethertypes.py to ethertypes.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/extcap.py to extcap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/manuf.py to manuf.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/matplot.py to matplot.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/rfc3961.py to rfc3961.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/structures.py to structures.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/test_pyx.py to test_pyx.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/winpcapy.py to winpcapy.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/automaton.py to automaton.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/crypto.py to crypto.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/ldaphero.py to ldaphero.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/nmap.py to nmap.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/p0f.py to p0f.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/p0fv2.py to p0fv2.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/ticketer.py to ticketer.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/voip.py to voip.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/isotpscanner.py to isotpscanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/obdscanner.py to obdscanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/xcpscanner.py to xcpscanner.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/UTscapy.py to UTscapy.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/check_asdis.py to check_asdis.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/generate_ethertypes.py to generate_ethertypes.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/generate_manuf.py to generate_manuf.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/scapy_pyannotate.py to scapy_pyannotate.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__init__.py to __init__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__main__.py to __main__.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/all.py to all.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/ansmachine.py to ansmachine.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/as_resolvers.py to as_resolvers.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1fields.py to asn1fields.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1packet.py to asn1packet.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/automaton.py to automaton.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/autorun.py to autorun.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/base_classes.py to base_classes.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/compat.py to compat.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/config.py to config.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/consts.py to consts.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/dadict.py to dadict.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/data.py to data.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/error.py to error.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/fields.py to fields.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/fwdmachine.py to fwdmachine.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/interfaces.py to interfaces.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/main.py to main.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/packet.py to packet.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/pipetool.py to pipetool.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/plist.py to plist.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/pton_ntop.py to pton_ntop.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/route.py to route.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/route6.py to route6.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/scapypipes.py to scapypipes.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/sendrecv.py to sendrecv.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/sessions.py to sessions.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/supersocket.py to supersocket.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/themes.py to themes.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/utils.py to utils.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/utils6.py to utils6.cpython-314.pyc byte-compiling /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/volatile.py to volatile.cpython-314.pyc writing byte-compilation script '/tmp/tmp2zuc31ac.py' /usr/bin/python3 /tmp/tmp2zuc31ac.py removing /tmp/tmp2zuc31ac.py running install_data running install_egg_info running egg_info writing scapy.egg-info/PKG-INFO writing dependency_links to scapy.egg-info/dependency_links.txt writing entry points to scapy.egg-info/entry_points.txt writing requirements to scapy.egg-info/requires.txt writing top-level names to scapy.egg-info/top_level.txt reading manifest file 'scapy.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'scapy.egg-info/SOURCES.txt' Copying scapy.egg-info to /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy-2.5.0.dev586-py3.14.egg-info running install_scripts Installing scapy script to /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/bin + rm -rfv /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/bin/__pycache__ + rm -f /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy-2.5.0.dev586-py3.14.egg-info/requires.txt + mv -f /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/bin/scapy /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/bin/scapy3 + ln -s /usr/bin/scapy3 /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/bin/scapy + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + /usr/lib/rpm/redhat/brp-python-rpm-in-distinfo + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j2 Bytecompiling .py files below /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14 using python3.14 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j2 /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/utils6.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/volatile.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/sessions.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/themes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/sessions.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/sendrecv.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/utils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/supersocket.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/sendrecv.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/pipetool.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/scapypipes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/route6.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/route.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/pton_ntop.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/plist.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/main.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/packet.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/fwdmachine.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/fields.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/error.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/data.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/fields.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/dadict.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/interfaces.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/consts.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/config.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/asn1packet.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/automaton.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/asn1fields.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/compat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/config.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/base_classes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/autorun.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/as_resolvers.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/all.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/__main__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/__pycache__/ansmachine.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/scapy_pyannotate.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/generate_manuf.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/generate_ethertypes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/check_asdis.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/__pycache__/xcpscanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/__pycache__/obdscanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/__pycache__/isotpscanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/automotive/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/p0fv2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/tools/__pycache__/UTscapy.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/voip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/p0f.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/nmap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/ldaphero.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__pycache__/crypto.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/__pycache__/ticketer.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__pycache__/crypto.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__pycache__/automaton.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/ethertypes.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/modules/krack/__pycache__/automaton.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/test_pyx.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/structures.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/winpcapy.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/rfc3961.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/matplot.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/rfc3961.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/extcap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/zigbee.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/libs/__pycache__/manuf.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/vxlan.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/vrrp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/usb.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/x509.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/tuntap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smbclient.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smbclient.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/tftp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smb2.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smb2.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ssh.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/snmp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/spnego.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smb.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/skinny.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/smbserver.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/sixlowpan.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/radius.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/sixlowpan.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/sctp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/quic.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/pptp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/rtp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/rip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ppi.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/pflog.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ppp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ntp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/netflow.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ntlm.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/netbios.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/llmnr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ntlm.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ms_nrtp.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ldap.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ms_nrtp.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/mobileip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/mgcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ldap.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/lltd.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/l2tp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/l2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/inet6.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/kerberos.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/inet.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/kerberos.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/isakmp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ir.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/ipsec.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/http.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/hsrp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dot11.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/gssapi.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/gprs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/eap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dot15d4.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dns.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dns.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dhcp6.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dcerpc.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dhcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/clns.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/can.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/bluetooth4LE.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/dcerpc.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/all.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/tools.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/session.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/handshake_sslv2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/__pycache__/bluetooth.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/record_tls13.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/record_sslv2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/record.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/quic.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/handshake.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/keyexchange_tls13.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/extensions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/keyexchange.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/basefields.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/cert.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/automaton_srv.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/automaton.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/all.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/automaton_cli.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/prf.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/pkcs1.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/md4.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/kx_algs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/hkdf.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/hash.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/h_mac.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/groups.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/suites.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/common.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/ciphers.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/compression.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/cipher_stream.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/cipher_block.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/all.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/tls/crypto/__pycache__/cipher_aead.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/rpcserver.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/rpcclient.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/rpcclient.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/mspac.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/msnrpc.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/mseerr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/msnrpc.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/ept.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/msdcom.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/msdrsr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/__pycache__/all.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_wkst.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_samr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_nrpc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_drsr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_dcom.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ept.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/tzsp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/wireguard.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/layers/msrpce/raw/__pycache__/ms_srvs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/vqp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/vtp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/tcpao.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/tcpros.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/tacacs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/stun.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/stamp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/socks.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/slowprot.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/send.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/sebek.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/skinny.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/sdnv.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rtsp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rtr.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rtcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rsvp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/roce.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rpl_metrics.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ripng.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/rpl.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/psp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ppi_geotag.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ppi_cace.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ospf.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/postgres.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/portmap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pnio_rpc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pnio_dcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pnio.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pnio.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pim.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/openflow3.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/openflow.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/opc_da.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/nlm.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/oncrpc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/pfcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/oam.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/nsh.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/nrf_sniffer.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/mpls.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/mount.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/nfs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/mqttsn.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/mqtt.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/modbus.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/metawatch.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/macsec.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/mac_control.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ltp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/lldp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ldp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/lacp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/knx.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/loraphy2wan.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ibeacon.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/isis.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/http2.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ikev2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/igmpv3.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/igmp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ife.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/icmp_extensions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/http2.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/homeplugsg.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/homepluggp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/homeplugav.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/eigrp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/eddystone.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/dtp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/hicp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/gxrp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/gtp_v2.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/gtp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/geneve.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/exposure_notification.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/etherip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/diameter.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/ethercat.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/esmc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/erspan.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/enipTCP.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/concox.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/coap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/chdlc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/carp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/cansocket_python_can.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/cdp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/cansocket.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/bp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/cansocket_native.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/bier.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/bfd.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/avs.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/aoe.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/altbeacon.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/__pycache__/pcom.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/__pycache__/bgp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/__pycache__/iec104_information_objects.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/__pycache__/iec104_fields.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/scada/iec104/__pycache__/iec104_information_elements.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/__pycache__/rtps.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/__pycache__/pid_types.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/rtps/__pycache__/common_types.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/isotp_utils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/isotp_native_socket.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/isotp_scanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/isotp_soft_socket.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/isotp/__pycache__/isotp_packet.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/uds.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/uds_scan.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/uds_ecu_states.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/uds_logging.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/someip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/kwp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/doip.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/ecu.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/__pycache__/ccp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/cto_commands_slave.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/cto_commands_master.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/utils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/xcp.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/xcp/__pycache__/scanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/graph.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/executor.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/enumerator.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/volkswagen/__pycache__/definitions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/test_case.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/configuration.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/staged_test_case.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/scanner/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__pycache__/services.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__pycache__/packet.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__pycache__/obd.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/__pycache__/scanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/tid/__pycache__/tids.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_A0_C0.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_40_5F.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_20_3F.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_80_9F.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_00_1F.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids_60_7F.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/pid/__pycache__/pids.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid/__pycache__/iids.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/iid/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/gmlanutils.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/obd/mid/__pycache__/mids.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/gmlan_logging.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/gmlan_ecu_states.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/gmlan.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/gm/__pycache__/gmlan_scanner.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/__pycache__/hsfz.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/__pycache__/enumerator.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__pycache__/secoc_pdu.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__pycache__/secoc_canfd.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__pycache__/secoc.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__pycache__/pdu.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/autosar/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__pycache__/mib.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/contrib/automotive/bmw/__pycache__/definitions.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__pycache__/ber.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__pycache__/asn1.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__pycache__/unix.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__pycache__/solaris.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__pycache__/common.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/asn1/__pycache__/asn1.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/__pycache__/libpcap.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/__pycache__/native.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/__pycache__/structures.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux/__pycache__/rtnetlink.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/windows/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/linux/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__pycache__/supersocket.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__pycache__/consts.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__pycache__/core.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/scapy-2.5.0-build/BUILDROOT/usr/lib/python3.14/site-packages/scapy/arch/bpf/__pycache__/pfroute.cpython-314.opt-1.pyc: rewriting with normalized contents Scanned 76 directories and 1117 files, processed 391 inodes, 390 modified (42 replaced + 348 rewritten), 0 unsupported format, 0 errors Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.3G9R7N + umask 022 + cd /builddir/build/BUILD/scapy-2.5.0-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd scapy-2.5.0 ++ python3 ./.config/ci/openssl.py + OPENSSL_CONF=/tmp/tmpcq_g0_f4.cnf + ./test/run_tests -c test/configs/linux.utsc -K ci_only -K scanner Begin emission reading from file /tmp/tmpiyx0hpte, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file /tmp/tmpiyx0hpte, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file /tmp/tmpiyx0hpte, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file -, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file /tmp/tmpmo5kur4_, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file -, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file -, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file -, link-type IPV4 (Raw IPv4), snapshot length 65535 reading from file -, link-type EN10MB (Ethernet), snapshot length 65535 reading from file /tmp/scapyzh6j2fdx.pcap, link-type EN10MB (Ethernet), snapshot length 65535 reading from file -, link-type EN10MB (Ethernet), snapshot length 65535 reading from file /tmp/scapy7prq3cwq, link-type IEEE802_11_RADIO (802.11 plus radiotap header), snapshot length 65535 Begin emission Finished sending 1 packets *━ UTScapy - Scapy 2.5.0.dev586 - 3.14.0b4 └ Loaded config file test/configs/linux.utsc └ Non-root mode └ Booting scapy... └ Discovering tests files... ━ Loading: test/answering_machines.uts passed CA80D318 000.08s Generic answering machine mocker passed 7ABD0259 000.02s BOOT_am passed BB811897 000.03s DHCP_am passed 5F9A0C99 000.01s ARP_am passed EB3E3649 000.02s ICMPEcho_am passed DEBF7F6E 000.18s DNS_am passed 1F6AE33B 000.04s LLMNR_am passed 2D6027F7 000.12s mDNS_am passed F428DA3D 000.02s WiFi_am passed FCCB156F 000.13s NBNS_am passed 4F26CADB 000.19s LdapPing_am passed F7C5C95A 000.03s Radius_am PAP - Test Access-Success passed FD3105E1 000.03s Radius_am PAP - Test Access-Reject passed 79225855 000.05s Radius_am MS-CHAP2 - Test Access-Success passed F0643BFC 000.05s Radius_am MS-CHAP2 - Test Access-Reject Campaign CRC=CF9E056E in 001.02s SHA=620A26F8848E8E28B2F3ECECD13C93A919F6D203 PASSED=15 FAILED=0 ━ Loading: test/fields.uts passed 49EC0DD3 000.04s ConditionnalField class passed C10B7C25 000.00s Simple tests passed D131D69E 000.00s MACField class passed A3965953 000.00s LEMACField class passed 1AE4144B 000.01s SourceMACField passed A8B908D5 000.01s IPField class passed E54209E8 000.01s SourceIPField passed F80FF879 000.01s ThreeBytesField passed B4537C2F 000.02s NBytesField passed 4C32BD99 000.01s StrField passed 5A8E3367 000.01s StrFieldUtf16 passed 8D875933 000.00s StrFieldUtf16 passed E71A4E80 000.02s Creation of a layer with ActionField passed 39015249 000.00s Triggering action passed 648CCA2E 000.00s Creation of a layer with FieldLenField passed FD69822A 000.00s Assembly of an empty packet passed 418F18DF 000.00s Assembly of non empty packet passed D70A4723 000.00s Disassembly passed 56252579 000.01s BitFieldLenField test passed 507AC347 000.01s Test BitLenField passed BAEBDE7D 000.01s Test UTCTimeField passed DDF60244 000.01s Creation of a layer passed BBDF976B 000.00s Assembly of an empty packet passed 10BFFBF0 000.00s Assembly of a non-empty packet passed 271331C3 000.00s Disassemble passed 5248251B 000.01s Disassemble unaligned passed C7F07619 000.01s Manipulate passed E54B8BB1 000.00s Test mutability of the default values passed 68DB9CF4 000.01s Create a layer passed BE210CA7 000.00s Test the PacketListField assembly passed 4A105497 000.01s Test the PacketListField assembly 2 passed D7560C6C 000.01s Test disassembly passed 8EC9F5F9 000.02s Nested PacketListField passed F0F8088A 000.00s Create a layer passed BE210CA7 000.00s Test the PacketListField assembly passed 4A105497 000.01s Test the PacketListField assembly 2 passed D7560C6C 000.01s Test disassembly passed D59DE86D 000.01s Test parent reference passed 781E4EFA 000.02s Test parent reference in guess_payload_class passed 8EC9F5F9 000.02s Nested PacketListField passed 16BFB6B2 000.04s Complex packet passed 952B8BB0 000.00s Test calls on TCPOptionsField.getfield passed F0F8088A 000.00s Create a layer passed BE210CA7 000.00s Test the PacketListField assembly passed 4A105497 000.01s Test the PacketListField assembly 2 passed D7560C6C 000.01s Test disassembly passed 8EC9F5F9 000.02s Nested PacketListField passed 5BF7A4B9 000.04s Complex packet passed EBD4DC4F 000.03s Create layers for heterogeneous PacketListField passed A6889902 000.02s Test heterogeneous PacketListField passed A7CDB158 000.03s Create layers for heterogeneous PacketListField with memory passed E1C63552 000.01s Test heterogeneous PacketListField with memory passed CCD82B3B 000.97s Test nested PacketListFields passed 24D89AA7 000.01s Test cache handling of payload modification in a PacketListField passed 9A9CE8BE 000.01s Test cache handling of payload modification in a PacketField passed E463C228 000.03s Test calls on MultiFlagsField.any2i passed 7AB18CC6 000.02s Test calls on MultiFlagsField.i2m passed 37E9323B 000.02s Test calls on MultiFlagsField.m2i passed 4E80D133 000.02s Test calls on MultiFlagsField.i2repr passed 8DE519CD 000.01s EnumField tests initialization passed 13F48087 000.01s EnumField.any2i_one passed 93C7C3E9 000.01s EnumField.any2i passed C689060A 000.02s EnumField.i2repr_one passed 8E7E251E 000.02s EnumField.i2repr passed C3EA18B7 000.01s EnumField with Enum passed 03EA15DC 000.00s LE3BytesEnumField passed 3D43DF31 000.00s LE3BytesEnumField.i2repr_one passed B35760E8 000.00s XLE3BytesEnumField passed 1597D3EA 000.00s Building expect_exception handler passed D688FCD5 000.00s CharEnumField tests initialization passed D5F5A4AB 000.00s CharEnumField.any2i_one passed 1597D3EA 000.00s Building expect_exception handler passed B7B39436 000.00s XByteEnumField tests initialization passed 30A25CC2 000.00s XByteEnumField.i2repr_one passed 384257A1 000.00s XByteEnumField update tests initialization passed 488C1015 000.01s XByteEnumField.i2repr_one with update passed 1597D3EA 000.00s Building expect_exception handler passed 1DA6EA64 000.00s XShortEnumField tests initialization passed 30A25CC2 000.00s XShortEnumField.i2repr_one passed 0D59ADD1 000.00s XShortEnumField update tests initialization passed 488C1015 000.01s XShortEnumField.i2repr_one with update passed 0DAC950D 000.00s Raise exception - test data passed B45DBB97 000.00s default usage passed 74654715 000.00s inverted yes - no (scalar config) passed 92895491 000.00s inverted yes - no (range config) passed F22EC4EE 000.00s yes - no (using sets) passed 1E2122AB 000.00s yes, no and invalid passed F50D4F62 000.00s invalid scalar spec passed 1696BECE 000.00s invalid range spec - invalid length passed 4B8B44BC 000.01s invalid range spec - invalid value passed 3A64A190 000.00s invalid set spec - invalid value passed FD5682F6 000.00s FlasgField - Python incompatible name passed 7ABC2B56 000.02s Test initialization order passed D8E6560B 000.00s Default order passed 39AC5ACF 000.00s Reversed order passed 99D0148A 000.02s Test default values auto-update passed E8107B46 000.01s MultipleTypeField - syntax error passed 91DF4F1E 000.00s Test Flags Field Iterator passed 9E7F4CB7 000.00s Test upper nibble passed 1B04A4FD 000.00s Test lower nibble passed 7D3838E6 000.00s Test single flag 1 passed 571CAF9B 000.00s Test single flag 2 passed 6A1EFD0B 000.00s Test single flag 0x80 passed CDAC6203 000.00s Test pattern 0x55 passed 890D9CEB 000.00s Test pattern 0xAA passed 15FCB607 000.00s Test pattern 0x00 passed 567E8BE8 000.00s Test pattern 0xFF passed BF2749BA 000.01s FlagsField with str passed 0C4F6B6D 000.01s FlagsField with dict passed 5DF233C4 000.01s Conditional FlagsField command passed 44B19AAB 000.00s ScalingField Test default behaviour passed A231573C 000.01s ScalingField Test string assignment passed D18D7CEF 000.01s ScalingField Test scaling passed B56FEC5C 000.01s ScalingField Test scaling signed passed 5884C0E1 000.01s ScalingField Test scaling signed offset passed 3C241A76 000.01s ScalingField Test scaling offset passed AD7F3300 000.00s ScalingField Test unit passed B4122C4B 000.00s ScalingField Test unit and ndigits passed 100B2821 000.01s ScalingField Test unit and ndigits 2 passed FDA807AC 000.01s ScalingField Test unit and ndigits 3 passed E16F5885 000.00s ScalingField randval byte passed F67EC324 000.00s ScalingField randval byte 2 passed 0A84E725 000.01s ScalingField signed randval byte passed B8218E92 000.00s ScalingField signed randval byte 2 passed 620F1A7F 000.00s ScalingField signed randval short passed 2C1E2061 000.00s ScalingField signed randval int passed A3E507E5 000.00s ScalingField signed randval long passed 15384BF6 000.00s ScalingField signed randval long passed 4DF84CAC 000.00s LSBExtendedField passed DB675054 000.00s MSBExtendedField passed C8DF1936 000.02s Field Deprecation test passed 824FE140 000.02s FCSField: basic test passed F1FEB0EE 000.02s FCSField: multiple passed 9722690D 000.01s PacketField: randval() passed C4C85BD3 000.01s PacketField: randval(), PacketField in PacketField passed C8D9B7FA 000.02s Test parent reference in guess_payload_class passed 25F1894D 000.00s i2repr passed 69949DCF 000.00s unaligned data passed D760F7FF 000.02s unaligned data Campaign CRC=E68B6FC6 in 002.13s SHA=FC747F9ACD71EC85376DD99694647CEBD3FA065E PASSED=139 FAILED=0 ━ Loading: test/imports.uts passed 456053A5 000.08s Prepare importing all scapy files passed 816770EE 013.61s Try importing all core separately passed 1D3DC2E3 066.22s Try importing all layers separately passed B57BFE53 057.34s Try importing all contribs separately Campaign CRC=97C3718C in 137.24s SHA=BE08F1CED6FC819738093A665A97A1D86CC6FA71 PASSED=4 FAILED=0 ━ Loading: test/linux.uts passed CF5AD4BE 000.42s IPv6 link-local address selection passed CFDD191F 000.29s Routing table, interface with no names passed FE81D5D6 000.55s Reload interfaces & routes Campaign CRC=5789BFF4 in 001.25s SHA=BCC1041F9F4C6CB28F66E662207F370A0AF99477 PASSED=3 FAILED=0 ━ Loading: test/nmap.uts passed D4B85D3C 000.02s Module loading passed D4A566B0 000.01s Test functions passed 6E9310F7 000.14s Fetch database passed 445BCB55 000.39s Database loading passed 1E3CA419 000.00s Nmap base not available passed E290FF8C 000.00s Clear temp files Campaign CRC=B595AF90 in 000.56s SHA=C090CE797E3688F8B80D55D9F4798A85E211A867 PASSED=6 FAILED=0 ━ Loading: test/p0f.uts passed FDBDA0E1 000.07s Module loading passed 08581CC6 000.07s Fetch database passed AEE5211D 000.00s Test TCP p0f, SYN - Windows passed D3DDF7DC 000.00s Test TCP p0f, SYN - Linux passed 6D3D3134 000.01s Test TCP p0f, SYN - IPv6 FreeBSD passed D3DAB7CC 000.00s Test TCP p0f, SYN-ACK - Linux passed 25E0D8BE 000.14s Test HTTP p0f, request - wget passed A8B31707 000.01s Test HTTP p0f, response - nginx passed B470B9E2 000.00s Test MTU p0f passed 57328C93 000.01s Check that the impersonated packet is properly detected by p0f passed 51FF2E2E 000.01s Check incidence of MSS value on linux version detection passed 061C7EE9 000.00s Impersonate when window size must be multiple of some integer passed 0734A2D0 000.00s Impersonate when window size must be multiple of mss passed 86005C3B 000.00s Impersonate when the following quirks are present: seq-,ack-,pushf+,urgf+ passed E5AAFFD8 000.00s Use valid option values from original packet passed 13B8F121 000.00s Discard invalid options values passed 9BA73FDB 000.00s Remove fp files Campaign CRC=5F92BAA3 in 000.36s SHA=3FE27B3DC58E23C336CA83E42AE82C3C5F7C13BD PASSED=17 FAILED=0 ━ Loading: test/p0fv2.uts passed 2BDF8058 000.04s Module loading passed 1F11CF7C 000.19s Fetch database passed B64E3887 000.01s Test p0f passed 080CB4AC 000.01s Test prnp0f passed D1A1144A 000.00s Impersonate when window size must be multiple of some integer passed E1ED9C6C 000.00s Handle unusual flags ("F") quirk passed AE160304 000.00s Use valid option values from original packet passed 02854DEE 000.01s Use valid option values when multiples required passed 2129AF15 000.00s Discard non-multiple option values when multiples required passed 1FC59A60 000.00s Discard bad timestamp values passed E2259EB3 000.00s Discard 2nd timestamp of 0 if "T" quirk is present passed 101E107E 000.00s Remove fp files Campaign CRC=D4B8D091 in 000.27s SHA=06E614E4652E43AA44696CC54EE5C62F747B588A PASSED=12 FAILED=0 ━ Loading: test/pipetool.uts passed 5C9C4D1E 003.01s Test default test case passed 10405756 000.00s Test add_pipe passed F205E1DE 000.00s Test exhausted source passed DF905DB3 000.01s Test add_pipe on running instance passed 04395C32 000.01s Test Operators passed 03E71414 000.00s Test doc passed 6FD12EEC 000.01s Test RawConsoleSink with CLIFeeder passed 5993C5A6 000.01s Test QueueSink with CLIFeeder passed 78AB5F06 000.01s Test UpDrain passed F37DF15D 000.01s Test DownDrain passed B4648AEB 000.00s Test PeriodicSource exhaustion passed 47FD7E26 000.06s Test SniffSource passed 00D6F2A1 000.05s Test SniffSource with socket passed E9142AC6 000.00s Test SniffSource with invalid args passed C6C50B82 000.01s Test exhausted AutoSource and SniffSource passed 51B6A5D7 000.01s Test WiresharkSink passed 65269375 000.02s Test WiresharkSink with linktype passed B52144EC 000.01s Test WiresharkSink with args passed 9BC24C3D 000.02s Test RdpcapSource and WrpcapSink passed 5253C3FC 000.01s TriggerDrain and TriggeredValve with CLIFeeder passed 38B83B94 000.01s TriggerDrain and TriggeredValve with CLIHighFeeder passed 5253C3FC 000.01s TriggerDrain and TriggeredQueueingValve with CLIFeeder passed BDD3E66C 000.01s TriggerDrain and TriggeredSwitch with CLIFeeder on high channel passed 046C140A 000.01s TriggerDrain and TriggeredSwitch with CLIHighFeeder on low channel passed 1C0C74BE 000.01s TriggerDrain and TriggeredMessage passed 4B4F8A83 000.01s TriggerDrain and TriggeredQueueingValve on low channel passed 0B3A37E0 000.01s TriggerDrain and TriggeredQueueingValve on high channel passed 50B65DF1 000.02s UDPDrain passed B242EE60 000.00s FDSourceSink on a ObjectPipe object Campaign CRC=6433D204 in 003.35s SHA=53EFD29A2886FCDDE2BDBCEE54CB5FC6F4DF501F PASSED=29 FAILED=0 ━ Loading: test/random.uts passed E361BE7E 000.00s RandomEnumeration passed AFD3663D 000.00s RandIP6 passed B6596B0E 000.00s RandMAC passed CA109994 000.01s RandOID passed 33B58F1E 000.00s RandRegExp passed 2C4BB77C 000.00s Corrupted(Bytes|Bits) passed 44322B3F 000.00s RandEnumKeys passed 6B4FDBCB 000.00s RandSingNum passed ECCFC8E0 000.00s Rand* passed B54D1038 000.00s RandInt (test __bool__) passed 237847F1 000.01s Various volatiles Campaign CRC=3D33A34F in 000.04s SHA=8D3FA17266E4A181743FB7CC1D15456242A79A1D PASSED=11 FAILED=0 ━ Loading: test/regression.uts passed DA599690 000.00s Setup passed D18177CF 000.08s Get conf passed C7B4EFF2 000.01s Test module version detection passed FCFED32B 000.02s Check Scapy version passed 19EC7768 000.03s List layers passed FE0F029B 000.02s List layers - advanced passed CA149C8C 000.01s List packet fields - ls passed B614219C 000.00s List commands passed 8D74D4EE 000.03s List contribs passed 47087492 000.01s Test packet show() on LatexTheme passed 4D8EC3A7 000.03s Test rfc() passed DE8CCBA1 000.02s Check that all contrib modules are well-configured passed 0A631592 000.00s Configuration passed 3F6538B8 000.00s Configuration conf.use_* LINUX passed 37C97003 000.45s Configuration conf.use_pcap passed 9A33551A 000.13s Test layer filtering passed 970EB61E 000.00s UTscapy route check passed F5B5F60E 000.12s Interface related functions passed BF73AD45 000.01s More Interfaces related functions passed FC3E1AC8 000.18s Test conf.ifaces passed 735378A8 001.02s Test extcap detection in conf.ifaces passed 009779EA 000.21s Test read_routes6() - default output passed B5AC1166 000.03s Test read_routes6() - check mandatory routes passed 41EBC767 000.00s Test ifchange() passed DB13F153 000.00s Packet.route() passed 725E2FEF 000.01s utils/in4_is* passed 7A248DDC 000.00s plain_str test passed 16835536 000.00s test bytes_hex/hex_bytes passed 451B4F17 000.00s orb/chb passed 17CCED4A 000.01s Pickle and unpickle a packet passed 29EB7522 000.00s Usage test passed A5957D3E 004.21s Session test passed 358903D2 000.02s Session test with fname passed 77972341 000.00s Clear session files passed 0D050B28 000.03s Emulate interact() passed A6D81098 000.03s Emulate interact() and test startup.py with ptpython passed 7DF4BCBE 000.06s Test explore() with GUI mode passed 0BA85D98 000.02s Test explore() with non-GUI mode passed E528FB12 000.07s Test load_contrib overwrite passed E0AD57DF 000.01s Test load_contrib failure passed B97A8D27 000.00s Test sane function passed 83735EC6 000.00s Test lhex function passed 5E111AD7 000.03s Test restart function passed 709E8D59 000.01s Test linehexdump function passed 84F60AFB 000.00s Test chexdump function passed 77D2AF54 000.00s Test repr_hex function passed 18D9F734 000.00s Test hexstr function passed 135C9327 000.00s Test fletcher16 functions passed E79A6CFF 003.63s Test hexdiff function passed 5412F8DD 000.00s Test mysummary functions - Ether passed 438CB37E 000.00s Test zerofree_randstring function passed 1004ED2C 000.00s Test strand function passed 551512DF 000.01s Test export_object and import_object functions passed 15EB18BA 000.00s Test tex_escape function passed 2B1115A9 000.00s Test colgen function passed 025482C8 000.00s Test incremental_label function passed 31C7812D 000.00s Test corrupt_* functions passed BF0AED7D 000.00s Test save_object and load_object functions passed 5C42B43B 000.21s Test whois function passed 3DD268BC 000.28s Test manuf DB methods passed 0893702D 000.17s Test multiple wireshark's manuf formats passed 39DAE179 000.03s Test load_services passed 5D20ABC2 000.00s Test utility functions - network related passed 19F686D3 000.01s Test autorun functions passed A2664C3F 000.00s Test autorun with logging passed 33DA38EA 000.01s Test utility TEX functions passed 4BD657EE 000.00s Test config file functions passed 3E957C7C 000.00s Test config file functions failures passed 79DA91B5 000.00s Test CacheInstance repr passed 3CA5F78F 000.00s Test pyx detection functions passed 85701CA0 000.02s Test matplotlib detection functions passed 8A1DD746 000.01s Packet class methods passed B9320340 000.00s hide_defaults passed 630C8C4F 000.01s split_layers passed 3635E2A7 000.00s fuzz passed FE9D1A24 000.00s fuzz a Packet with MultipleTypeField passed 48E1CA2A 000.02s fuzz on packets with advanced RandNum passed 52407322 000.00s fuzz on packets with FlagsField passed 6CABED80 000.02s Building some packets passed 5975ADFF 000.01s Manipulating some packets passed 836BF8D1 000.01s Bind string array as payload passed 4E09A425 000.00s Checking overloads passed 3E36F166 000.01s sprintf() function passed 5D99FA28 000.01s sprintf() function passed F24A9F91 000.01s haslayer function passed 7B185480 000.02s getlayer function passed 3F096904 000.01s getlayer / haslayer with name passed EB905B84 000.00s getlayer with a filter passed 1751C560 000.00s specific haslayer and getlayer implementations for EAP passed 69995C65 000.00s specific haslayer and getlayer implementations for RadiusAttribute passed 7F8D0DEC 000.01s equality passed 8C9734CF 000.02s answers passed FA97BD89 000.14s answers - Net passed 82B9D32E 000.01s conf.checkIPsrc passed 91F3736E 000.00s Test command() with normal packet passed C775095D 000.00s Test json() with normal packet passed 24F3D7C5 000.00s Test command() with nested packet passed 639219AE 000.00s Test json() with nested packet passed 00B7D354 000.00s Test command() with ASN.1 packet passed 5E265BAA 000.00s Test json(à with ASN.1 packet passed 4FDDD895 000.00s Test command() with meaningless payload passed 11C404B0 000.00s Test json() with meaningless payload passed B05A8416 000.01s Padding assembly passed 4EE5535A 000.02s Padding and length computation passed E27148F7 000.00s PadField test passed 15BD6ED7 000.01s ReversePadField passed CBAAEDAF 000.00s Creation of an IPv3 class from IP class with different default values passed 6FA614B4 000.00s Test of IPv3 class passed 078501B1 000.00s ASN1 - ASN1_Object passed 850D779D 000.00s ASN1 - RandASN1Object passed 7EA44FC4 000.00s ASN1 - ASN1_BIT_STRING passed 5CF0AB92 000.00s ASN1 - ASN1_SEQUENCE passed 3AA85782 000.00s ASN1 - ASN1_DECODING_ERROR passed DD7EF478 000.00s ASN1 - ASN1_INTEGER passed 0613C657 000.00s ASN1 - ASN1_OID passed 7E6A9D70 000.00s RandASN1Object(), specific crashes passed 01E62F5E 000.02s SSID is parsed properly even with the presence of RSN Information passed AA451BE8 000.02s SSID is parsed properly even when the Country Information Tag Element has an odd length (not complying with the standard) and a missing pad byte passed 8C311638 000.11s Test sniffing with AsyncSniffer on failed passed 0B0BE316 000.01s test chainEX passed D5631F8D 000.21s Whois request passed 82E3936A 005.79s AS resolvers passed ABA510B8 000.45s AS resolver - IPv6 passed 0FA8EBD5 000.00s AS resolver - socket error passed A0F4B95B 000.02s sendpfast passed 6E277EB6 000.02s Implicit logic 1 passed 4C656AED 000.01s Implicit logic 2 passed 65799897 000.02s Implicit logic 3 passed 8373A7AD 000.02s sniff() with socket failure passed 83D0766D 000.01s Test SuperSocket.select passed 5DCEE3B3 000.00s Test L2ListenTcpdump socket passed 6746E7CA 000.00s __repr__ passed 1583A3C8 000.00s check _resolve_MAC passed 6F55A5F4 000.00s Variable creations passed 4F9FD49A 000.00s Read a pcap file passed 2B295E32 000.00s Read a pcapng file passed 9B99CFB9 000.00s Read a pcap file with nanosecond precision passed 6B69CA4B 000.01s Read a pcapng file with nanosecond precision and default tsresol passed 99487D9B 000.00s Read a pcapng with little-endian SHB passed F696F373 000.01s Write a pcapng passed 609DE317 000.01s Check wrpcapng() passed 6F000798 000.01s rdpcap on fifo passed A0F74356 000.87s Check multiple packets with different combination of linktype,comment,direction,sniffed_on fields. test both wrpcap() and wrpcapng() passed DBAB56A7 000.00s PcapNg - Process Information Block passed 2C5F307B 000.02s OSS-Fuzz Findings passed B86EA77D 000.00s Read a pcap file with wirelen != captured len passed 1A36F5AE 000.00s Check all packet lists are the same passed B2AE1B2E 000.00s Check packets from pcap file passed 81B3996C 000.00s Check wirelen value from pcap file passed 3B142116 000.01s Check wrpcap() then rdpcap() with wirelen passed 160D8ACD 000.01s Check wrpcap() then rdpcap() with sent_time on SndRcvList passed E20CA410 000.00s Check wrpcap() passed CDB28B86 000.01s Check offline sniff() (by PacketList) passed 5DB7D967 000.00s Check offline sniff() (by filename) passed 2F421D82 000.00s Check offline sniff() (by file object) passed 3C94713B 000.03s Check offline sniff() with a filter (by filename) passed FA2B2E6F 000.01s Check offline sniff() with a filter (by file object) passed AF82AAB9 000.02s Check offline sniff() with a PcapNg file and a filter (by file object) passed B1AB5190 000.03s Check offline sniff() with Packets and tcpdump with a filter passed 3BF7ACD4 000.01s Check offline sniff() with Packets, tcpdump and a bad filter passed E8881540 000.01s Check offline sniff with lfilter passed 1EBB8176 000.01s Check offline sniff() without a tcpdump binary passed B8A9D336 000.01s Check wrpcap(nano=True) passed 8C272C25 000.01s Check PcapNg with nanosecond precision using obsolete packet block passed 44D28963 000.01s Check PcapNg using Simple Packet Block passed BDD39671 000.01s Invalid pcapng files passed 9948C982 000.01s Check PcapWriter on null write passed 238CECEE 000.01s Check PcapWriter sets correct linktype after null write passed 30CD1304 000.01s Check RawPcapReader on pcap passed B9031CC5 000.01s Check RawPcapReader with a Context Manager passed EB3F93CD 000.01s Check RawPcapWriter passed C7C685B6 000.03s Check tcpdump() passed 12CFDB8E 000.02s Check tcpdump() command with linktype passed 06544347 000.02s Check tcpdump() command with linktype and args passed 15AD5567 000.02s Check sniff() offline with linktype & 802.11 filter passed 03178F06 000.01s Check tcpdump() command rejects non-string input for prog passed A1537C4A 000.17s Check tcpdump() command with tshark passed 206EA769 000.17s Check tdecode command directly for tshark passed 4B70552F 000.16s Check tdecode with linktype passed 4384A0D9 000.01s Check wireshark() passed 9D04DCE6 000.01s Check Raw IP pcap files passed C465B88B 000.00s Check wrpcap() with no packet passed A03B785B 000.01s Check wrpcap() with SndRcvList passed CAC4ACCF 000.01s Check wrpcap() with different packets types passed 4ABE5A5B 000.33s Check wrpcap() with the Loopback layer passed 7B522BF1 000.00s Variable creations passed E74E34A3 000.01s Check reading of ERF Ethernet file passed 1705B0BB 000.03s Check writing of ERF Ethernet file passed 349DEF1F 000.00s Check rderf passed 4947ED44 000.19s Create patcher util passed A1E67F25 000.07s OpenBSD 7.5 amd64 - read_routes() passed 3DCE6C2D 000.07s OpenBSD 7.6 GENERIC#531 i386 - read_routes() passed D100F6FF 000.13s OpenBSD 7.5 amd64 - read_routes6() passed 78B5E86D 000.13s OpenBSD 7.6 GENERIC#531 i386 - read_routes6() passed 411CCCEB 000.05s FreeBSD 14.1 amd64 - read_routes() passed 85530AC7 000.09s FreeBSD 14.1 amd64 - read_routes6() passed D695A5A6 000.06s NetBSD 10.0 amd64 - read_routes() passed 22504BE8 000.25s NetBSD 10.0 amd64 - read_routes6() passed A14A0A4C 000.24s Darwin 23.6 (MacOS 14.5) x86_64 - read_routes() passed 309D51F5 001.15s Darwin 23.6 (MacOS 14.5) x86_64 - read_routes6() passed FE72B112 000.01s Test mocked _parse_tcpreplay_result passed A449085C 000.02s Test more recent version with flows passed BE41FF1A 000.33s Mocked IPv4 routes calls passed 5B2614E8 000.39s Mocked IPv6 routes calls passed 2255E1EB 000.00s Windows: reset routes properly passed 5AA2E285 000.04s Test with DNS over TCP passed 93BC90F6 000.03s Test with recv() calls that return exact packet-length rawings passed 846CD785 000.03s Test with recv() calls that return twice as much data as the exact packet-length passed 31729BDB 000.03s Test with recv() calls that return not enough data passed 7F5F6D30 000.02s IPv6 bin to rawing conversion passed 4F88E5E2 000.00s IPv6 bin to rawing conversion - Zero-block of length 1 passed B043B4EE 000.01s IPv6 bin to rawing conversion - Illegal sizes passed F8B22202 000.01s Net passed 0999A1C4 000.00s Net using name passed 84596368 000.03s Net using implicit format in IP passed 5B4904DD 000.02s Multiple IP addresses test passed 2609BE5E 000.00s OID passed AD4A8CE3 000.01s Net6 passed DD990A2C 000.01s Net6 using implicit format in IPv6 passed E5893D82 000.00s Test repr on Net passed F878CD1A 000.00s in6_getLocalUniquePrefix() passed 4E154B45 000.01s Misc addresses manipulation functions passed 9B356652 000.01s in6_getscope() passed 158E29B1 000.01s construct_source_candidate_set() passed 8F99F845 000.03s inet_pton() passed 3E6AD142 000.14s make_route() passed 7C251239 000.14s add() & delt() passed C132633E 000.00s ifchange() passed 163CE9C0 000.00s ifdel() passed DB35A643 000.15s ifadd() & get_if_bcast() passed 80D1F40F 000.11s Remove dummy interface passed AB5C26EE 000.01s IP flags passed F79BD7F8 000.01s TCP flags passed E2D16013 000.02s Flag values mutation with .raw_packet_cache passed B29AD6EA 000.01s Operations on flag values passed 09859BDA 000.01s Test detection passed D68DAFF2 000.01s MIB passed F3924381 000.11s MIB - graph passed 80453ECF 000.00s MIB - test aliases passed 13DE7129 000.00s DADict tests passed 0F3147E1 000.01s Test ETHER_TYPES passed D17E70CE 000.00s MIB - Check that MIB OIDs are not duplicated passed 665F5863 000.01s BER tests passed 902D8DDD 000.00s BER trigger failures passed A40F4ACC 000.01s FieldLenField with BitField passed 97456282 000.00s PacketListField passed 8D363177 000.01s Test PacketListField deepcopy passed EE5096F6 000.01s PacketField passed FA8512FC 000.00s Parsing a human-readable UUID passed 20F8FDCC 000.00s Parsing a machine-encoded UUID passed 6D66DB8E 000.00s Parsing a tuple of values passed 43FF993A 000.00s Handle None values passed 84F5FFBA 000.00s Get a UUID for dissection passed E2A34AC6 000.00s Verify little endian UUIDField passed 814A1D27 000.00s Verify reversed UUIDField passed 84A2B964 000.00s RandUUID setup passed 54DEBA8F 000.00s RandUUID default behaviour passed F3EF8632 000.00s RandUUID incorrect implicit args passed FDED75F1 000.00s RandUUID v4 UUID (correct args) passed EC5945DF 000.00s RandUUID v4 UUID (incorrect args) passed 5C0AB483 000.01s RandUUID v1 UUID passed ECECDA5B 000.00s RandUUID v1 UUID (implicit version) passed 3060B0FE 000.00s RandUUID v1 UUID (incorrect args) passed 568DB606 000.00s RandUUID v5 UUID passed 367129C0 000.00s RandUUID v5 UUID (incorrect args) passed 3454E097 000.00s RandUUID v3 UUID passed 367129C0 000.00s RandUUID v3 UUID (incorrect args) passed 650D0FCF 000.00s RandUUID looks like a UUID with str passed F110F700 000.00s RandUUID with a static part passed B1A68738 000.00s RandUUID with a range part passed C6E5E197 000.01s MPLS - build/dissection passed 2248430B 000.01s MPLS encapsulated Ethernet with CW - build/dissection passed 71766601 000.01s MPLS encapsulated Ethernet without CW - build/dissection passed 24283CE2 000.01s MPLS encapsulated IP - build/dissection passed 176FDD85 000.03s sr() passed 1E6ADEC5 000.01s pickle test passed C50409A5 000.03s plot() passed 38181FB3 000.02s diffplot() passed E270A491 000.03s multiplot() passed 4A05AF0D 000.01s rawhexdump() passed 8CFD584C 000.01s hexraw() passed 869E1761 000.01s hexdump() passed DB8A3CCD 000.01s import_hexcap() passed 418D2AC7 000.00s import_hexcap(input_string) passed 3E3FECFE 000.01s padding() passed E22AFC40 000.01s nzpadding() passed 7239B5A7 000.05s conversations() passed AB4582C2 000.01s sessions() passed ECB6BF97 000.02s afterglow() passed FF32138C 000.01s psdump() passed 42D03931 000.01s pdfdump() passed 9147B2FC 000.01s svgdump() passed 99F51C1E 000.01s __getstate__ / __setstate__ (used by pickle) passed EDC07E3E 000.00s EDecimal passed C70C1056 000.02s _version() passed 7E1C8D9B 000.07s UTscapy HTML output passed 7B4709F1 000.00s test get_temp_dir passed 6AC51E14 000.04s test fragleak functions passed E1239474 000.01s CLIUtil: define and check overlap Campaign CRC=0CB8F7EF in 025.45s SHA=92105C77E7BDE91F37A59096075AC354B8080D30 PASSED=299 FAILED=0 ━ Loading: test/sendsniff.uts Campaign CRC=1B323DE1 in 000.00s SHA=603E2DF65E023EB72BB207472F4DA360B44FAD58 PASSED=0 FAILED=0 ━ Loading: test/tuntap.uts passed 2120E469 000.01s Linux-specific protocol headers passed FE81D5D6 000.42s Cleanup Campaign CRC=A874BEBE in 000.43s SHA=809470408AEC04F3295A5A2078813729F0232618 PASSED=2 FAILED=0 ━ Loading: test/scapy/layers/asn1.uts passed D95C6143 000.00s short HH passed 4E127845 000.00s short HH (invalid) passed 11A165F1 000.00s short HHMM passed 3DDCEF2A 000.00s short HHMM (invalid) passed 10A0D165 000.00s full passed BA309686 000.00s full (invalid) passed 1F34F644 000.00s with microseconds passed CE4BFAE0 000.00s with microseconds (invalid) passed 97A83935 000.00s Z short HH passed 4F42A5D4 000.00s Z short HHMM passed 26C55C28 000.00s Z full passed 7766A817 000.00s Z with microseconds passed 613CB9BD 000.00s offset short HH passed 7C82C5EE 000.00s offset short HHMM passed 83BBD361 000.00s offset full passed 14F5D1B3 000.00s offset with microseconds passed 48ABFD3F 000.00s offset negative passed 2813116B 000.00s offset invalid (offset >= 24h) passed 503D7C59 000.00s UTC short HHMM passed 2E838E84 000.00s UTC short HHMM (no Z) passed 1D91B1AF 000.00s UTC short HHMM (invalid) passed 57E7CF21 000.00s UTC full passed 9C4E3B7F 000.00s UTC full (no Z) passed 7017A636 000.00s UTC full (invalid) passed 3656A400 000.00s prepare passed 4FD5C4D9 000.00s short HH datetime passed 940DD4D6 000.00s short HHMM datetime passed 2EC32DF0 000.00s full datetime passed FCA54579 000.00s datetime assignment passed 5842960D 000.00s datetime construction passed FA47C6CF 000.00s datetime construction (UTC) passed 1D5906A5 000.00s datetime construction (offset) passed 0F9574FF 000.00s UTC datetime construction passed ED1A0631 000.00s UTC datetime construction (Z) passed 92B6E418 000.00s UTC datetime construction (offset) Campaign CRC=BA410C79 in 000.05s SHA=69C8A829E09737E048CB60509F9F50D0EB2AB23A PASSED=35 FAILED=0 ━ Loading: test/scapy/layers/bluetooth.uts passed D48EE59B 000.05s HCI layers passed BB6D4AB1 000.01s Test HCI_PHDR_Hdr piling up passed 0945B5F0 000.00s Create Connection passed 34517038 000.00s Authentication Requested passed 65B69FF7 000.00s Link Key Request Reply passed 124A25AA 000.00s Set Connection Encryption passed 838D2C41 000.00s Remote Name Request passed 3EFF5247 000.01s 7.3.12 Read Local Name passed 2AAB6934 000.01s 7.4.1 Read Local Version Information passed C39CD371 000.01s 7.4.4 Read Local Extended Features passed 4CF7049E 000.01s LE Create Connection passed 8D103942 000.02s LE Create Connection Cancel passed D4F061CB 000.00s Disconnect passed D9305D66 000.01s LE Connection Update Command passed 8FB83513 000.00s Inquiry Complete passed 74F973F6 000.00s Inquiry Result passed D8205367 000.00s Connection Complete passed 812F10A0 000.00s Disconnection Complete passed 7476554C 000.00s Remote Name Request Complete passed CFF63975 000.00s Encryption Change passed 6B00B916 000.00s Read Remote Supported Features Complete passed 6C8DDF9C 000.00s Read Remote Version Information Complete passed FA5A9D40 000.00s Command Complete passed 767927A5 000.00s Command Status passed 613BB124 000.00s Number Of Completed Packets passed 4BC0925C 000.00s Link Key Request passed 00000000 000.00s Inquiry Result with RSSI passed 9477E521 000.00s Read Remote Extended Features Complete passed 807A8100 000.01s Extended Inquiry Result passed CBC64E70 000.00s IO Capability Response passed 52263D53 000.00s LE Meta passed 6B099A56 000.00s LE Connection Update Event passed C6CE084A 000.00s Parse EIR_IncompleteList32BitServiceUUIDs passed 2639EC0A 000.01s Parse EIR_CompleteList32BitServiceUUIDs passed D98B8CD3 000.01s Parse EIR_ClassOfDevice passed B6467B05 000.00s Parse EIR_PublicTargetAddress passed B8AD8288 000.01s Parse EIR_AdvertisingInterval passed 245B2218 000.01s Parse EIR_LEBluetoothDeviceAddress passed E6B8521C 000.01s Parse EIR_Appearance passed 0913CFED 000.00s Parse EIR_ServiceData32BitUUID passed 1789F271 000.00s Parse EIR_URI passed E279ABBA 000.01s Parse EIR_Flags, EIR_CompleteList16BitServiceUUIDs, EIR_CompleteLocalName and EIR_TX_Power_Level passed CBCEBE25 000.00s Parse EIR_Manufacturer_Specific_Data passed 75E9A69D 000.03s Parse EIR_Manufacturer_Specific_Data with magic passed DB0E791B 000.01s Parse EIR_ServiceSolicitation16BitUUID and EIR_ServiceSolicitation128BitUUID passed D5066B69 000.01s Parse EIR_ServiceData16BitUUID passed FAD81431 000.00s Basic L2CAP dissect passed 952EE7B1 000.01s Basic HCI_ACL_Hdr build & dissect passed 2FF25DCE 000.01s Complex HCI - L2CAP build passed 30734F0C 000.00s Complex HCI - L2CAP dissect passed 206C57F7 000.01s HCI - L2CAP Echo test passed 6A71BD22 000.01s HCI - L2CAP Create Channel request passed A86E9865 000.01s L2CAP Conn Answers passed 6A7A605D 000.03s EIR_Hdr - HCI_LE_Meta_Advertising_Report (single report) passed FE8DE930 000.08s EIR_Hdr - HCI_LE_Meta_Advertising_Report (duplicate reports) passed CBB97D9D 000.09s EIR_Hdr - HCI_LE_Meta_Extended_Advertising_Report passed 8AE37F5F 000.02s ATT_Hdr - misc passed 15EAADC4 000.01s ATT Read_By_Type_Response passed 62E97057 000.00s SM_Security_Request passed 1B61265D 000.00s SM_Public_Key() tests passed 3B7175FE 000.00s SM_DHKey_Check() tests passed A2E7E815 000.00s HCI_Mon - Bluetooth Monitor Pcap Header passed 04770C4D 000.00s HCI_Mon - Bluetooth Monitor HCI_Mon_New_Index passed 604BFBCC 000.00s HCI_Mon - Bluetooth Monitor HCI_Mon_Delete_Index passed CB5F00BC 000.00s HCI_Mon - Bluetooth Monitor HCI_Mon_Index_Info passed 6E0C9B0F 000.00s HCI_Mon - Bluetooth Monitor HCI_Mon_System_Note Campaign CRC=3707ABA6 in 000.62s SHA=72C8AE45C74EB01275948863E688DD3827C9094C PASSED=66 FAILED=0 ━ Loading: test/scapy/layers/bluetooth4LE.uts passed 9984EE5A 000.00s Default build passed 20EEB610 000.00s Basic dissection passed D470A3B4 000.01s BTLE_DATA build passed 9ECB5866 000.02s Longer BTLE_ADV passed A782E4AD 000.01s BTLE_DATA + EIR_ShortenedLocalName passed 5499128D 000.01s LL_CONNECTION_UPDATE_IND passed 78F80AEE 000.01s LL_CHANNEL_MAP_IND passed A9A5DC61 000.01s LL_TERMINATE_IND passed FB368406 000.01s LL_ENC_REQ passed 08337861 000.01s LL_ENC_RSP passed 48F7FD44 000.01s LL_START_ENC_REQ passed 14E88AAC 000.01s LL_START_ENC_RSP passed 3D51D732 000.01s LL_UNKNOWN_RSP passed DBE9DF2C 000.01s LL_FEATURE_REQ passed 888AA2CF 000.01s LL_FEATURE_RSP passed D102B049 000.01s LL_PAUSE_ENC_REQ passed 23A5A621 000.01s LL_PAUSE_ENC_RSP passed 6485E439 000.01s LL_VERSION_IND passed 9BB04ED5 000.01s LL_REJECT_IND passed 50577846 000.01s LL_SLAVE_FEATURE_REQ passed E47BD306 000.01s LL_CONNECTION_PARAM_REQ passed 0740BDA8 000.01s LL_CONNECTION_PARAM_RSP passed CDC0A9ED 000.01s LL_REJECT_EXT_IND passed FF3A5E4B 000.01s LL_PING_REQ passed 0D9D4823 000.01s LL_PING_RSP passed 2E009C5A 000.01s LL_LENGTH_REQ passed 13EE388C 000.01s LL_LENGTH_RSP passed FF72160E 000.01s LL_PHY_REQ passed E6D76118 000.01s LL_PHY_RSP passed 6211D420 000.17s LL_PHY_UPDATE_IND passed 9AB7FD6C 000.01s BTLE_DATA + BTLE_EMPTY_PDU passed A21263DF 000.01s BTLE_DATA + ATT_PrepareWriteReq passed F0D2F433 000.02s BTLE layers passed 8BF33286 000.01s BTLE_RF link passed 9E7FFC52 000.00s DLT_USER0 with PPI passed 0F3537E5 000.00s DLT_BLUETOOTH_LE_LL with PPI passed 00356CCF 000.00s DLT_BLUETOOTH_LE_LL without PPI Campaign CRC=740E8BA5 in 000.45s SHA=F2EEDBDADE3F1B9DE047118A37CAC8FB1F8B6AC5 PASSED=37 FAILED=0 ━ Loading: test/scapy/layers/can.uts passed 337E8646 000.01s Load module passed BF15F873 000.00s Build a packet passed E055F517 000.00s Dissect & parse passed D0813640 000.00s Check flags values passed 967F2D9F 000.01s Read PCAP file passed C1A6EB8B 000.00s Check if parsing worked: each packet has a CAN layer passed E40575B5 000.00s Check if parsing worked: no packet has a Raw or Padding layer passed 76311047 000.00s Identifiers passed EF39590C 000.00s Flags passed BC62DA16 000.00s Data length passed 23AC1A94 000.00s read PCAP of a CookedLinux/SocketCAN capture with CANFD frames passed 0756AB29 000.00s Check if parsing worked: each packet has a CANFD layer passed 29FDCD48 000.00s read PCAP of a CookedLinux/SocketCAN capture (CAN standard and extended) passed DD95CBA8 000.00s check CAN is detected over CookedLinux (each packet has both layers) passed E40575B5 000.00s Check if parsing worked: no packet has a Raw or Padding layer passed 95A2D6C1 000.00s Check byte swap for dissection passed FF99CC4C 000.00s Check byte swap-back for building passed A09B1357 000.01s Check building CAN packet with not padded data field passed 24B03B95 000.01s Check rdcandump default passed E9F17638 000.01s Check rdcandump_iterable default passed EFC00941 000.02s Check rdcandump filter passed 2F042CAE 000.01s interface not log file format passed 2F273CB6 000.01s interface not log file format filtered 1 passed E2835480 000.01s interface not log file format filtered 2 passed 23D70CAA 000.01s interface not log file format filtered 2 count 1 passed E04C11E0 000.01s interface not log file format filtered 2 count 2 passed 62BD1BB3 000.01s default reading passed B8050045 000.01s default reading passed 83C56D45 000.01s interface not log file format passed D748BFF8 000.01s Test invalid fields_desc passed 37ECFE8D 000.01s Test invalid fields_desc with ConditionalField passed FBB1EC76 000.04s Motorola byte order (Big Endian) dissect test passed 299CE32F 000.01s Motorola byte order (Big Endian) build test passed 738149B8 000.04s Motorola byte order (Big Endian) dissect test with mixed field order passed 1A9ED9BD 000.04s Motorola byte order (Big Endian) build test with mixed field order passed 8C8E3C8A 000.05s Intel byte order (Little Endian) dissect test passed 0AB215A0 000.01s Intel byte order (Little Endian) build test passed C4E18912 000.04s Intel byte order (Little Endian) build test with mixed field order passed 99ADA4DE 000.01s Intel byte order (Little Endian) build test with short package passed 090EC7E7 000.02s Packet with mixed endianness fields build test passed F41DFA9D 000.03s Muxed Packet with mixed endianness fields build test passed 764AE80B 000.03s Muxed Packet build test passed 33B8634D 000.04s SignalHeader Muxed Packet build test passed FEE5D5D7 000.05s Intel byte order (Little Endian) SignalPacket dissect test passed D06AB3A7 000.02s Intel byte order (Little Endian) short SignalPacket dissect test passed A97DBA7D 000.02s Intel byte order (Little Endian) short SignalPacket dissect test mixed field order passed 090EC7E7 000.02s Packet with mixed endianness fields build test passed D856826B 000.02s Packet with mixed endianness fields build test, mixed field order passed 155DA1AC 000.00s Packet with mixed endianness fields dissect test, mixed field order passed 94ECA0C2 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling passed 94ECA0C2 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling passed 3AA461CB 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling and offset passed AE88B971 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling and offset passed 9B2587C8 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling with signed values passed 45D3C7E8 000.02s Packet with mixed endianness fields dissect test, mixed field order and scaling with signed values passed 1D12D05F 000.04s Packet with big endianness signals passed 373FF5DF 000.04s Packet with little endianness signals passed 47174EEF 000.01s Packet with float signals build test passed B142439C 000.00s Packet with float signals dissect test passed 2B4A2A85 000.01s Packet with float signals build test 2 passed B142439C 000.00s Packet with float signals dissect test 2 passed 66AC128B 000.00s Packet with float signals randval passed 5C3B739B 000.00s Packet with float signals fuzz passed AF9620A5 000.47s Test signal fuzzing offset 1 passed BAB8DA21 000.52s Test signal fuzzing offset 2 and scaling passed CFF360AC 000.52s Test signal fuzzing offset 3 passed 1732949E 000.57s Test signal fuzzing offset 4 and scaling passed 89FE5A16 000.52s Test signal fuzzing offset 5 and scaling passed A9DC7F3D 000.25s Test FloatSignal fuzzing 1 passed 4087DAA7 000.02s Load SecOC_CANFD passed 9EBF066B 000.02s Test SecOC_CANFD build Campaign CRC=ED9DB948 in 003.76s SHA=A9847F0B41F4112BAAC85A3C2A2C5CA87FBE0772 PASSED=71 FAILED=0 ━ Loading: test/scapy/layers/dcerpc.uts passed 19626DC2 000.00s Import the DCE/RPC layer passed 3B4AF116 000.00s Little Endian IntField getfield passed EEA94D51 000.00s Little Endian IntField addfield passed CFF1CF21 000.00s Big Endian IntField getfield passed 7D9771FD 000.00s Big Endian IntField addfield passed 1091B51E 000.00s Little Endian StrField getfield passed 643EE84F 000.00s Little Endian StrField addfield passed 21C411D6 000.00s Big Endian StrField getfield passed 5F14CFE1 000.00s Big Endian StrField addfield passed F2D3D36C 000.00s Little Endian UUIDField getfield passed 1021AB20 000.00s Little Endian UUIDField addfield passed 4B64C739 000.00s Big Endian UUIDField getfield passed 9C60EDE9 000.00s Big Endian UUIDField addfield passed B0F45D0C 000.01s Dissect DCE/RPC v5 Request with Kerberos GSSAPI/RFC1964 passed AC92A165 000.00s Dissect DCE/RPC v5 Request EPM map request passed 3B692EDC 000.01s Dissect DCE/RPC v5 Bind request with NETLOGON secure channel passed 25CDDA83 000.01s Dissect DCE/RPC v5 Bind Response with NETLOGON secure channel passed AB6C37C7 000.01s Dissect DCE/RPC v5 Response with NETLOGON secure channel passed 23297174 000.01s Build and dissect DCE/RPC with auth_pad passed 77C7CC87 000.02s Build and dissect DCE/RPC with vt_trailer passed FF113B72 000.02s Dissect DCE/RPC containing two fragments: Auth3 and a Request passed C16AE844 000.00s DCE/RPC 4 default values passed 7D6FF451 000.00s DCE/RPC 4: payload length computation passed E119BDBD 000.00s DCE/RPC 4: Guess payload class fallback with no possible payload passed 2A0D9AE1 000.01s DCE/RPC 4: Guess payload class to a registered heuristic payload passed E119BDBD 000.00s DCE/RPC 4: Guess payload class fallback with possible payload classes passed 778CA3BA 000.00s DCE/RPC 4: little-endian build passed 967BCC82 000.00s DCE/RPC 4: little-endian dissection passed 2B7D1382 000.01s DCE/RPC 5 NDR: Create NDR Packet passed 002CA946 000.00s DCE/RPC 5 NDR: Check user friendliness passed BA9C44DE 000.00s DCE/RPC 5 NDR: Try building it passed 9117037F 000.01s DCE/RPC 5 NDR: Re-dissect passed 055A7DD1 000.01s DCE/RPC 5 NDR: Same thing with NDR32 passed F147051E 000.12s DCE/RPC 5 NDR: Define structs passed D2FD498F 000.02s DCE/RPC 5 NDR: Build test passed C590BA57 000.01s DCE/RPC 5 NDR: Dissect test passed 591B1959 002.43s DCE/RPC 5 NDR: Dissect packet with NDRVarStrLenField passed FB68D61C 000.02s DCE/RPC 5 NDR: Test length_is with size_is with after-the-fact size passed E980DC26 000.04s DCE/RPC 5 NDR: Test DEPORTED_CONFORMANTS with offsetted padding passed D5F8D9EE 000.01s [MS-EERR] test show() passed DD37535F 000.35s [PASSIVE] Passive sniffing of DCE/RPC packets encrypted with SPNEGOSSP[NTLMSSP] passed 514417AE 000.57s [PASSIVE] Passive sniffing of DCE/RPC packets encrypted with SPNEGOSSP[KerberosSSP] with AES passed F9A453C5 000.11s Functional: Define a MS-RPC server passed DEB39184 000.03s Functional: Define wrapper over samba's rpcclient passed D29D4A5B 000.01s Functional: Start the MS-RPC server over NCACN_IP_TCP with NTLMSSP passed 60C1A17F 000.18s Functional: Connect to it with DCERPC_Client over NCACN_IP_TCP with NTLMSSP passed 37D34B9C 000.00s Functional: Close the server passed 40A042D4 000.27s Functional: Re-Start the same MS-RPC server over NCACN_IP_TCP with KerberosSSP passed 88D5049F 000.29s Functional: Connect to it with DCERPC_Client over NCACN_IP_TCP with KerberosSSP passed 37D34B9C 000.00s Functional: Close the server passed 8E808E8C 000.00s Functional: Re-Start the same MS-RPC server over NCACN_NP passed 7BDFFF83 000.39s Functional: Connect to it with DCERPC_Client over NCACN_NP passed D1AC5C99 000.01s Functional: Re-Start the same MS-RPC server over NCACN_NP with SPNEGOSSP+NTLMSSP passed A7D9BBD0 000.41s Functional: Connect to it with DCERPC_Client over NCACN_NP with NTLMSSP passed 251B7DAA 000.26s Functional: Connect to the server with samba's rpcclient over NCACN_NP with NTLMSSP passed 37D34B9C 000.02s Functional: Close the server passed 390C3BAE 000.00s Restore conf.debug_dissector Campaign CRC=9CE86A17 in 005.73s SHA=67BD46ED60F3D7C988D700A87C496283B3563D03 PASSED=57 FAILED=0 ━ Loading: test/scapy/layers/dhcp.uts passed E40548DD 000.00s BOOTP - misc passed E3D749AC 000.01s DHCPOptionsField passed 22E16ED0 000.04s DHCP - build passed 23EF30BE 000.01s DHCP - fuzz passed 6D5D2534 000.03s DHCP - dissection passed B1A86CEC 000.00s DHCPOptions passed 4B8425B0 000.00s Check that the dhcpd alias is properly defined and documented Campaign CRC=E6CF536D in 000.09s SHA=FDF93FC9FEEC461CC3D42B047C6066A73BB30DA0 PASSED=7 FAILED=0 ━ Loading: test/scapy/layers/dhcp6.uts passed C79D9319 000.00s DUID_LLT basic instantiation passed 573F6218 000.00s DUID_LLT basic build passed 126A2667 000.00s DUID_LLT build with specific values passed 77E99B3D 000.00s DUID_LLT basic dissection passed 643AC523 000.00s DUID_LLT dissection with specific values passed CF5040FC 000.00s DUID_EN basic instantiation passed 69C01E88 000.00s DUID_EN basic build passed ACC4AB6F 000.00s DUID_EN build with specific values passed 160378C7 000.00s DUID_EN basic dissection passed 6582ABBC 000.00s DUID_EN dissection with specific values passed B1DCDB18 000.00s DUID_LL basic instantiation passed 0A128751 000.00s DUID_LL basic build passed FF3E4251 000.00s DUID_LL build with specific values passed F3F48399 000.00s DUID_LL basic dissection passed 5F3C7367 000.00s DUID_LL with specific values passed 47906855 000.00s DUID_UUID basic instantiation passed E1F2A3BA 000.00s DUID_UUID basic build passed 28EAD2EC 000.00s DUID_UUID build with specific values passed 8B0D92F1 000.00s DUID_UUID basic dissection passed BBC16669 000.00s DUID_UUID with specific values passed 7BAA0C6D 000.00s DHCP6 Opt Unknown basic instantiation passed 2B585C11 000.00s DHCP6 Opt Unknown basic build (default values) passed 35654E89 000.00s DHCP6 Opt Unknown - len computation test passed 362E31B1 000.00s DHCP6OptClientId basic instantiation passed FF2048D7 000.00s DHCP6OptClientId basic build passed EB8F837C 000.00s DHCP6OptClientId instantiation with specific values passed 90E0BE87 000.00s DHCP6OptClientId instantiation with DUID_LL passed E251CCE9 000.00s DHCP6OptClientId instantiation with DUID_LLT passed EF3404CD 000.00s DHCP6OptClientId instantiation with DUID_EN passed 770629E3 000.00s DHCP6OptClientId instantiation with specified length passed 4D7691F7 000.00s DHCP6OptClientId basic dissection passed 770629E3 000.00s DHCP6OptClientId instantiation with specified length passed 4D7691F7 000.00s DHCP6OptClientId basic dissection passed 02025171 000.00s DHCP6OptClientId dissection with specific duid value passed 4BF9A59A 000.00s DHCP6OptClientId dissection with specific DUID_LL as duid value passed 7335375D 000.00s DHCP6OptClientId dissection with specific DUID_LLT as duid value passed 96FDC4D3 000.00s DHCP6OptClientId dissection with specific DUID_EN as duid value passed 2F43A84F 000.00s DHCP6OptServerId basic instantiation passed 4C04F6BC 000.00s DHCP6OptServerId basic build passed AD40A748 000.00s DHCP6OptServerId basic build with specific values passed C8B4C371 000.00s DHCP6OptServerId instantiation with DUID_LL passed B34DB4DA 000.00s DHCP6OptServerId instantiation with DUID_LLT passed F24A4510 000.00s DHCP6OptServerId instantiation with DUID_EN passed 2ACA0AC9 000.00s DHCP6OptServerId instantiation with specified length passed 0E4510ED 000.00s DHCP6OptServerId basic dissection passed 25088EF1 000.00s DHCP6OptServerId dissection with specific duid value passed FCEA3AAD 000.00s DHCP6OptServerId dissection with specific DUID_LL as duid value passed 17596198 000.00s DHCP6OptServerId dissection with specific DUID_LLT as duid value passed 02BDF3DF 000.00s DHCP6OptServerId dissection with specific DUID_EN as duid value passed 8E5AF373 000.00s DHCP6OptIAAddress - Basic Instantiation passed 50C9AB86 000.00s DHCP6OptIAAddress - Basic Dissection passed 5C745AE2 000.00s DHCP6OptIAAddress - Instantiation with specific values passed 180DE904 000.00s DHCP6OptIAAddress - Instantiation with specific values (default optlen computation) passed 5304CAF8 000.00s DHCP6OptIAAddress - Dissection with specific values passed 77B71ADD 000.00s DHCP6OptIA_NA - Basic Instantiation passed FA5B1DB5 000.00s DHCP6OptIA_NA - Basic Dissection passed 124509AF 000.00s DHCP6OptIA_NA - Instantiation with specific values (keep automatic length computation) passed 35BE0F11 000.00s DHCP6OptIA_NA - Instantiation with specific values (forced optlen) passed 2BF7A72A 000.00s DHCP6OptIA_NA - Instantiation with a list of IA Addresses (optlen automatic computation) passed CC90E33C 000.00s DHCP6OptIA_NA - Dissection with specific values passed C90EBD9B 000.00s DHCP6OptIA_NA - Instantiation with a list of different opts: IA Address and Status Code (optlen automatic computation) passed 2049AD1A 000.00s DHCP6OptIA_TA - Basic Instantiation passed 3445CAE0 000.00s DHCP6OptIA_TA - Basic Dissection passed C518AC84 000.00s DHCP6OptIA_TA - Instantiation with specific values passed 758C776D 000.00s DHCP6OptIA_TA - Dissection with specific values passed C5715683 000.00s DHCP6OptIA_TA - Instantiation with a list of different opts: IA Address and Status Code (optlen automatic computation) passed 36705FC1 000.00s DHCP6OptOptReq - Basic Instantiation passed 74BD65BF 000.00s DHCP6OptOptReq - optlen field computation passed 1966E096 000.00s DHCP6OptOptReq - instantiation with empty list passed 4562AC37 000.00s DHCP6OptOptReq - Basic dissection passed 2CEBB2FD 000.00s DHCP6OptOptReq - Dissection with specific value passed EF01D128 000.00s DHCP6OptOptReq - repr passed 83CD3B19 000.00s DHCP6OptPref - Basic instantiation passed 9ABD2F75 000.00s DHCP6OptPref - Instantiation with specific values passed A26ADA84 000.00s DHCP6OptPref - Basic Dissection passed 5A11B8FB 000.00s DHCP6OptPref - Dissection with specific values passed F99BAE27 000.00s DHCP6OptElapsedTime - Basic Instantiation passed 3170EBDD 000.00s DHCP6OptElapsedTime - Instantiation with specific elapsedtime value passed 01D564C9 000.00s DHCP6OptElapsedTime - Basic Dissection passed A0FC2104 000.00s DHCP6OptElapsedTime - Dissection with specific values passed EF01D128 000.00s DHCP6OptElapsedTime - Repr passed 12093175 000.00s DHCP6OptServerUnicast - Basic Instantiation passed B593271B 000.00s DHCP6OptServerUnicast - Instantiation with specific values (test 1) passed AB1E0B0E 000.00s DHCP6OptServerUnicast - Instantiation with specific values (test 2) passed E68815C3 000.00s DHCP6OptServerUnicast - Dissection with default values passed 0A2A1DCB 000.00s DHCP6OptServerUnicast - Dissection with specific values (test 1) passed ABCD8B8B 000.00s DHCP6OptServerUnicast - Dissection with specific values (test 2) passed 483BB9D5 000.00s DHCP6OptStatusCode - Basic Instantiation passed 59E4DBFE 000.00s DHCP6OptStatusCode - Instantiation with specific values passed C973546A 000.00s DHCP6OptStatusCode - Automatic Length computation passed C12FEA58 000.00s DHCP6OptRapidCommit - Basic Instantiation passed 89359BEA 000.00s DHCP6OptRapidCommit - Basic Dissection passed 21E9E578 000.00s DHCP6OptUserClass - Basic Instantiation passed C728FB45 000.00s DHCP6OptUserClass - Basic Dissection passed 4FFE3CEC 000.00s DHCP6OptUserClass - Instantiation with one user class data rawucture passed 1397460A 000.00s DHCP6OptUserClass - Dissection with one user class data rawucture passed 57A1E3CB 000.00s DHCP6OptUserClass - Instantiation with two user class data rawuctures passed 1841DC70 000.00s DHCP6OptUserClass - Dissection with two user class data rawuctures passed 42297BF6 000.00s DHCP6OptVendorClass - Basic Instantiation passed 4CE36928 000.00s DHCP6OptVendorClass - Basic Dissection passed 9B354873 000.00s DHCP6OptVendorClass - Instantiation with one vendor class data rawucture passed 469486B5 000.00s DHCP6OptVendorClass - Dissection with one vendor class data rawucture passed C023DF29 000.00s DHCP6OptVendorClass - Instantiation with two vendor class data rawuctures passed 1D2D4C13 000.00s DHCP6OptVendorClass - Dissection with two vendor class data rawuctures passed 6E1B3AF2 000.00s DHCP6OptVendorSpecificInfo - Basic Instantiation passed C428A8A6 000.00s DHCP6OptVendorSpecificInfo - Basic Dissection passed F67D2ACA 000.00s DHCP6OptVendorSpecificInfo - Instantiation with specific values (one option) passed F5159739 000.00s DHCP6OptVendorSpecificInfo - Dissection with with specific values (one option) passed 3BD3252A 000.00s DHCP6OptVendorSpecificInfo - Instantiation with specific values (two options) passed D85C1FDC 000.00s DHCP6OptVendorSpecificInfo - Dissection with with specific values (two options) passed AE0C4328 000.00s DHCP6OptIfaceId - Basic Instantiation passed 54DD9335 000.00s DHCP6OptIfaceId - Basic Dissection passed 9500371E 000.00s DHCP6OptIfaceId - Instantiation with specific value passed 692CCF89 000.00s DHCP6OptIfaceId - Dissection with specific value passed FE4BFB1C 000.00s DHCP6OptReconfMsg - Basic Instantiation passed 97DE5AA0 000.00s DHCP6OptReconfMsg - Basic Dissection passed 63C038DE 000.00s DHCP6OptReconfMsg - Instantiation with specific values passed 223A58FB 000.00s DHCP6OptReconfMsg - Dissection with specific values passed 7FE87B62 000.00s DHCP6OptReconfAccept - Basic Instantiation passed CCE32A09 000.00s DHCP6OptReconfAccept - Basic Dissection passed 6884B85A 000.00s DHCP6OptReconfAccept - Instantiation with specific values passed 7E254112 000.00s DHCP6OptReconfAccept - Dssection with specific values passed 6A0FEC94 000.00s DHCP6OptSIPDomains - Basic Instantiation passed 5C613FC4 000.00s DHCP6OptSIPDomains - Basic Dissection passed 222818B4 000.00s DHCP6OptSIPDomains - Instantiation with one domain passed 1A45951B 000.00s DHCP6OptSIPDomains - Dissection with one domain passed 1B52FA95 000.00s DHCP6OptSIPDomains - Instantiation with two domains passed F9C93597 000.00s DHCP6OptSIPDomains - Dissection with two domains passed AF257E77 000.00s DHCP6OptSIPDomains - Enforcing only one dot at end of domain passed 9E523117 000.00s DHCP6OptSIPServers - Basic Instantiation passed 759AFEC2 000.00s DHCP6OptSIPServers - Basic Dissection passed EF893C3F 000.00s DHCP6OptSIPServers - Instantiation with specific values (1 address) passed 8F637FA2 000.00s DHCP6OptSIPServers - Dissection with specific values (1 address) passed 63D24C8F 000.00s DHCP6OptSIPServers - Instantiation with specific values (2 addresses) passed CDDCF6B2 000.00s DHCP6OptSIPServers - Dissection with specific values (2 addresses) passed A2AE85FD 000.00s DHCP6OptDNSServers - Basic Instantiation passed 58D8E580 000.00s DHCP6OptDNSServers - Basic Dissection passed A9444EC5 000.00s DHCP6OptDNSServers - Instantiation with specific values (1 address) passed BC746583 000.00s DHCP6OptDNSServers - Dissection with specific values (1 address) passed ED35320B 000.00s DHCP6OptDNSServers - Instantiation with specific values (2 addresses) passed 952E3E66 000.00s DHCP6OptDNSServers - Dissection with specific values (2 addresses) passed 4CCFB8F0 000.00s DHCP6OptDNSDomains - Basic Instantiation passed E1F53152 000.00s DHCP6OptDNSDomains - Basic Dissection passed 17CB7DD8 000.00s DHCP6OptDNSDomains - Instantiation with specific values (1 domain) passed 5535AD9E 000.00s DHCP6OptDNSDomains - Dissection with specific values (1 domain) passed 4AD4CE63 000.00s DHCP6OptDNSDomains - Instantiation with specific values (2 domains) passed 9FB29EBC 000.00s DHCP6OptDNSDomains - Dissection with specific values (2 domains) passed 6FC64603 000.00s DHCP6OptIAPrefix - Basic Instantiation passed 8BC01797 000.00s DHCP6OptIAPrefix - Basic Dissection passed 890662B7 000.00s DHCP6OptIAPrefix - Instantiation with specific values passed 3CA899EB 000.00s DHCP6OptIAPrefix - Instantiation with specific values (default optlen computation) passed 7F436536 000.00s DHCP6OptIAPrefix - Dissection with specific values passed B851ABE7 000.00s DHCP6OptIA_PD - Basic Instantiation passed 1ED94E0C 000.00s DHCP6OptIA_PD - Basic Dissection passed 8CE67D52 000.00s DHCP6OptIA_PD - Instantiation with specific values (keep automatic length computation) passed 67D8D9BC 000.00s DHCP6OptIA_PD - Instantiation with specific values (forced optlen) passed 4065D7F8 000.00s DHCP6OptIA_PD - Instantiation with a list of IA Prefixes (optlen automatic computation) passed 1D7BEA97 000.00s DHCP6OptIA_PD - Dissection with specific values passed B4D0102A 000.00s DHCP6OptIA_PD - Instantiation with a list of different opts: IA Prefix and Status Code (optlen automatic computation) passed 7FEABB0F 000.00s DHCP6OptNISServers - Basic Instantiation passed 2D3E55AB 000.00s DHCP6OptNISServers - Basic Dissection passed 8A415BEB 000.00s DHCP6OptNISServers - Instantiation with specific values (1 address) passed A2FEE027 000.00s DHCP6OptNISServers - Dissection with specific values (1 address) passed 7219CF98 000.00s DHCP6OptNISServers - Instantiation with specific values (2 addresses) passed 7F300088 000.00s DHCP6OptNISServers - Dissection with specific values (2 addresses) passed 9F10D357 000.00s DHCP6OptNISPServers - Basic Instantiation passed 7C52E80C 000.00s DHCP6OptNISPServers - Basic Dissection passed DB9FD9BA 000.00s DHCP6OptNISPServers - Instantiation with specific values (1 address) passed 132B557E 000.00s DHCP6OptNISPServers - Dissection with specific values (1 address) passed 0B2A759C 000.00s DHCP6OptNISPServers - Instantiation with specific values (2 addresses) passed 0B95A772 000.00s DHCP6OptNISPServers - Dissection with specific values (2 addresses) passed 35E92EE5 000.00s DHCP6OptNISDomain - Basic Instantiation passed FC357773 000.00s DHCP6OptNISDomain - Basic Dissection passed 771D2456 000.00s DHCP6OptNISDomain - Instantiation with one domain name passed B60B8275 000.00s DHCP6OptNISDomain - Dissection with one domain name passed E3058EF2 000.00s DHCP6OptNISDomain - Instantiation with one domain with trailing dot passed E7939353 000.00s DHCP6OptNISPDomain - Basic Instantiation passed EEDA00A7 000.00s DHCP6OptNISPDomain - Basic Dissection passed 83274083 000.00s DHCP6OptNISPDomain - Instantiation with one domain name passed 2E63DD48 000.00s DHCP6OptNISPDomain - Dissection with one domain name passed 521B902B 000.00s DHCP6OptNISPDomain - Instantiation with one domain with trailing dot passed 76F9E6A2 000.00s DHCP6OptSNTPServers - Basic Instantiation passed A82BAC3C 000.00s DHCP6OptSNTPServers - Basic Dissection passed C6B08BC2 000.00s DHCP6OptSNTPServers - Instantiation with specific values (1 address) passed 1DA0E113 000.00s DHCP6OptSNTPServers - Dissection with specific values (1 address) passed E6063C82 000.00s DHCP6OptSNTPServers - Instantiation with specific values (2 addresses) passed 1A9361CE 000.00s DHCP6OptSNTPServers - Dissection with specific values (2 addresses) passed 32E1CE95 000.00s DHCP6OptInfoRefreshTime - Basic Instantiation passed DB05D6F2 000.00s DHCP6OptInfoRefreshTime - Basic Dissction passed 0C267524 000.00s DHCP6OptInfoRefreshTime - Instantiation with specific values passed 4B176846 000.00s DHCP6OptBCMCSServers - Basic Instantiation passed DB90931E 000.00s DHCP6OptBCMCSServers - Basic Dissection passed D169C53A 000.00s DHCP6OptBCMCSServers - Instantiation with specific values (1 address) passed 5E8A233D 000.00s DHCP6OptBCMCSServers - Dissection with specific values (1 address) passed 8C4433DB 000.00s DHCP6OptBCMCSServers - Instantiation with specific values (2 addresses) passed B47B1DC0 000.00s DHCP6OptBCMCSServers - Dissection with specific values (2 addresses) passed 6379536D 000.00s DHCP6OptBCMCSDomains - Basic Instantiation passed E3180DCC 000.00s DHCP6OptBCMCSDomains - Basic Dissection passed 3F135354 000.00s DHCP6OptBCMCSDomains - Instantiation with specific values (1 domain) passed FF72EB2B 000.00s DHCP6OptBCMCSDomains - Dissection with specific values (1 domain) passed 6D92A894 000.00s DHCP6OptBCMCSDomains - Instantiation with specific values (2 domains) passed 477EE63F 000.00s DHCP6OptBCMCSDomains - Dissection with specific values (2 domains) passed 8C71EC2F 000.00s DHCP6OptRemoteID - Basic Instantiation passed 6B9A6137 000.00s DHCP6OptRemoteID - Basic Dissection passed B03424CE 000.00s DHCP6OptRemoteID - Instantiation with specific values passed D46CC6A3 000.00s DHCP6OptRemoteID - Dissection with specific values passed DCD7B680 000.00s DHCP6OptSubscriberID - Basic Instantiation passed 139DE428 000.00s DHCP6OptSubscriberID - Basic Dissection passed CD2EC53A 000.00s DHCP6OptSubscriberID - Instantiation with specific values passed A13CA093 000.00s DHCP6OptSubscriberID - Dissection with specific values passed 3F74488E 000.00s DHCP6OptClientFQDN - Basic Instantiation passed A84B7210 000.00s DHCP6OptClientFQDN - Basic Dissection passed FDF061CC 000.00s DHCP6OptClientFQDN - Instantiation with various flags combinations passed 1787A293 000.00s DHCP6OptClientFQDN - Instantiation with one fqdn passed 3E86FB9D 000.00s DHCP6OptClientFQDN - Dissection with one fqdn passed 6E81346C 000.00s DHCP6OptPanaAuthAgent - Basic Instantiation passed 66B70519 000.00s DHCP6OptPanaAuthAgent - Basic Dissection passed 270758CB 000.00s DHCP6OptPanaAuthAgent - Instantiation with specific values (1 address) passed E7473B76 000.00s DHCP6OptPanaAuthAgent - Dissection with specific values (1 address) passed EECF4952 000.00s DHCP6OptPanaAuthAgent - Instantiation with specific values (2 addresses) passed 49DD3BD5 000.00s DHCP6OptPanaAuthAgent - Dissection with specific values (2 addresses) passed 83EC1F66 000.00s DHCP6OptNewPOSIXTimeZone - Basic Instantiation passed 1A01D8C2 000.00s DHCP6OptNewPOSIXTimeZone - Basic Dissection passed 32525614 000.00s DHCP6OptNewPOSIXTimeZone - Instantiation with specific values passed B3E5F651 000.00s DHCP6OptNewPOSIXTimeZone - Dissection with specific values passed F16DE64E 000.00s DHCP6OptNewTZDBTimeZone - Basic Instantiation passed 35770912 000.00s DHCP6OptNewTZDBTimeZone - Basic Dissection passed 91CBB7C3 000.00s DHCP6OptNewTZDBTimeZone - Instantiation with specific values passed 68A1BDD3 000.00s DHCP6OptNewTZDBTimeZone - Dissection with specific values passed C1BBFC50 000.00s DHCP6OptRelayAgentERO - Basic Instantiation passed D87CE796 000.00s DHCP6OptRelayAgentERO - optlen field computation passed 55C856B2 000.00s DHCP6OptRelayAgentERO - instantiation with empty list passed 871F6DE1 000.00s DHCP6OptRelayAgentERO - Basic dissection passed 5B368CD2 000.00s DHCP6OptRelayAgentERO - Dissection with specific value passed 3B63A4EA 000.00s DHCP6OptLQClientLink - Basic Instantiation passed A8B0154E 000.00s DHCP6OptLQClientLink - Basic Dissection passed 2549610B 000.00s DHCP6OptLQClientLink - Instantiation with specific values (1 address) passed EBE32745 000.00s DHCP6OptLQClientLink - Dissection with specific values (1 address) passed 8B1EA20B 000.00s DHCP6OptLQClientLink - Instantiation with specific values (2 addresses) passed A29C5ADB 000.00s DHCP6OptLQClientLink - Dissection with specific values (2 addresses) passed BD11CB00 000.00s DHCP6NTPSubOptSrvAddr - Basic dissection/instantiation passed D9511686 000.00s DHCP6NTPSubOptSrvAddr - Dissection/instantiation with specific values passed 7873EBF2 000.00s DHCP6NTPSubOptMCAddr - Basic dissection/instantiation passed 74306B72 000.00s DHCP6NTPSubOptMCAddr - Dissection/instantiation with specific values passed B2841678 000.00s DHCP6NTPSubOptSrvFQDN - Basic dissection/instantiation passed 383CF431 000.00s DHCP6NTPSubOptSrvFQDN - Dissection/instantiation with specific values passed 487CB1A2 000.00s DHCP6OptNTPServer - Basic dissection/instantiation passed 340DF634 000.01s DHCP6OptNTPServer - Dissection/instantiation with specific values passed BBC77F5A 000.00s DHCP6OptBootFileUrl - Basic Instantiation passed BFB16E14 000.00s DHCP6OptBootFileUrl - Basic Dissection passed B7F7EE32 000.00s DHCP6OptBootFileUrl - Instantiation with specific values passed 26B38B0D 000.00s DHCP6OptBootFileUrl - Dissection with specific values passed 76E07503 000.00s DHCP6OptClientArchType - Basic Instantiation passed D35B9876 000.00s DHCP6OptClientArchType - Basic Dissection passed 62F5E414 000.00s DHCP6OptClientArchType - Instantiation with specific value as just int passed 5D2F43DD 000.00s DHCP6OptClientArchType - Instantiation with specific value as single item list of int passed B12768B0 000.00s DHCP6OptClientArchType - Dissection with specific 1 value list passed C97B6CE1 000.00s DHCP6OptClientArchType - Instantiation with specific value as 2 item list of int passed C5832B1C 000.00s DHCP6OptClientArchType - Dissection with specific 2 values list passed ADEB6593 000.00s DHCP6OptClientNetworkInterId - Basic Instantiation passed B7D0A9A5 000.00s DHCP6OptClientNetworkInterId - Basic Dissection passed A598FE2F 000.00s DHCP6OptClientNetworkInterId - Instantiation with specific values passed 3D6C910C 000.00s DHCP6OptClientNetworkInterId - Dissection with specific values passed BDDB4B3E 000.00s DHCP6OptERPDomain - Basic Instantiation passed 1475A5B4 000.00s DHCP6OptERPDomain - Basic Dissection passed 39AAB580 000.00s DHCP6OptERPDomain - Instantiation with specific values (1 domain) passed E591D50C 000.00s DHCP6OptERPDomain - Dissection with specific values (1 domain) passed 79350BF2 000.00s DHCP6OptERPDomain - Instantiation with specific values (2 domains) passed 50E6BDC7 000.00s DHCP6OptERPDomain - Dissection with specific values (2 domains) passed 7F12A31A 000.00s DHCP6OptRelaySuppliedOpt - Basic Instantiation passed BB870D4D 000.00s DHCP6OptRelaySuppliedOpt - Basic Dissection passed 9D40CF7E 000.00s DHCP6OptRelaySuppliedOpt - Instantiation with specific values passed EDA0BF0C 000.00s DHCP6OptRelaySuppliedOpt - Dissection with specific values passed E03ECA34 000.06s DHCP6OptRelaySuppliedOpt - deeply nested DHCP6OptRelaySuppliedOpt passed 0FE079FB 000.00s Basic build & dissect passed 53DDC15C 000.01s Basic build & dissect passed 38C2E33C 000.00s Basic build & dissect passed A706ABE7 000.00s Basic build & dissect passed 5879E6B9 000.00s DHCP6OptAddrRegEnable - Basic Instantiation passed C25167C6 000.00s DHCP6OptAddrRegEnable - Basic Dissection passed 05ECD4D8 000.00s DHCP6_Solicit - Basic Instantiation passed ACA2C22D 000.00s DHCP6_Solicit - Basic Dissection passed B2FBFD0B 000.00s DHCP6_Solicit - Basic test of DHCP6_solicit.hashret() passed 78A6A805 000.00s DHCP6_Solicit - Test of DHCP6_solicit.hashret() with specific values passed 4037380B 000.00s DHCP6_Solicit - UDP ports overload passed BEA9393A 000.00s DHCP6_Solicit - Dispatch based on UDP port passed 49F7AC73 000.00s DHCP6_Advertise - Basic Instantiation passed BA6768A7 000.00s DHCP6_Advertise - Basic test of DHCP6_solicit.hashret() passed C5AEA977 000.00s DHCP6_Advertise - Test of DHCP6_Advertise.hashret() with specific values passed DBEE0DCC 000.00s DHCP6_Advertise - Basic test of answers() with solicit message passed F7C12A80 000.00s DHCP6_Advertise - Test of answers() with solicit message passed 5A5E5880 000.00s DHCP6_Advertise - UDP ports overload passed 987B8472 000.00s DHCP6_Request - Basic Instantiation passed D7F0076D 000.00s DHCP6_Request - Basic Dissection passed FE7E857E 000.00s DHCP6_Request - UDP ports overload passed 4698F0F7 000.00s DHCP6_Confirm - Basic Instantiation passed B145C8FA 000.00s DHCP6_Confirm - Basic Dissection passed 94A6B80F 000.00s DHCP6_Confirm - UDP ports overload passed 1BCB0635 000.00s DHCP6_Renew - Basic Instantiation passed 8CD9AFA1 000.00s DHCP6_Renew - Basic Dissection passed CD9AC729 000.00s DHCP6_Renew - UDP ports overload passed A4C424A0 000.00s DHCP6_Rebind - Basic Instantiation passed 3978B36A 000.00s DHCP6_Rebind - Basic Dissection passed 2A50EFE4 000.00s DHCP6_Rebind - UDP ports overload passed 3111C41E 000.00s DHCP6_Reply - Basic Instantiation passed 7CB6CA69 000.00s DHCP6_Reply - Basic Dissection passed DB5DDF19 000.00s DHCP6_Reply - UDP ports overload passed C7904878 000.00s DHCP6_Reply - Answers passed 6C00D155 000.00s DHCP6_Release - Basic Instantiation passed 30BC1D29 000.00s DHCP6_Release - Basic Dissection passed 80229F74 000.00s DHCP6_Release - UDP ports overload passed 7A3B85FE 000.00s DHCP6_Decline - Basic Instantiation passed B0CB486C 000.00s DHCP6_Confirm - Basic Dissection passed A3A8FDD0 000.00s DHCP6_Decline - UDP ports overload passed 5B7F3836 000.00s DHCP6_Reconf - Basic Instantiation passed 81C7B54D 000.00s DHCP6_Reconf - Basic Dissection passed 31A261BB 000.00s DHCP6_Reconf - UDP ports overload passed 3373BDBE 000.00s DHCP6_InfoRequest - Basic Instantiation passed 547C2E0D 000.00s DHCP6_InfoRequest - Basic Dissection passed 9DD90FD6 000.00s DHCP6_InfoRequest - UDP ports overload passed 2C4775D8 000.00s DHCP6_RelayForward - Basic Instantiation passed 18D6F270 000.00s DHCP6_RelayForward - Basic Dissection passed 897EEC87 000.00s DHCP6_RelayForward - Dissection with options passed DB68DA15 000.00s DHCP6_RelayForward - Advanced dissection passed 9508CE5B 000.00s DHCP6OptRelayMsg - Basic Instantiation passed 911A600A 000.00s DHCP6OptRelayMsg - Basic Dissection passed F14D078C 000.00s DHCP6OptRelayMsg - Embedded DHCP6 packet Instantiation passed 0ACE3538 000.00s DHCP6OptRelayMsg - Embedded DHCP6 packet Dissection passed 3B907575 000.00s DHCP6_RelayReply - Basic Instantiation passed 607A1E6F 000.00s DHCP6_RelayReply - Basic Dissection passed 8766CA40 000.00s DHCP6_AddrRegInform - Basic Instantiation passed 564AA575 000.00s DHCP6_AddrRegInform - Basic Dissection passed 7C5F3C41 000.00s DHCP6_AddrRegInform - Basic test of DHCP6_addrreginform.hashret() passed 13A73C2F 000.00s DHCP6_AddrRegInform - Test of DHCP6_addrreginform.hashret() with specific values passed A58C1F39 000.00s DHCP6_AddrRegInform - UDP ports overload passed 89B13ABA 000.00s DHCP6_AddrRegInform - Dispatch based on UDP port passed 69ADA7EF 000.00s DHCP6_AddrRegReply - Basic Instantiation passed 07757FB8 000.00s DHCP6_AddrRegReply - Basic Dissection passed 766C3E7E 000.00s DHCP6_AddrRegReply - Basic test of DHCP6_addrregreply.hashret() passed 793F277E 000.00s DHCP6_AddrRegReply - Test of DHCP6_addrregreply.hashret() with specific values passed FBC03E38 000.00s DHCP6_AddrRegReply - UDP ports overload passed D503A174 000.00s DHCP6_AddrRegReply - Dispatch based on UDP port Campaign CRC=D90358C3 in 000.63s SHA=C1B977BD6D90A0ED6930A62DE14A4104D721D3F2 PASSED=342 FAILED=0 ━ Loading: test/scapy/layers/dns.uts passed 61E076CE 000.05s DNS request using dns_resolve passed 7DD097C3 000.00s DNS labels passed A454408D 000.02s DNS frame with advanced decompression passed C7DDC889 000.02s DNS frame with DNSRRSRV passed 600A6DDF 000.01s DNS frame with decompression hidden args passed 91197942 000.01s Other compressed DNS passed 58D32DA9 000.02s DNS advanced building passed 281A63F6 000.03s Basic DNS Compression passed 1C63E8EE 000.01s DNS cache clearance on sub change passed B258DD46 000.02s DNS frames with MX records passed E0B64605 000.01s DNS frame with typebitmaps passed AE6F56D2 000.00s Advanced dns_get_str tests passed 6946A990 000.00s Decompression loop in dns_get_str passed 877CC182 000.00s Prematured end in dns_get_str passed 5B7D6337 000.01s DNS record type 13 (HINFO) passed 3326492F 000.00s DNS record type 15 (MX) passed 7022E4BE 000.02s DNS record type 16 (TXT) passed 7058BE42 000.00s DNS record type 35 (NAPTR) passed 4ACE55C2 000.02s DNS record type 39 (DNAME) passed 3A991B53 000.04s DNS record type 64, 65 (SVCB, HTTPS) passed 632A0BC8 000.03s DNS - Malformed DNS over TCP message passed 02289E62 000.02s DNS - dns_compress on decompressed packet passed B58AF690 000.01s DNS - dns_compress on close indexes passed 1E207F7A 000.04s DNS - dns_compress with 1-length strings passed 80EEE161 000.01s DNS - dns_compress with pointer b'\xc0.' passed 7B48D445 000.00s DNS - dns_encode edge cases passed 6683AEB1 000.00s DNS - simple request passed 7440EE2E 000.76s DNS - OOM test passed 9B97F8D3 000.02s DNS - Backward compatibility: keep deprecated behavior passed C2EA6D37 000.00s DNS - command passed 7B3D64D1 000.00s DNS - iter through DNSStrFields Campaign CRC=5E43E8BC in 001.21s SHA=17CB4BB83C063DED2E8B2C7D4362357860D642B1 PASSED=31 FAILED=0 ━ Loading: test/scapy/layers/dns_dnssec.uts passed 01F134E9 000.00s example from RFC 4034 passed 95B7A220 000.00s [0] passed 7AF543C7 000.00s [0,1,2,3,4,5,6,7] passed E6640B6D 000.00s [256,512,4096,36864] passed A63AF85B 000.00s [65535] passed D0647AEE 000.00s example from RFC 4034 passed 0818D1B5 000.00s [0] passed 6B6F484A 000.00s [0,1,2,3,4,5,6,7] passed C34A7B08 000.00s [256,512,4096,36864] passed BEACAC75 000.00s [65535] passed EB8F00DF 000.00s DNSRRNSEC(), basic instantiation passed 85F328F1 000.00s DNSRRRNSEC(), check parameters passed 06D8E113 000.00s DNSRRNSEC3(), basic instantiation passed 83835EFE 000.00s DNSRRRNSEC3(), check parameters passed AB7DB468 000.00s DNSRRNSEC3PARAM(), basic instantiation passed 7A5BA656 000.00s DNSRRRNSEC3PARAM(), check parameters passed 79BF520A 000.00s DNSRRRSIG(), basic instantiation passed B328C932 000.00s DNSRRRSIG(), check parameters passed E86741B7 000.00s DNSRRRSIG(), dissection passed 98DDC0CB 000.00s DNSRRDNSKEY(), basic instantiation passed CBB44857 000.00s DNSRRDNSKEY(), check parameters passed EEE416B6 000.00s DNSRRDNSKEY(), dissection passed 2CF66A6D 000.00s DNSRRDS() and DNSRRDLV(), basic instancaition passed CCA6DC1B 000.00s DNSRRDS(), check parameters passed B94145A9 000.00s DNSRR(type="TXT") instantiation passed E22D54A9 000.00s Build DNSRR passed 4B145851 000.00s DNSRRR(), check parameters passed 176E770E 000.00s DNSRRTSIG basic instantiation passed 5730FB06 000.00s DNSRRTSIG(), check parameters passed B6EA4108 000.00s TimeField methods Campaign CRC=1DA82BA6 in 000.06s SHA=155D22714D3F9FAA9CA1385075DA95058D481041 PASSED=30 FAILED=0 ━ Loading: test/scapy/layers/dns_edns0.uts passed 41DCEAAC 000.00s EDNS0TLV(), basic instantiation passed 1715585A 000.00s EDNS0TLV(), check parameters passed 4D78447D 000.00s EDNS0TLV(), check computed optlen passed 50A50DC2 000.00s EDNS0TLV(), dissection passed 5F5E2642 000.00s DNSRROPT(), basic instantiation passed 89FFB862 000.00s DNSRROPT(), check parameters passed 8FBAF2A9 000.00s DNSRROPT() & EDN0TLV(), check parameters passed 2BAF6684 000.00s DNSRROP(), dissection passed A11CE60B 000.00s EDNS-PING - basic instantiation passed 50F22D72 000.00s EDNS-COOKIE - basic instantiation passed A378306E 000.00s NSID- basic instantiation passed 247DAD24 000.01s Basic instantiation & dissection passed AD2D5CCB 000.01s Basic instantiation & dissection passed 4C6F12CD 000.01s Basic instantiation & dissection passed 1F5BED34 000.01s Basic instantiation & dissection passed D6D5E002 000.01s Basic instantiation & dissection passed 937CFBC7 000.05s Basic instantiation & dissection Campaign CRC=D0B75F28 in 000.11s SHA=204E2717F48C9E1AB6B85DD10F090864F761C427 PASSED=17 FAILED=0 ━ Loading: test/scapy/layers/dot11.uts passed 7232562B 000.01s 802.11 - misc passed 7D1DB272 000.00s Dot11 - build passed 26213C71 000.01s Dot11 - dissection passed 92B10465 000.01s Dot11QoS - build passed F133DC56 000.01s Dot11 - binary in SSID passed C9A318DA 000.00s Dot11QoS - dissection passed 899846BF 000.00s Dot11 - answers passed 8C5E89D2 000.00s Dot11 - misc passed A7A517D4 000.01s Dot11 - type 1 subtype 4, 5, 6 passed 76EE9F2C 000.01s Multiple Dot11Elt layers passed CB43C4CC 000.01s Dot11WEP - build passed A30D532E 000.00s Dot11WEP - dissect passed 331B5870 000.01s Dot11TKIP - dissection passed C580C6A2 000.01s Dot11CCMP - dissection passed 9184A24C 000.02s Dot11 - answers passed 727C1186 000.03s Dot11Beacon network_stats() passed A9942AFF 000.04s Dot11EltCountry dissection passed 257388B5 000.00s RSNCipherSuite passed DF857CAD 000.00s AKMSuite passed AB60021B 000.00s PMKIDListPacket passed 15C94D9C 000.04s Dot11EltRSN passed B5747628 000.01s Dot11EltMicrosoftWPA passed 0AAD6CC4 000.00s Dot11EltVendorSpecific passed 1B4BA993 000.01s Beacon with RSN IE passed FD604782 000.01s Other Beacon with RSN IE passed 6629BBA9 000.01s Beacon with Microsoft WPA IE passed CED7778E 000.03s HT Capabilities passed 1D067C5A 000.02s HT Capabilities with fuzzed values passed 0C2D8919 000.01s RadioTap - MCS weird padding passed EC25B047 000.01s RadioTap MCS passed 25DA5D74 000.03s RadioTap ts, HE, HE-MU, LSIG passed 6699C361 000.01s Reassociation request passed 39BC1BA4 000.00s Backward compatibility of Dot11Elt passed 766077DC 000.00s Dot11FCS parent matching passed 05126D7A 000.01s Dot11FCS - test FCS with FCSField passed EA560CD5 000.01s Dot11FCS computation passed 73630092 000.01s WEP tests passed E13623A6 000.02s RadioTap - dissection & build passed BB29AD86 000.00s RadioTap Big-Small endian dissection passed 3806F42D 000.01s RadioTap MCS dissection passed 74C25A1B 000.01s RadioTap RX/TX Flags dissection passed BB589A68 000.01s RadioTap, other fields passed 5651AA7E 000.01s RadioTap - Dissection - guess_payload_class() test passed 820C6AFF 000.02s RadioTap - Dissection with Extended presence mask passed DCC54F08 000.01s RadioTap - Build with Extended presence mask passed FABBE3AC 000.02s RadioTap - dissect & build TLVs passed 453205F1 000.01s fuzz() calls for Dot11Elt() passed FD9379A5 000.00s PMKIDListPacket - Check computation of nb_pmkids passed C797C178 000.05s Dot11EltRSN - Check computation of nb_pairwise_cipher_suites and nb_akm_suites passed 5B830B66 000.03s Dot11EltMicrosoftWPA - Check computation of nb_pairwise_cipher_suites and nb_akm_suites passed 415F8E34 000.02s Dot11BSSTMRequest - dissection passed BC84AE9B 000.02s Dot11BSSTMResponse - dissection passed F0B95F2B 000.00s Dot11Ack passed 8677E748 000.01s Dot11CSA passed 952B46DE 000.02s Dot11OBSS passed 6FB08FA4 000.03s Dot11VHTOperation passed 77773153 000.00s Dot11EltVHTOperation in isolation passed D7C0704D 000.00s Dot11EltOBSS in isolation passed DF16804A 000.00s Dot11EltCSA in isolation passed CE2B9E03 000.01s Dot11S1GBeacon Campaign CRC=2537DC85 in 000.76s SHA=35AF186F4D76A89EB340E8EE28ACA279836DCA76 PASSED=60 FAILED=0 ━ Loading: test/scapy/layers/dot15d4.uts passed 02A90162 000.05s Dot15D4 layers passed 6F6DE6FD 000.00s Dot15d4FCS parent matching passed E6F99953 000.01s Dot15d4FCS - Beacon (without pending addresses) passed A0A5F80D 000.01s Dot15d4FCS - Beacon (with pending addresses) passed 87BAD503 000.01s Dot15d4FCS - Coordinator Realignment (without the channel page) passed FFEF437E 000.01s Dot15d4FCS - Coordinator Realignment (with the channel page) passed E42C06AC 000.00s Set SixLoWPAN passed 102CC8AF 000.01s SixLoWPAN layers passed 0719EC8F 000.00s Default dissection passed A0F43B4C 000.00s Frag second dissection passed 1E2ADD41 000.02s LoWPAN_IPHC dissections passed E91D09A7 000.01s LoWPAN_IPHC - M=1, DAC=1, DAM=0 passed 45DAC9F2 000.01s LoWPAN_NHC - NHC_UDP passed 7ED5CECB 000.02s LoWPAN_NHC - compute UDP NHC_UDP passed 53D1B570 000.01s LoWPAN_NHC - NHC_IPv6Ext passed ED77A2DA 000.02s LoWPAN_HC1 dissection & build passed F6763E0E 000.03s LoWPAN_HC1 build from scratch passed E73CE9DE 000.04s Advanced packets - dissection & FCS computation passed F62E82C6 000.00s Dot15d4AuxSecurityHeader - build & dissect passed 0CA0C1B8 000.02s Fragmentate packet & defragmentate passed 00000000 000.00s Mesh Header. passed 944B4C7A 000.00s SixLoWPAN - Advanced 1 passed 9415FC7C 000.00s SixLoWPAN - Advanced 2 passed 25C7B580 000.04s SixLoWPAN - Advanced 3 passed B51755DE 000.01s SixLoWPAN - Advanced 4 - SAM=3/SAC=0 decompression passed F96673AB 000.01s SixLoWPAN - Using ICMP passed 8B03A86B 000.04s LoWPAN_IPHC - Extracted packet passed 788652DA 000.04s LoWPAN_IPHC - Extracted packet 2 passed FDA7F30B 000.01s SixLoWPAN - Check Traffic Class and Flow Label when TF=0 passed CAC867F0 000.01s SixLoWPAN - Check Traffic Class and Flow Label when TF=1 passed 57EFE8B6 000.01s SixLoWPAN - Check Traffic Class and Flow Label when TF=2 passed 072CF461 000.04s SixLoWPAN - Checking the Hop Limit value in the IPv6 packet decompressed passed 7E3BCADD 000.01s SixLoWPAN - Check Source Address passed 62040B9E 000.01s SixLoWPAN over Ethernet passed 9C127224 000.02s Compressed SixLoWPAN - real packets with ZEP2 passed 3814A8F3 000.03s SixLoWPAN - Using ETH passed 1448B91E 000.02s SixLoWPAN - Using ETH 2 passed 7D4C31B6 000.03s SixLoWPAN - Using ETH 3 passed EB847AC1 000.00s Set zigbee passed C6026C51 000.01s ZigbeeNWKStub - ZigbeeNWK dispatch_hook passed 8E22AE0D 000.01s Zigbee - ZCLGeneralReadAttributesResponse passed 7C78C9E6 000.01s Zigbee - ZigbeeAppDataPayload passed BC86B4AF 000.07s Zigbee - advanced dissection passed F6A5B810 000.01s Zigbee - skke_1 transport key passed 26CF1774 000.01s Zigbee - Link Status passed A0FBF41E 000.00s Zigbee - Network Report passed F75E85D2 000.00s Zigbee - End Device Timeout Request passed B26A7844 000.00s Zigbee - End Device Timeout Response passed 6EE5003C 000.00s Zigbee - Transport Key passed F905A9D3 000.00s Zigbee - Request Key passed 950EECCE 000.00s Zigbee - Tunnel passed C6D4F8D9 000.00s Zigbee - Verify Key passed 5CBCDD40 000.00s Zigbee - Confirm Key passed CA622A7A 000.00s Zigbee - APS acknowledgment (with the Acknowledgment Format enabled) passed 9581C79B 000.01s Zigbee - APS acknowledgment (with the Acknowledgment Format disabled) passed 04D8D369 000.01s Zigbee - ZDP command passed F0F15001 000.01s Zigbee - ZDP command: Device_annce passed 33B4CFEF 000.01s Zigbee - ZCL General command: Read Attributes passed 4B07B502 000.00s Zigbee - ZCL General command: Read Attributes Response passed 8E1F9454 000.00s Zigbee - ZCL IAS Zone command: Zone Enroll Response Campaign CRC=187DACC2 in 000.82s SHA=181BA32B8C6944F112A4F989303C2EB8EB3074D4 PASSED=60 FAILED=0 ━ Loading: test/scapy/layers/eap.uts passed 5259CA59 000.00s EAPOL - Basic Instantiation passed D337081E 000.00s EAPOL - Instantiation with specific values passed 465FDAD8 000.00s EAPOL - Dissection (1) passed 89D468C8 000.00s EAPOL - Dissection (2) passed FA7DF1D6 000.00s EAPOL - Dissection (3) passed 18748F1F 000.00s EAPOL - Dissection (4) passed C75183A7 000.00s EAPOL - Dissection (5) passed 1B0AF81F 000.00s EAPOL - Dissection (6) passed FFF9C884 000.01s EAPOK-Key - over 802.11 - Dissection passed EEE1ECF6 000.01s EAPOL-Key - Key 1 - Dissection (1) passed 607292E6 000.01s EAPOL_KEY - Key 2 - Dissection (2) passed 8736A48F 000.01s EAPOL_KEY - Key 3 - Dissection (3) passed 4CF90687 000.01s EAPOL_KEY - Key 4 - Dissection (4) passed 3635E96C 000.01s EAPOL-MKA - With Basic parameter set - Dissection passed 080818B5 000.01s EAPOL-MKA - With Potential Peer List parameter set - Dissection passed 8BBD849B 000.01s EAPOL-MKA - With Live Peer List parameter set - Dissection passed 5897890C 000.01s EAPOL-MKA - With SAK Use parameter set - Dissection passed 3BC417E4 000.01s EAPOL-MKA - With Distributed SAK parameter set - Dissection passed 8C5B5629 000.00s EAP - Basic Instantiation passed 00852BB9 000.00s EAP - Instantiation with specific values passed 7D59BE49 000.00s EAP - Instantiation - Multiple desired authentication types passed CC02FE22 000.00s EAP - Dissection (1) passed 390137BE 000.00s EAP - Dissection (2) passed D35419A0 000.00s EAP - Dissection (3) passed 228E8966 000.00s EAP - Dissection (4) passed C34F247B 000.00s EAP - Dissection (5) passed 63BCBC77 000.00s EAP - Dissection (6) passed 3B382531 000.00s EAP - Dissection (7) passed D8BC9843 000.00s EAP - Dissection (8) passed 02A2E196 000.00s EAP - EAP_TLS - Basic Instantiation passed ABC6CAE9 000.00s EAP - EAP_FAST - Basic Instantiation passed D41E649B 000.00s EAP - EAP_TTLS - Basic Instantiation passed 55E8207D 000.00s EAP - EAP_PEAP - Basic Instantiation passed 8CB571E8 000.00s EAP - EAP_MD5 - Basic Instantiation passed AF8A8FF8 000.00s EAP - EAP_MD5 - Request - Dissection (8) passed 33064507 000.00s EAP - EAP_MD5 - Response - Dissection (9) passed 6D444E21 000.00s EAP - LEAP - Basic Instantiation passed C0E7C5F1 000.00s EAP - LEAP - Request - Dissection (10) passed 4D475170 000.00s EAP - LEAP - Response - Dissection (11) passed 5801E6ED 000.00s EAP - PEAP - Request - Dissection passed EA31A827 000.00s EAP - PEAP - Response - Dissection passed BE238C63 000.01s EAP - Layers (1) passed 152D3B74 000.01s EAP - Layers (2) passed BC8A3153 000.00s EAP - sessions (1) passed 147CEDA0 000.00s EAP - sessions (2) Campaign CRC=71EDEC3C in 000.19s SHA=7D7445D47E548B9DC7DF9A7B2B8897042C0CB62B PASSED=45 FAILED=0 ━ Loading: test/scapy/layers/hsrp.uts passed C638A950 000.01s HSRP - build & dissection Campaign CRC=27F64651 in 000.01s SHA=3F436271EF6352DD5DC95DC2E23E95E9762F52C7 PASSED=1 FAILED=0 ━ Loading: test/scapy/layers/http.uts passed C718F280 000.15s TCPSession - dissect HTTP 1.0 chunked image passed B6FCD3E5 000.11s TCPSession - dissect HTTP 1.0 html page with Content_Length passed 53546AE5 000.02s TCPSession - Invalid Content-Length passed 3502382B 000.03s TCPSession - dissect HTTP 1.0 HEAD response passed 1BF1F901 000.00s HTTP build with 'chunked' content type passed A3A5CE24 000.05s HTTP decompression (gzip) passed 4092AD89 000.06s HTTP decompression (gzip) with retransmission passed 5E68D7C3 000.03s HTTP decompression (brotli) passed FF26C0AD 000.02s HTTP decompression (zstd) passed 308B5151 000.05s HTTP PSH bug fix passed 814EB491 000.01s HTTP build passed CB515FDC 000.12s HTTP 1.1 -> HTTP 2.0 Upgrade (h2c) passed 062A6ADB 000.04s Test chunked with gzip passed 119CA56A 000.14s Util function to launch HTTP_server passed 1381B3BC 000.03s HTTP - HTTP_client fails to ask HTTP_server that required authentication passed 37943112 000.09s HTTP - HTTP_client asks HTTP_server with NTLMSSP passed 97C1E744 000.04s HTTP - HTTP_Server with native python client with Basic auth passed 8531C61E 000.02s HTTP - HTTP_Server with native python client without auth passed 08E25349 000.48s HTTPS - HTTPS_client asks HTTPS_server with NTLMSSP and CBT Campaign CRC=A306EAFD in 001.47s SHA=5DF04CDF7FE2107238CDBA2DD2267EB998BDF2BE PASSED=19 FAILED=0 ━ Loading: test/scapy/layers/inet.uts X Server closed. passed BD8995C6 000.01s IP options individual assembly passed 3B877B23 000.01s IP options individual dissection passed ABE7C3F9 000.03s IP assembly and dissection with options passed 17E9CA70 000.02s IPSession - dissect fragmented IP packets on-the-flow passed 5015935F 000.02s IPSession - contains non-IP packets passed 7F178101 000.01s StringBuffer passed 38D84225 000.02s fragment() passed 2CBDD00C 000.01s fragment() and overloaded_fields passed DFE594D6 000.02s fragment() already fragmented packets passed 185E3CD1 000.01s fragment() with non-multiple-of-8 MTU passed 496E9814 000.02s fragment() with fragsize lower than 8 passed 38AA62AA 000.01s defrag() passed 34E95DD5 000.01s defragment() passed 2D66B8BF 000.04s defragment() uses timestamp of last fragment passed CC47DF74 000.01s defragment() - Missing fragments passed 0389775F 000.16s defrag() / defragment() - Real DNS packets passed 0BDBA2DA 000.02s Packet().fragment() passed 5252347B 000.01s Packet().fragment() and overloaded_fields passed E15B30B3 000.02s Packet().fragment() already fragmented packets passed CF0C26C2 000.00s TCP options: UTO - basic build passed 5A0D5D8D 000.00s TCP options: UTO - basic dissection passed 20E9E9F9 000.00s TCP options: SAck - basic build passed BCDB92DF 000.00s TCP options: SAck - basic dissection passed 62A90792 000.00s TCP options: SAckOK - basic build passed 64193152 000.00s TCP options: SAckOK - basic dissection passed 62690F3F 000.00s TCP options: EOL - basic build passed 83D3D900 000.00s TCP options: EOL - basic dissection passed 96F1D377 000.00s TCP options: malformed - build passed 4A34058C 000.00s TCP options: malformed - dissection passed 2B2BCB4D 000.00s TCP options: wrong offset passed F9C9B67E 000.00s TCP options: MPTCP - basic build using bytes passed B68F0088 000.01s TCP options: MD5 build and parse passed A21D3F28 000.01s TCP options: MD5 IPv4 (depends on default values) passed 884A2F07 000.01s TCP options: MD5 IPv6 (depends on default values) passed 9623E054 000.01s TCP options: MD5 sign (depends on default values) passed 26E8A51B 000.00s TCP Authentication Option: build passed 4B8CC361 000.00s TCP Authentication Option: parse passed B7CF5FD2 000.00s TCP Authentication Option: parse from TCP passed 2EBCACBA 000.00s TCP Authentication Option: build TCP passed A3A21C0D 000.00s TCP options: invalid data offset passed 73389405 000.00s TCP options: build oversized packet passed 283CA8A2 000.00s TCP random options passed FD5AE5C3 000.00s TCP random options - MD5 (#GH3777) passed B2754988 000.12s IP, TCP & UDP checksums (these tests highly depend on default values) passed 6716D5EA 000.01s IP with forced-length 0 passed 6ADFBCF2 000.01s TCP payload with IP Total Length 0 passed 042C57DB 000.45s TCPSession: test tcp_reassemble with variable orders passed 6EC93368 000.03s Layer binding passed F9C26A11 000.03s Layer binding with show() passed 1DB8347A 000.06s GRE binding tests passed 35710318 000.00s IPv4 - ICMPTimeStampField passed C0285EC0 000.01s IPv4 - UDP null checksum passed B2B8B64F 000.04s IPv4 - (IP|UDP|TCP|ICMP)Error passed 5B035D25 000.00s IPv4 - TCPError parsing passed 9193D025 000.00s IPv4 - mDNS passed AF34E758 000.03s IPv4 - utilities passed 5BB1206E 002.62s IPv4 - ICMP hashret passed 3B24CE36 000.25s IPv4 - traceroute utilities passed 340EE4FC 000.05s IPv4 - reporting passed 2CB9E03F 000.06s IPv4 - Checksum computation with source routing passed 8EF377FD 000.03s Build ICMP extension from scratch passed 4D92C542 000.02s Check dissection and rebuild of MPLS ICMPv4 extension passed 23EFF953 000.01s ICMPv4 extension - Other dissection example passed 502D9D9C 000.01s ICMPv4 extension - RFC5837 Campaign CRC=940FD9A4 in 004.32s SHA=50B62C40D30BD68A7867477EE7C718C24042E384 PASSED=64 FAILED=0 ━ Loading: test/scapy/layers/inet6.uts passed D1CE7F15 000.00s IPv6 Class basic Instantiation passed 47FE251A 000.00s IPv6 Class basic build (default values) passed 2AFB2655 000.00s IPv6 Class basic dissection (default values) passed 116A1D05 000.00s IPv6 Class with basic TCP stacked - build passed E77B83DD 000.00s IPv6 Class with basic TCP stacked - dissection passed F1924BC2 000.00s IPv6 Class with TCP and TCP data - build passed BEE06332 000.01s IPv6 Class with TCP and TCP data - dissection passed F195E599 000.00s IPv6 Class binding with Ethernet - build passed A0974624 000.01s IPv6 Class binding with Ethernet - dissection passed FD44B31B 000.00s IPv6 Class - summary passed DB6C92E4 000.01s IPv6 Class binding with GRE - build passed FF2BFB92 000.00s IPv6 Class binding with GRE - dissection passed D18B79CA 000.00s IPv6 ma_addr coverage on hashret passed 11A76559 000.00s PseudoIPv6 passed 2757B308 000.01s in6_chksum is computed on UDP or TCP build passed 2D45AAC8 000.00s IPv6ExtHdrRouting Class - No address - build passed 2FB49298 000.00s IPv6ExtHdrRouting Class - One address - build passed 1398D3BC 000.00s IPv6ExtHdrRouting Class - Multiple Addresses - build passed BFE608B1 000.00s IPv6ExtHdrRouting Class - Specific segleft (2->1) - build passed 45FC49B8 000.00s IPv6ExtHdrRouting Class - Specific segleft (2->0) - build passed FC300EF1 000.01s IPv6ExtHdrSegmentRouting Class - default - build & dissect passed 1826D82B 000.01s IPv6ExtHdrSegmentRouting Class - addresses list - build & dissect passed D2708BF4 000.01s IPv6ExtHdrSegmentRouting Class - TLVs list - build & dissect passed C72CBD68 000.01s IPv6ExtHdrSegmentRouting Class - both lists - build & dissect passed 8236A245 000.01s IPv6ExtHdrSegmentRouting Class - UDP pseudo-header checksum - build & dissect passed 64FF945F 000.00s Test in6_get6to4Prefix() - 0.0.0.0 address passed D66F1EFB 000.00s Test in6_get6to4Prefix() - 255.255.255.255 address passed 89A19ABC 000.00s Test in6_get6to4Prefix() - 1.1.1.1 address passed C85A196A 000.00s Test in6_get6to4Prefix() - invalid address passed A5258DE8 000.00s Test in6_6to4ExtractAddr() - 2002:: address passed C1C5C579 000.00s Test in6_6to4ExtractAddr() - 255.255.255.255 address passed 1856D118 000.00s Test in6_6to4ExtractAddr() - "2002:101:101::" address passed FE84F001 000.00s Test in6_6to4ExtractAddr() - invalid address passed 116945D2 000.00s in6_getLinkScopedMcastAddr() : default generation passed 15A1164B 000.00s in6_getLinkScopedMcastAddr() : different valid scope values passed 1B46F9F2 000.00s in6_getLinkScopedMcastAddr() : grpid in different formats passed 9C7E1D83 000.00s in6_mactoifaceid() conversion function (test 1) passed 86460033 000.00s in6_mactoifaceid() conversion function (test 2) passed 18EDF6C2 000.00s in6_mactoifaceid() conversion function (test 3) passed E27E1DC5 000.00s in6_mactoifaceid() conversion function (test 4) passed 55DFF829 000.00s in6_mactoifaceid() conversion function (test 5) passed 4FE7E599 000.00s in6_mactoifaceid() conversion function (test 6) passed EC2EECAB 000.00s in6_mactoifaceid() conversion function (test 1) passed DF0FDAFB 000.00s in6_mactoifaceid() conversion function (test 2) passed B330D236 000.00s in6_mactoifaceid() conversion function (test 3) passed FE0E4D6C 000.00s in6_mactoifaceid() conversion function (test 4) passed 90033B9C 000.00s in6_mactoifaceid() conversion function (test 5) passed A3220DCC 000.00s in6_mactoifaceid() conversion function (test 6) passed 3089CFC8 000.00s in6_addrtomac() conversion function (test 1) passed 03A8F998 000.00s in6_addrtomac() conversion function (test 2) passed D7E362FE 000.00s in6_addrtomac() conversion function (test 3) passed 9ADDFDA4 000.00s in6_addrtomac() conversion function (test 4) passed 4CA418FF 000.00s in6_addrtomac() conversion function (test 5) passed 7F852EAF 000.00s in6_addrtomac() conversion function (test 6) passed 1F75EA78 000.02s Test in6_getRandomizedIfaceId passed 343ADC44 000.00s Test RFC 1924 function - in6_ctop() basic test passed 6AF7CDC0 000.00s Test RFC 1924 function - in6_ctop() with character outside charset passed C172E6F3 000.00s Test RFC 1924 function - in6_ctop() with bad length address passed C4342A8E 000.00s Test RFC 1924 function - in6_ptoc() basic test passed C4342A8E 000.00s Test RFC 1924 function - in6_ptoc() basic test passed A4701435 000.00s Test RFC 1924 function - in6_ptoc() with bad input passed FCEA333A 000.00s in6_getAddrType - 6to4 addresses passed 131734E3 000.00s in6_getAddrType - Assignable Unicast global address passed 8BDD9DB1 000.00s in6_getAddrType - Multicast global address passed 213FCF86 000.00s in6_getAddrType - Multicast local address passed 6CCACBE3 000.00s in6_getAddrType - Unicast Link-Local address passed A8F9859D 000.00s in6_getAddrType - Loopback address passed 1CC8CEFB 000.00s in6_getAddrType - Unspecified address passed 9E620BFF 000.00s in6_getAddrType - Unassigned Global Unicast address passed 2F5A3C1A 000.00s in6_getAddrType - Weird address (FE::1) passed 1FCBAF51 000.00s in6_getAddrType - Weird address (FE8::1) passed B929EB08 000.00s in6_getAddrType - Weird address (1::1) passed 573C88CB 000.00s in6_getAddrType - Weird address (1000::1) passed B0274B52 000.00s ICMPv6DestUnreach Class - Basic Build (no argument) passed 7C20B0AE 000.00s ICMPv6DestUnreach Class - Basic Build over IPv6 (for cksum and overload) passed 72B4D073 000.00s ICMPv6DestUnreach Class - Basic Build over IPv6 with some payload passed 5DCED31E 000.01s ICMPv6DestUnreach Class - Dissection with default values and some payload passed 61EBCF68 000.01s ICMPv6DestUnreach Class - Dissection with specific values passed 6A099C52 000.01s ICMPv6DestUnreach Class - checksum computation related stuff passed 92F17464 000.00s ICMPv6PacketTooBig Class - Basic Build (no argument) passed 60E87C3A 000.00s ICMPv6PacketTooBig Class - Basic Build over IPv6 (for cksum and overload) passed 0CA63B6C 000.00s ICMPv6PacketTooBig Class - Basic Build over IPv6 with some payload passed 12D4F0B8 000.01s ICMPv6PacketTooBig Class - Dissection with default values and some payload passed 03142868 000.01s ICMPv6PacketTooBig Class - Dissection with specific values passed 1BB988F8 000.01s ICMPv6PacketTooBig Class - checksum computation related stuff passed 8A3F901A 000.00s ICMPv6EchoRequest - Basic Instantiation passed 699B15EE 000.00s ICMPv6EchoRequest - Instantiation with specific values passed EA446DAE 000.00s ICMPv6EchoRequest - Basic dissection passed E198A309 000.00s ICMPv6EchoRequest - Dissection with specific values passed C8ABAED8 000.00s ICMPv6EchoRequest - Automatic checksum computation and field overloading (build) passed D5DA8869 000.00s ICMPv6EchoRequest - Automatic checksum computation and field overloading (dissection) passed 9B53C5BF 000.00s ICMPv6EchoReply - Basic Instantiation passed 731C7145 000.00s ICMPv6EchoReply - Instantiation with specific values passed 6D91D17E 000.00s ICMPv6EchoReply - Basic dissection passed F842CDB8 000.00s ICMPv6EchoReply - Dissection with specific values passed C7B5F6CD 000.00s ICMPv6EchoReply - Automatic checksum computation and field overloading (build) passed D5DA8869 000.00s ICMPv6EchoReply - Automatic checksum computation and field overloading (dissection) passed D877DBBC 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 1 passed ED194425 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 2 passed FCA0F5AC 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 3 passed A74729F6 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 4 passed 99E290FA 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 5 passed 6C09EBC2 000.00s ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 6 passed 756FA625 000.01s ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 7 - IPv6ExtHdrDestOpt passed 71108418 000.00s ICMPv6MRD_Advertisement - Basic instantiation passed 8F8BA144 000.00s ICMPv6MRD_Advertisement - Instantiation with specific values passed 9E6E21C9 000.01s ICMPv6MRD_Advertisement - Basic Dissection and overloading mechanisms passed BE0C3CDF 000.00s ICMPv6MRD_Solicitation - Basic dissection passed EE2B5EA7 000.00s ICMPv6MRD_Solicitation - Instantiation with specific values passed 1547161E 000.01s ICMPv6MRD_Solicitation - Basic Dissection and overloading mechanisms passed 8751A716 000.00s ICMPv6MRD_Termination Basic instantiation passed F00B6415 000.00s ICMPv6MRD_Termination - Instantiation with specific values passed EE51AADC 000.01s ICMPv6MRD_Termination - Basic Dissection and overloading mechanisms passed B0AE1C85 000.00s HBHOptUnknown - Basic Instantiation passed ACAF4AE9 000.00s HBHOptUnknown - Basic Dissection passed 8BD4223D 000.00s HBHOptUnknown - Automatic optlen computation passed 1149AE15 000.00s HBHOptUnknown - Instantiation with specific values passed FEFDFEEE 000.00s HBHOptUnknown - Dissection with specific values passed 11565441 000.00s Pad1 - Basic Instantiation passed 518CEBB3 000.00s Pad1 - Basic Dissection passed 61AB67F0 000.00s PadN - Basic Instantiation passed 656980DD 000.00s PadN - Optlen Automatic computation passed 17FC8495 000.00s PadN - Basic Dissection passed C5CB0342 000.00s PadN - Dissection with specific values passed D503B731 000.00s PadN - Instantiation with forced optlen passed 1D8D7ADA 000.00s RouterAlert - Basic Instantiation passed A54FE28F 000.00s RouterAlert - Basic Dissection passed C7B9FB38 000.00s RouterAlert - Instantiation with specific values passed F7186483 000.00s RouterAlert - Instantiation with specific values passed 550615F1 000.00s RplOption - Basic Instantiation passed C0942131 000.00s RplOption - Basic Dissection passed 6504B3D5 000.00s RplOption - Instantiation with specific values passed 630BCEDA 000.00s RplOption - Instantiation with specific values passed F3FA9ADA 000.00s Jumbo - Basic Instantiation passed 99EED01B 000.00s Jumbo - Basic Dissection passed 91205FD6 000.00s Jumbo - Instantiation with specific values passed E5FC9898 000.00s Jumbo - Dissection with specific values passed 4CCEF5BF 000.00s HAO - Basic Instantiation passed 4E0F867C 000.00s HAO - Basic Dissection passed C418FF05 000.00s HAO - Instantiation with specific values passed E7DC6D56 000.00s HAO - Dissection with specific values passed EC3D2FE2 000.00s HAO - hashret passed 233C6301 000.00s IPv6ExtHdrHopByHop - Basic Instantiation passed 7B48FFB4 000.00s IPv6ExtHdrHopByHop - Instantiation with HAO option passed FADA6FBC 000.00s IPv6ExtHdrHopByHop - Instantiation with RouterAlert option passed DABA463D 000.00s IPv6ExtHdrHopByHop - Instantiation with RPL option passed 2C5CF83A 000.00s IPv6ExtHdrHopByHop - Instantiation with Jumbo option passed D695A953 000.01s IPv6ExtHdrHopByHop - Complete dissection with Jumbo option passed 4F45480A 000.00s IPv6ExtHdrHopByHop - Instantiation with Pad1 option passed 4F45480A 000.00s IPv6ExtHdrHopByHop - Instantiation with PadN option passed 5E80B26B 000.00s IPv6ExtHdrHopByHop - Instantiation with Jumbo, RouterAlert, HAO passed A0AB0063 000.01s IPv6ExtHdrHopByHop - Instantiation with HAO, Jumbo, RouterAlert passed 9B504E62 000.00s IPv6ExtHdrHopByHop - Instantiation with RouterAlert, HAO, Jumbo passed A69E2AD2 000.00s IPv6ExtHdrHopByHop - Hashret passed FECF1887 000.00s IPv6ExtHdrHopByHop - Basic Dissection passed 4DDF99AE 000.00s ICMPv6ND_RS - Basic instantiation passed D56894C6 000.00s ICMPv6ND_RS - Basic instantiation with empty dst in IPv6 underlayer passed A90C1892 000.00s ICMPv6ND_RS - Basic dissection passed EAC3B7DA 000.00s ICMPv6ND_RS - Basic instantiation with empty dst in IPv6 underlayer passed 988340A1 000.00s ICMPv6ND_RA - Basic Instantiation passed EAB9F5B1 000.00s ICMPv6ND_RA - Basic instantiation with empty dst in IPv6 underlayer passed 854A2794 000.00s ICMPv6ND_RA - Basic dissection passed 10B9F0CB 000.00s ICMPv6ND_RA - Basic instantiation with empty dst in IPv6 underlayer passed 5F315605 000.00s ICMPv6ND_RA - Answers passed 729ACF34 000.00s ICMPv6ND_RA - Summary Output passed 4107B846 000.00s ICMPv6ND_NS - Basic Instantiation passed BE7F71E1 000.00s ICMPv6ND_NS - Instantiation with specific values passed 0E54D262 000.00s ICMPv6ND_NS - Basic Dissection passed AE5264E2 000.00s ICMPv6ND_NS - Dissection with specific values passed B8ED22A7 000.01s ICMPv6ND_NS - IPv6 layer fields overloading passed 619885DF 000.00s ICMPv6ND_NA - Basic Instantiation passed 223DB4FA 000.00s ICMPv6ND_NA - Instantiation with specific values passed 4439E621 000.00s ICMPv6ND_NA - Basic Dissection passed A2CDB8CB 000.00s ICMPv6ND_NA - Dissection with specific values passed B8ED22A7 000.00s ICMPv6ND_NS - IPv6 layer fields overloading passed AB86627F 000.00s ICMPv6ND_ND/ICMPv6ND_ND matching - test 1 passed 5D1348F5 000.00s ICMPv6NDOptUnknown - Basic Instantiation passed 3202978B 000.00s ICMPv6NDOptUnknown - Instantiation with specific values passed 4407B938 000.01s ICMPv6NDOptUnknown - Basic Dissection passed 70470F72 000.00s ICMPv6NDOptUnknown - Dissection with specific values passed 3459AC84 000.01s ICMPv6NDOptUnknown - Instantiation/Dissection with unknown option in the middle passed F850E4BA 000.00s ICMPv6NDOptUnknown - fuzz passed 90AF5747 000.00s ICMPv6NDOptSrcLLAddr - Basic Instantiation passed E6828AEF 000.00s ICMPv6NDOptSrcLLAddr - Instantiation with specific values passed 17C13F23 000.00s ICMPv6NDOptSrcLLAddr - Basic Dissection passed 68952992 000.00s ICMPv6NDOptSrcLLAddr - Instantiation with specific values passed DC35A7E9 000.00s ICMPv6NDOptDstLLAddr - Basic Instantiation passed 6AF98091 000.00s ICMPv6NDOptDstLLAddr - Instantiation with specific values passed A222A5B1 000.00s ICMPv6NDOptDstLLAddr - Basic Dissection passed 4F1DECB4 000.00s ICMPv6NDOptDstLLAddr - Instantiation with specific values passed FF4E47BB 000.00s ICMPv6NDOptPrefixInfo - Basic Instantiation passed 48915433 000.00s ICMPv6NDOptPrefixInfo - Instantiation with specific values passed ACF9B9CF 000.00s ICMPv6NDOptPrefixInfo - Basic Dissection passed 5CFA5B35 000.00s ICMPv6NDOptPrefixInfo - Instantiation with specific values passed 406CE07A 000.00s ICMPv6NDOptRedirectedHdr - Basic Instantiation passed D0348B15 000.00s ICMPv6NDOptRedirectedHdr - Instantiation with specific values passed 2CEAD38E 000.00s ICMPv6NDOptRedirectedHdr - Instantiation with simple IPv6 packet (no upper layer) passed F123E716 000.00s ICMPv6NDOptRedirectedHdr - Basic Dissection passed 8D6AF3B5 000.00s ICMPv6NDOptRedirectedHdr - Disssection with specific values passed 2D605821 000.00s ICMPv6NDOptRedirectedHdr - Dissection with cut IPv6 Header passed 2C6A746E 000.00s ICMPv6NDOptRedirectedHdr - Complete dissection passed 12DB2C22 000.00s ICMPv6NDOptMTU - Basic Instantiation passed 65770798 000.00s ICMPv6NDOptMTU - Instantiation with specific values passed 83B871C6 000.00s ICMPv6NDOptMTU - Basic dissection passed 17C89A45 000.00s ICMPv6NDOptMTU - Dissection with specific values passed 23296DBD 000.00s ICMPv6NDOptMTU - Summary Output passed 136EA017 000.00s ICMPv6NDOptShortcutLimit - Basic Instantiation passed 559E7404 000.00s ICMPv6NDOptShortcutLimit - Instantiation with specific values passed 0F220EAF 000.00s ICMPv6NDOptShortcutLimit - Basic Dissection passed 73976BB0 000.00s ICMPv6NDOptShortcutLimit - Dissection with specific values passed BF81F813 000.00s ICMPv6NDOptAdvInterval - Basic Instantiation passed CA6C93CA 000.00s ICMPv6NDOptAdvInterval - Instantiation with specific values passed E94BFFAE 000.00s ICMPv6NDOptAdvInterval - Basic dissection passed BEF20018 000.00s ICMPv6NDOptAdvInterval - Dissection with specific values passed C231587A 000.00s ICMPv6NDOptHAInfo - Basic Instantiation passed 0B0C8DF5 000.00s ICMPv6NDOptHAInfo - Instantiation with specific values passed CF87AC62 000.00s ICMPv6NDOptHAInfo - Basic dissection passed 498F662C 000.00s ICMPv6NDOptHAInfo - Dissection with specific values passed B69122C3 000.00s ICMPv6NDOptSrcAddrList - Basic Instantiation passed DE7FE747 000.00s ICMPv6NDOptSrcAddrList - Instantiation with specific values (auto len) passed B5B76D1F 000.00s ICMPv6NDOptSrcAddrList - Instantiation with specific values passed 5267358D 000.00s ICMPv6NDOptSrcAddrList - Basic Dissection passed C13C47A5 000.00s ICMPv6NDOptSrcAddrList - Dissection with specific values (auto len) passed AF821F8C 000.00s ICMPv6NDOptSrcAddrList - Dissection with specific values passed C87ECDC7 000.00s ICMPv6NDOptTgtAddrList - Basic Instantiation passed 8686FB8C 000.00s ICMPv6NDOptTgtAddrList - Instantiation with specific values (auto len) passed 7E021A90 000.00s ICMPv6NDOptTgtAddrList - Instantiation with specific values passed DF694DCF 000.00s ICMPv6NDOptTgtAddrList - Basic Dissection passed 3B066EBB 000.00s ICMPv6NDOptTgtAddrList - Dissection with specific values (auto len) passed 50F81FC1 000.00s ICMPv6NDOptTgtAddrList - Instantiation with specific values passed 7D59A368 000.00s ICMPv6NDOptIPAddr - Basic Instantiation passed C1D1E7D5 000.00s ICMPv6NDOptIPAddr - Instantiation with specific values passed 1A2F5C7F 000.00s ICMPv6NDOptIPAddr - Basic Dissection passed 0B8C346B 000.00s ICMPv6NDOptIPAddr - Dissection with specific values passed EFC6686C 000.00s ICMPv6NDOptNewRtrPrefix - Basic Instantiation passed D9B46DE8 000.00s ICMPv6NDOptNewRtrPrefix - Instantiation with specific values passed E7373FCC 000.00s ICMPv6NDOptNewRtrPrefix - Basic Dissection passed 321A7BB0 000.00s ICMPv6NDOptNewRtrPrefix - Dissection with specific values passed 8CA3631C 000.00s ICMPv6NDOptLLA - Basic Instantiation passed 48526498 000.00s ICMPv6NDOptLLA - Instantiation with specific values passed C536C823 000.00s ICMPv6NDOptLLA - Basic Dissection passed 1DEC5413 000.00s ICMPv6NDOptLLA - Dissection with specific values passed 8C3E3751 000.00s ICMPv6NDOptRouteInfo - Basic Instantiation passed 44A42CE7 000.00s ICMPv6NDOptRouteInfo - Instantiation with forced prefix but no length passed D30C6789 000.00s ICMPv6NDOptRouteInfo - Instantiation with forced length values (1/4) passed 03213D9B 000.00s ICMPv6NDOptRouteInfo - Instantiation with forced length values (2/4) passed D2034B7A 000.00s ICMPv6NDOptRouteInfo - Instantiation with forced length values (3/4) passed 9B323128 000.00s ICMPv6NDOptRouteInfo - Instantiation with forced length values (4/4) passed 0E899A78 000.00s ICMPv6NDOptRouteInfo - Instantiation with specific values passed A9702412 000.00s ICMPv6NDOptRouteInfo - Basic dissection passed BA32308F 000.00s ICMPv6NDOptRouteInfo - Dissection with specific values passed 24C9726E 000.00s ICMPv6NDOptRouteInfo - Summary Output passed 77F8890C 000.00s ICMPv6NDOptMAP - Basic Instantiation passed 2FEE4C87 000.00s ICMPv6NDOptMAP - Instantiation with specific values passed C6AAF0A2 000.00s ICMPv6NDOptMAP - Basic Dissection passed 900763C7 000.00s ICMPv6NDOptMAP - Dissection with specific values passed 4F509225 000.00s ICMPv6NDOptRDNSS - Basic Instantiation passed 9CD0A8FB 000.00s ICMPv6NDOptRDNSS - Basic instantiation with 1 DNS address passed C58A2B38 000.00s ICMPv6NDOptRDNSS - Basic instantiation with 2 DNS addresses passed 43D6D077 000.00s ICMPv6NDOptRDNSS - Instantiation with specific values passed DC2BFF23 000.00s ICMPv6NDOptRDNSS - Basic Dissection passed 37BF7067 000.00s ICMPv6NDOptRDNSS - Dissection (with 1 DNS address) passed 9D964AF3 000.00s ICMPv6NDOptRDNSS - Dissection (with 2 DNS addresses) passed D07F3579 000.00s ICMPv6NDOptRDNSS - Summary Output passed 043EECBA 000.00s ICMPv6NDOptDNSSL - Basic Instantiation passed F6B0842F 000.00s ICMPv6NDOptDNSSL - Instantiation with 1 search domain, as seen in the wild passed E914C420 000.00s ICMPv6NDOptDNSSL - Basic instantiation with 2 search domains passed ECC9DE2E 000.00s ICMPv6NDOptDNSSL - Basic instantiation with 3 search domains passed B1DC63A2 000.00s ICMPv6NDOptDNSSL - Basic Dissection passed B96216D1 000.00s ICMPv6NDOptDNSSL - Basic Dissection with specific values passed 0EF80C89 000.00s ICMPv6NDOptDNSSL - Summary Output passed FB09A048 000.00s ICMPv6NDOptCaptivePortal - Basic Instantiation passed E1B26DD8 000.00s ICMPv6NDOptCaptivePortal - Instantiation with captive portal URI passed B08F8E08 000.00s ICMPv6NDOptCaptivePortal - Instantiation where total length is already a multiple of 8 bytes passed 9525D318 000.00s ICMPv6NDOptCaptivePortal - Basic Dissection passed BADB2774 000.00s ICMPv6NDOptCaptivePortal - Basic Dissection with captive portal URI passed 342AC0B0 000.00s ICMPv6NDOptCaptivePortal - Dissection with zero length passed 2D9ABF1B 000.00s ICMPv6NDOptCaptivePortal - Summary Output passed 3FDE1930 000.00s ICMPv6NDOptEFA - Basic Instantiation passed C66DCEC4 000.00s ICMPv6NDOptEFA - Basic Dissection passed 177C508A 000.00s ICMPv6NDOptPREF64 - Basic Instantiation passed 705B9F36 000.00s ICMPv6NDOptPREF64 - Basic Dissection passed D9F1C6F7 000.01s ICMPv6NDOptPREF64 - Instantiation/Dissection with specific values passed 3D7CF677 000.00s ICMPv6NDOptPREF64 - Summary Output passed 5A9CA3E4 000.00s ICMPv6NIQueryNOOP - Basic Instantiation passed E7B5CD0E 000.00s ICMPv6NIQueryNOOP - Basic Dissection passed 9E5885F0 000.00s ICMPv6NIQueryName - single label DNS name (internal) passed 09349544 000.00s ICMPv6NIQueryName - single label DNS name passed B5A1B89B 000.00s ICMPv6NIQueryName - fqdn (internal) passed 0A731407 000.00s ICMPv6NIQueryName - fqdn passed 700787CB 000.00s ICMPv6NIQueryName - IPv6 address (internal) passed 118B9433 000.00s ICMPv6NIQueryName - IPv6 address passed 646BF569 000.00s ICMPv6NIQueryName - IPv4 address (internal) passed 12166AC6 000.00s ICMPv6NIQueryName - IPv4 address passed 9E9ECE7E 000.01s ICMPv6NIQueryName - build & dissection passed F32AF9E2 000.00s ICMPv6NIQueryName - dissection passed DCE7145A 000.02s ICMPv6NIQueryIPv6 - single label DNS name (internal) passed E1691DBD 000.00s ICMPv6NIQueryIPv6 - single label DNS name passed EB6E8B1A 000.00s ICMPv6NIQueryIPv6 - fqdn (internal) passed E22E9CFE 000.00s ICMPv6NIQueryIPv6 - fqdn passed AB7F5D94 000.00s ICMPv6NIQueryIPv6 - IPv6 address (internal) passed C1C61F21 000.00s ICMPv6NIQueryIPv6 - IPv6 address passed FE8A89EC 000.00s ICMPv6NIQueryIPv6 - IPv4 address (internal) passed 9CAA8473 000.00s ICMPv6NIQueryIPv6 - IPv4 address passed 80D80DB7 000.00s ICMPv6NIQueryIPv4 - single label DNS name (internal) passed 10F9B2D6 000.00s ICMPv6NIQueryIPv4 - single label DNS name passed E9FA74CB 000.00s ICMPv6NIQueryIPv4 - fqdn (internal) passed 13BE3395 000.00s ICMPv6NIQueryIPv4 - fqdn passed 57710B44 000.00s ICMPv6NIQueryIPv4 - IPv6 address (internal) passed 4FE1F2D7 000.00s ICMPv6NIQueryIPv4 - IPv6 address passed 0F5CFF51 000.00s ICMPv6NIQueryIPv4 - IPv4 address (internal) passed D3A66514 000.00s ICMPv6NIQueryIPv4 - IPv4 address passed 90EE9B24 000.00s ICMPv6NIQueryIPv4 - dissection passed FB14D0BC 000.01s ICMPv6NIQueryIPv4 - hashret() passed 4FA1E638 000.01s ICMPv6NIQuery* - flags handling (Test 1) passed 9DA8440B 000.02s ICMPv6NIQuery* - flags handling (Test 2) passed 1DD2FCF9 000.01s ICMPv6NIReply* - flags handling (Test 1) passed 04A33787 000.02s ICMPv6NIReply* - flags handling (Test 2) passed 8ECA63FE 000.00s ICMPv6NIQuery* - Flags Default values passed 7043A408 000.00s ICMPv6NIReply* - Flags Default values passed 9DD5F86E 000.00s ICMPv6NIQueryIPv6 - dispatch with nothing in data passed F03359A7 000.00s ICMPv6NIQueryIPv6 - dispatch with IPv6 address in data passed A0C43FF6 000.00s ICMPv6NIQueryIPv6 - dispatch with IPv4 address in data passed FE817D4D 000.00s ICMPv6NIQueryIPv6 - dispatch with name in data passed 876BC56C 000.00s ICMPv6NIQueryName - dispatch with nothing in data passed E48D9A5D 000.00s ICMPv6NIQueryName - dispatch with IPv6 address in data passed 74621ABB 000.00s ICMPv6NIQueryName - dispatch with IPv4 address in data passed 2E1A4B52 000.00s ICMPv6NIQueryName - dispatch with name in data passed 9EB63E24 000.00s ICMPv6NIQueryIPv4 - dispatch with nothing in data passed 21D154E9 000.01s ICMPv6NIQueryIPv4 - dispatch with IPv6 address in data passed B13ED40F 000.00s ICMPv6NIQueryIPv4 - dispatch with IPv6 address in data passed 7E7B6F19 000.00s ICMPv6NIQueryIPv4 - dispatch with name in data passed CD3BE374 000.00s ICMPv6NIReplyName - dispatch passed D785DE76 000.00s ICMPv6NIReplyIPv6 - dispatch passed D4E6183C 000.00s ICMPv6NIReplyIPv4 - dispatch passed 5A60D811 000.00s ICMPv6NIReplyRefuse - dispatch passed D5BFCED9 000.00s ICMPv6NIReplyUnknown - dispatch passed 7C332597 000.00s ICMPv6NIReplyNOOP - single DNS name without hint => understood as string (internal) passed 3B9A395F 000.00s ICMPv6NIReplyNOOP - single DNS name without hint => understood as string passed 3788EEC1 000.00s ICMPv6NIReplyNOOP - fqdn without hint => understood as string (internal) passed A25145C0 000.00s ICMPv6NIReplyNOOP - fqdn without hint => understood as string passed 999B2E68 000.00s ICMPv6NIReplyNOOP - IPv6 address without hint => understood as string (internal) passed 0969548F 000.00s ICMPv6NIReplyNOOP - IPv6 address without hint => understood as string passed BFD5487C 000.00s ICMPv6NIReplyNOOP - IPv4 address without hint => understood as string (internal) passed C13935F3 000.00s ICMPv6NIReplyNOOP - IPv4 address without hint => understood as string passed 0D81A049 000.00s ICMPv6NIReplyName - single label DNS name as a rawing (without ttl) (internal) passed 3C53E327 000.00s ICMPv6NIReplyName - single label DNS name as a rawing (without ttl) passed 609A42C2 000.00s ICMPv6NIReplyName - fqdn name as a rawing (without ttl) (internal) passed 8A8C7EEE 000.00s ICMPv6NIReplyName - fqdn name as a rawing (without ttl) passed D3374243 000.00s ICMPv6NIReplyName - list of 2 single label DNS names (without ttl) (internal) passed 0D040755 000.00s ICMPv6NIReplyName - list of 2 single label DNS names (without ttl) passed 91AFC664 000.00s ICMPv6NIReplyName - [ttl, single-label, single-label, fqdn] (internal) passed F1959693 000.00s ICMPv6NIReplyName - [ttl, single-label, single-label, fqdn] passed A62F555E 000.00s ICMPv6NIReplyName - dissection passed 0327B8D1 000.00s ICMPv6NIReplyIPv6 - one IPv6 address without TTL (internal) passed 5BE7931B 000.00s ICMPv6NIReplyIPv6 - one IPv6 address without TTL passed F06FE01C 000.00s ICMPv6NIReplyIPv6 - one IPv6 address without TTL (as a list) (internal) passed 48D51A67 000.00s ICMPv6NIReplyIPv6 - one IPv6 address without TTL (as a list) passed DF725CF6 000.00s ICMPv6NIReplyIPv6 - one IPv6 address with TTL (internal) passed C1D13295 000.00s ICMPv6NIReplyIPv6 - one IPv6 address with TTL passed 5296D121 000.00s ICMPv6NIReplyIPv6 - two IPv6 addresses as a list of rawings (without TTL) (internal) passed 888F2159 000.00s ICMPv6NIReplyIPv6 - two IPv6 addresses as a list of rawings (without TTL) passed 92CA19B9 000.00s ICMPv6NIReplyIPv6 - two IPv6 addresses as a list (first with ttl, second without) (internal) passed 9237D0A0 000.00s ICMPv6NIReplyIPv6 - two IPv6 addresses as a list (first with ttl, second without) passed 9486E700 000.01s ICMPv6NIReplyIPv6 - build & dissection passed 5955F7E0 000.00s ICMPv6NIReplyIPv4 - one IPv4 address without TTL (internal) passed 0CAD9396 000.00s ICMPv6NIReplyIPv4 - one IPv4 address without TTL passed 34759FE1 000.00s ICMPv6NIReplyIPv4 - one IPv4 address without TTL (as a list) (internal) passed 9BB55A35 000.00s ICMPv6NIReplyIPv4 - one IPv4 address without TTL (as a list) passed DC268620 000.00s ICMPv6NIReplyIPv4 - one IPv4 address with TTL (internal) passed 6F083881 000.00s ICMPv6NIReplyIPv4 - one IPv4 address with TTL (internal) passed 0ED8BCE7 000.00s ICMPv6NIReplyIPv4 - two IPv4 addresses as a list of rawings (without TTL) passed 1D320704 000.00s ICMPv6NIReplyIPv4 - two IPv4 addresses as a list of rawings (without TTL) (internal) passed 31813DFC 000.00s ICMPv6NIReplyIPv4 - two IPv4 addresses as a list (first with ttl, second without) passed 2F24CF43 000.00s ICMPv6NIReplyIPv4 - two IPv4 addresses as a list (first with ttl, second without) (internal) passed 446E1292 000.01s ICMPv6NIReplyIPv4 - build & dissection passed 2E88C9E1 000.00s ICMPv6NIReplyRefuse - basic instantiation passed 7A08D0AB 000.00s ICMPv6NIReplyRefuse - basic dissection passed C18313EC 000.00s ICMPv6NIReplyUnknown - basic instantiation passed 1BA19182 000.00s ICMPv6NIReplyRefuse - basic dissection passed 25F69183 000.00s computeNIGroupAddr passed 810CA877 000.00s IPv6ExtHdrFragment - Basic Instantiation passed 3523504F 000.00s IPv6ExtHdrFragment - Instantiation with specific values passed 50251AD8 000.00s IPv6ExtHdrFragment - Basic Dissection passed D7C6213D 000.00s IPv6ExtHdrFragment - Instantiation with specific values passed 28BC4D04 000.00s IPv6 - IPv6ExtHdrFragment hashret passed 473F0D3F 000.08s fragment6 - test against a long TCP packet with a 1280 MTU passed C13258B5 000.08s fragment6 - test against a long TCP packet with a 1280 MTU without fragment header passed 4097E05C 000.11s defragment6 - test against a long TCP packet fragmented with a 1280 MTU passed D4BF84B5 000.02s defragment6 - test against packets with L2 header passed 14A8571E 000.12s defragment6 - test against a large TCP packet fragmented with a 1280 bytes MTU and missing fragments passed 5FC40359 000.03s defragment6 - test against a TCP packet fragmented with a 800 bytes MTU and missing fragments passed 22E57892 000.02s defragment6 - test the packet length passed FF61B0A6 000.04s defragment6 - discard payload passed E105A7D6 000.00s Fake interfaces passed E2FA358D 000.00s Route6 - Route6 flushing passed 3C829EE5 000.20s Route6 - Route6.route passed 90A8DA51 000.30s Route6 - Route6.make_route passed 249EDEFC 000.13s Route6 - Route6.add & Route6.delt passed 6C7F3CCC 000.00s Route6 - Route6.ifadd & Route6.ifdel passed 7AEF037C 000.03s IPv6 - utils passed 92EB7429 000.02s IPv6 - IPerror6 & UDPerror & _ICMPv6Error passed C85B6396 000.12s reset routes properly passed 6A54B998 000.01s ICMPv6MLQuery - build & dissection passed 8718938D 000.01s Check answers passed 52CBEBEA 000.01s ICMPv6MLQuery2 - build & dissection passed E2A0E7CE 000.01s ICMPv6MLReport2 - build & dissection passed 3C9829B9 000.00s ICMPv6MLReport2 and ICMPv6MLDMultAddrRec - dissection passed BEBE583F 000.01s Check answers passed E8030C5D 000.03s Define test utilities passed 6A1F7A15 000.03s Test NDP_Attack_DAD_DoS_via_NS passed 04CB506B 000.04s Test NDP_Attack_DAD_DoS_via_NA passed 2B24994F 000.04s Test NDP_Attack_NA_Spoofing passed FE484B43 000.04s Test NDP_Attack_Kill_Default_Router passed F96FBC83 000.05s Test NDP_Attack_Fake_Router passed A279F5A4 000.01s Test NDP_Attack_NS_Spoofing passed E44AE85E 000.00s in6_getha() passed 592778C9 000.00s ICMPv6HAADRequest - build/dissection passed 18E6F441 000.00s ICMPv6HAADReply - build/dissection passed 3B898003 000.00s ICMPv6HAADRequest / ICMPv6HAADReply - build/dissection passed 703155C7 000.00s ICMPv6MPSol - build (default values) passed 1F39B49A 000.00s ICMPv6MPSol - dissection (default values) passed D5807B21 000.00s ICMPv6MPSol - build passed 6C468680 000.00s ICMPv6MPSol - dissection passed FF26D9A7 000.00s ICMPv6MPAdv - build (default values) passed 9844767F 000.00s ICMPv6MPAdv - dissection (default values) passed C8446CFB 000.00s ICMPv6MPAdv - build passed A0A65698 000.00s ICMPv6MPAdv - dissection passed C2DC6F17 000.01s IPv6ExtHdrRouting - type 2 - build/dissection passed 693098A2 000.00s IPv6ExtHdrRouting - type 2 - hashret passed BE18A6D5 000.00s MIP6OptBRAdvice - build (default values) passed 1F838EDF 000.00s MIP6OptBRAdvice - dissection (default values) passed E0633312 000.00s MIP6OptBRAdvice - build passed D461A817 000.00s MIP6OptBRAdvice - dissection passed 2D3EA9D1 000.00s MIP6OptAltCoA - build (default values) passed B2D6DF37 000.00s MIP6OptAltCoA - dissection (default values) passed 3FDF4DEF 000.00s MIP6OptAltCoA - build passed A6FEC781 000.00s MIP6OptAltCoA - dissection passed 9F63513F 000.00s MIP6OptNonceIndices - build (default values) passed 62CFAA10 000.00s MIP6OptNonceIndices - dissection (default values) passed 29F89A20 000.00s MIP6OptNonceIndices - build passed 0A650149 000.00s MIP6OptNonceIndices - dissection passed D8650078 000.00s MIP6OptBindingAuthData - build (default values) passed D1DB4338 000.00s MIP6OptBindingAuthData - dissection (default values) passed AD44FCBE 000.00s MIP6OptBindingAuthData - build passed 626B98D7 000.00s MIP6OptBindingAuthData - dissection passed 899430EC 000.00s MIP6OptMobNetPrefix - build (default values) passed BF944CC7 000.00s MIP6OptMobNetPrefix - dissection (default values) passed 4100796A 000.00s MIP6OptMobNetPrefix - build passed CB86B6A7 000.00s MIP6OptMobNetPrefix - dissection passed FAA9B32E 000.00s MIP6OptLLAddr - basic build passed 57BD9C8D 000.00s MIP6OptLLAddr - basic dissection passed D2B9FFA2 000.00s MIP6OptLLAddr - build with specific values passed DED1F1CA 000.00s MIP6OptLLAddr - dissection with specific values passed 3EB82B5B 000.00s MIP6OptMNID - basic build passed 0BD909BB 000.00s MIP6OptMNID - basic dissection passed BC66CE7D 000.00s MIP6OptMNID - build with specific values passed 98E601DF 000.00s MIP6OptMNID - dissection with specific values passed 2EA8576B 000.00s MIP6OptMsgAuth - basic build passed 4E7DB72B 000.00s MIP6OptMsgAuth - basic dissection passed AF7CEF39 000.00s MIP6OptMsgAuth - build with specific values passed 8F9664D3 000.00s MIP6OptMsgAuth - dissection with specific values passed 1366CFF5 000.00s MIP6OptReplayProtection - basic build passed 4E5171DC 000.00s MIP6OptReplayProtection - basic dissection passed 2160C672 000.00s MIP6OptReplayProtection - build with specific values passed 808820E6 000.00s MIP6OptReplayProtection - dissection with specific values passed 00000000 000.00s MIP6OptCGAParams passed 00000000 000.00s MIP6OptSignature passed 00000000 000.00s MIP6OptHomeKeygenToken passed 00000000 000.00s MIP6OptCareOfTestInit passed 00000000 000.00s MIP6OptCareOfTest passed 6F90C841 000.03s Mobility Options - Automatic Padding - MIP6OptBRAdvice passed 81BCBF42 000.03s Mobility Options - Automatic Padding - MIP6OptAltCoA passed FB9089F0 000.03s Mobility Options - Automatic Padding - MIP6OptNonceIndices passed C2A7CFBF 000.03s Mobility Options - Automatic Padding - MIP6OptBindingAuthData passed 0099BB44 000.04s Mobility Options - Automatic Padding - MIP6OptMobNetPrefix passed 8144EF0D 000.03s Mobility Options - Automatic Padding - MIP6OptLLAddr passed 1907ADCE 000.03s Mobility Options - Automatic Padding - MIP6OptMNID passed 085C2EB2 000.03s Mobility Options - Automatic Padding - MIP6OptMsgAuth passed 0CFD6125 000.03s Mobility Options - Automatic Padding - MIP6OptReplayProtection passed 7B1D075B 000.03s Mobility Options - Automatic Padding - MIP6OptCGAParamsReq passed 0CB63ED5 000.03s Mobility Options - Automatic Padding - MIP6OptCGAParams passed 55703FC9 000.03s Mobility Options - Automatic Padding - MIP6OptSignature passed 8A64A6E7 000.03s Mobility Options - Automatic Padding - MIP6OptHomeKeygenToken passed 2EF8FA78 000.04s Mobility Options - Automatic Padding - MIP6OptCareOfTestInit passed EA424CA5 000.03s Mobility Options - Automatic Padding - MIP6OptCareOfTest passed 343D67A9 000.00s MIP6MH_BRR - Build (default values) passed FA10AAFE 000.01s MIP6MH_BRR - Build with specific values passed CC0997F9 000.00s MIP6MH_BRR - Basic dissection passed 3F85511F 000.00s MIP6MH_BRR - Dissection with specific values passed 972AC425 000.03s MIP6MH_BRR / MIP6MH_BU / MIP6MH_BA hashret() and answers() passed A074EB35 000.00s MIP6MH_HoTI - Build (default values) passed 16F24C0F 000.00s MIP6MH_HoTI - Dissection (default values) passed 008E3B60 000.00s MIP6MH_HoTI - Build (specific values) passed A0A512FE 000.00s MIP6MH_HoTI - Dissection (specific values) passed 1BB92C38 000.00s MIP6MH_CoTI - Build (default values) passed 6C3D4668 000.00s MIP6MH_CoTI - Dissection (default values) passed CBB62C95 000.00s MIP6MH_CoTI - Build (specific values) passed 90C87043 000.00s MIP6MH_CoTI - Dissection (specific values) passed 9805A2D8 000.00s MIP6MH_HoT - Build (default values) passed 91A2B934 000.00s MIP6MH_HoT - Dissection (default values) passed 527EC2C7 000.00s MIP6MH_HoT - Build (specific values) passed 9ECE0115 000.00s MIP6MH_HoT - Dissection (specific values) passed A78ACF94 000.01s MIP6MH_HoT answers passed 10CB707C 000.00s MIP6MH_CoT - Build (default values) passed 4103DE62 000.00s MIP6MH_CoT - Dissection (default values) passed D1E23B94 000.00s MIP6MH_CoT - Build (specific values) passed 9C96522A 000.00s MIP6MH_CoT - Dissection (specific values) passed 7AC66C5F 000.01s MIP6MH_BU - build (default values) passed CD3B0A32 000.00s MIP6MH_BU - dissection (default values) passed F03F99F5 000.01s MIP6MH_BU - build passed 48B7FAB6 000.01s MIP6MH_BU - dissection passed 4E3A1E0B 000.00s MIP6MH_BA - build passed B3EB0DA2 000.00s MIP6MH_BA - dissection passed F1A9E8C2 000.00s MIP6MH_BE - build passed 7760C958 000.00s MIP6MH_BE - dissection passed 4F7A0CFB 000.10s get_trace() passed 835F8157 000.03s show() passed 698AEC27 000.01s graph() Campaign CRC=03AF9594 in 003.54s SHA=B6EA050DA4A2E493F42EC00E03D3F205C1870762 PASSED=519 FAILED=0 ━ Loading: test/scapy/layers/ipsec.uts passed BE787E60 000.03s IPv4 / ESP - Transport - NULL - NULL passed 4BFD1475 000.04s IPv4 / ESP - Transport - DES - NULL passed 155233D5 000.04s IPv4 / ESP - Transport - 3DES - NULL passed A69D1594 000.04s IPv4 / ESP - Transport - AES-CBC - NULL passed 2B56C1E7 000.04s IPv4 / ESP - Transport - AES-CTR - NULL passed 4DFAD07B 000.04s IPv4 / ESP - Transport - Blowfish - NULL passed 98F92501 000.04s IPv4 / ESP - Transport - CAST - NULL passed 3BAEC1B7 000.03s IPv4 / ESP - Tunnel - NULL - NULL passed 5ABB7C32 000.03s IPv4 / ESP - Tunnel - DES - NULL passed 1A15D31C 000.03s IPv4 / ESP - Tunnel - 3DES - NULL passed E57F3DC8 000.03s IPv4 / ESP - Tunnel - AES-CBC - NULL passed FF95EAEE 000.03s IPv4 / ESP - Tunnel - AES-CTR - NULL passed 26D0946F 000.03s IPv4 / ESP - Tunnel - Blowfish - NULL passed DE8CCD12 000.03s IPv4 / ESP - Tunnel - CAST - NULL passed 721E4D4F 000.02s IPv4 / ESP - Transport - NULL - HMAC-SHA1-96 passed 64FE0475 000.02s IPv4 / ESP - Transport - NULL - HMAC-SHA1-96 - altered packet passed 0BDE7793 000.02s IPv4 / ESP - Transport - NULL - SHA2-256-128 passed A6571565 000.02s IPv4 / ESP - Transport - NULL - SHA2-256-128 - altered packet passed 8560553E 000.03s IPv4 / ESP - Transport - NULL - SHA2-384-192 passed DDA0FDA3 000.02s IPv4 / ESP - Transport - NULL - SHA2-384-192 - altered packet passed 34A2393C 000.03s IPv4 / ESP - Transport - NULL - SHA2-512-256 passed 6D26D606 000.02s IPv4 / ESP - Transport - NULL - SHA2-512-256 - altered packet passed 694EB733 000.02s IPv4 / ESP - Transport - NULL - HMAC-MD5-96 passed BF423759 000.02s IPv4 / ESP - Transport - NULL - HMAC-MD5-96 - altered packet passed 709B95B3 000.03s IPv4 / ESP - Transport - NULL - AES-CMAC-96 passed EEE91CF9 000.02s IPv4 / ESP - Transport - NULL - AES-CMAC-96 - altered packet passed 078AA3E2 000.03s IPv4 / ESP - Tunnel - NULL - HMAC-SHA1-96 passed 06FC4E82 000.03s IPv4 / ESP - Tunnel - NULL - HMAC-SHA1-96 - altered packet passed 98F2191A 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-256-128 passed 408778B7 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-256-128 - altered packet passed 4D54BFF9 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-384-192 passed D29966C1 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-384-192 - altered packet passed 5290C2AC 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-512-256 passed 01C7445A 000.03s IPv4 / ESP - Tunnel - NULL - SHA2-512-256 - altered packet passed 20A3D05C 000.03s IPv4 / ESP - Tunnel - NULL - HMAC-MD5-96 passed 2EB5CC3F 000.03s IPv4 / ESP - Tunnel - NULL - HMAC-MD5-96 - altered packet passed 16E04BDA 000.03s IPv4 / ESP - Tunnel - NULL - AES-CMAC-96 passed 9317B172 000.03s IPv4 / ESP - Tunnel - NULL - AES-CMAC-96 - altered packet passed 4BE244FC 000.03s IPv4 / ESP - Transport - AES-CBC - HMAC-SHA1-96 passed 4609DBBA 000.02s IPv4 / ESP - Transport - AES-CBC - HMAC-SHA1-96 - altered packet passed F7B73A46 000.02s IPv4 / ESP - Transport - AES-CBC - HMAC-SHA2-256-128 -- ESN passed 60743572 000.04s IPv4 / ESP - Transport - AES-GCM - NULL passed B816950E 000.04s IPv4 / ESP - Transport - AES-GCM - NULL -- ESN passed EFF2AEC3 000.02s IPv4 / ESP - Transport - AES-GCM - NULL - altered packet passed 0F5682F6 000.02s IPv4 / ESP - Transport - AES-GCM - NULL - altered packet -- ESN passed 8302D117 000.04s IPv4 / ESP - Transport - AES-NULL-GMAC - NULL passed 2FA68526 000.04s IPv4 / ESP - Transport - AES-NULL-GMAC - NULL -- ESN passed 9615B34A 000.02s IPv4 / ESP - Transport - AES-NULL-GMAC - NULL - altered packet passed CDB6DA9C 000.02s IPv4 / ESP - Transport - AES-NULL-GMAC - NULL - altered packet -- ESN passed 73577967 000.04s IPv4 / ESP - Transport - AES-CCM - NULL passed D1252BD3 000.03s IPv4 / ESP - Transport - AES-CCM - NULL - altered packet passed 686304BF 000.03s IPv4 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 passed AB05FAD0 000.03s IPv4 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 - altered packet passed ECB1C0E0 000.03s IPv4 / ESP - Tunnel - AES-GCM - NULL passed 6F8AF28C 000.03s IPv4 / ESP - Tunnel - AES-GCM - NULL -- ESN passed BB0FFC78 000.03s IPv4 / ESP - Tunnel - AES-GCM - NULL - altered packet passed 6A6B97BB 000.03s IPv4 / ESP - Tunnel - AES-GCM - NULL - altered packet - ESN passed E96FBCF2 000.03s IPv4 / ESP - Tunnel - AES-CTR - NULL - verify no cipher align padding passed 7FA18A3D 000.02s IPv4 / ESP - Tunnel - AES-GCM - NULL - verify no cipher align padding passed 574F37C7 000.03s IPv4 / ESP - Tunnel - AES-CCM - NULL passed D1252BD3 000.03s IPv4 / ESP - Tunnel - AES-CCM - NULL passed 7BF5C43E 000.03s IPv4 / AH - Transport - HMAC-SHA1-96 passed 8FC8F7C3 000.03s IPv4 / AH - Transport - HMAC-SHA1-96 - altered packet passed DEAF6343 000.04s IPv4 / AH - Transport - SHA2-256-128 passed F07B1D6E 000.03s IPv4 / AH - Transport - SHA2-256-128 - altered packet passed 76DD92B4 000.03s IPv4 / AH - Transport - SHA2-384-192 passed 9A59C5D3 000.03s IPv4 / AH - Transport - SHA2-384-192 - altered packet passed 941180D1 000.03s IPv4 / AH - Transport - SHA2-512-256 passed 6966E0A6 000.03s IPv4 / AH - Transport - SHA2-512-256 - altered packet passed 501B87DD 000.03s IPv4 / AH - Transport - HMAC-MD5-96 passed 9137EE25 000.03s IPv4 / AH - Transport - HMAC-MD5-96 - altered packet passed B2B64BD5 000.03s IPv4 / AH - Transport - AES-CMAC-96 passed B23F77A5 000.03s IPv4 / AH - Transport - AES-CMAC-96 - altered packet passed AF01DEBB 000.03s IPv4 / AH - Transport - AES-CMAC-96 -- ESN passed 4F05F601 000.03s IPv4 / AH - Transport - AES-CMAC-96 - altered packet -- ESN passed 7FCBA758 000.04s IPv4 / AH - Tunnel - HMAC-SHA1-96 passed 018695A1 000.04s IPv4 / AH - Tunnel - HMAC-SHA1-96 - altered packet passed BB8D7092 000.04s IPv4 / AH - Tunnel - SHA2-256-128 passed 123FCDAA 000.04s IPv4 / AH - Tunnel - SHA2-256-128 - altered packet passed 579EC3B4 000.04s IPv4 / AH - Tunnel - SHA2-384-192 passed 31BB6007 000.04s IPv4 / AH - Tunnel - SHA2-384-192 - altered packet passed C7B6B9F7 000.04s IPv4 / AH - Tunnel - SHA2-512-256 passed 7FC9D985 000.04s IPv4 / AH - Tunnel - SHA2-512-256 - altered packet passed F3253BC3 000.04s IPv4 / AH - Tunnel - HMAC-MD5-96 passed E1C72CDF 000.04s IPv4 / AH - Tunnel - HMAC-MD5-96 - altered packet passed 6CFC870B 000.04s IPv4 / AH - Tunnel - AES-CMAC-96 passed A811BE4C 000.04s IPv4 / AH - Tunnel - AES-CMAC-96 - altered packet passed EE3732E8 000.04s IPv4 / AH - Tunnel - AES-CMAC-96 -- ESN passed 2A318FFA 000.04s IPv4 / AH - Tunnel - AES-CMAC-96 - altered packet -- ESN passed E7481782 000.03s IPv4 / UDP / ESP - NAT-Traversal - Tunnel passed 9C458FCA 000.03s IPv4 / UDP / ESP - NAT-Traversal - Transport passed 5082BF75 000.03s IPv6 / ESP - NAT-Traversal - Transport passed EE75EC62 000.02s IPv6 / ESP - Transport - NULL - NULL passed 197F8DB9 000.02s IPv6 / ESP - Transport - AES-CBC - NULL passed E315218B 000.02s IPv6 / ESP - Transport - NULL - HMAC-SHA1-96 passed DB146065 000.02s IPv6 / ESP - Transport - NULL - HMAC-SHA1-96 - altered packet passed D6437C81 000.02s IPv6 / ESP - Transport - AES-CBC - HMAC-SHA1-96 passed 2CB4D6C9 000.02s IPv6 / ESP - Transport - AES-CBC - HMAC-SHA1-96 - altered packet passed FB103C68 000.02s IPv6 / ESP - Transport - AES-GCM - NULL passed DDBFA505 000.02s IPv6 / ESP - Transport - AES-GCM - NULL - altered packet passed CED8FFAD 000.02s IPv6 / ESP - Transport - AES-CCM - NULL passed 890E77A4 000.02s IPv6 / ESP - Transport - AES-CCM - NULL - altered packet passed 927AD276 000.03s IPv6 / ESP - Tunnel - NULL - NULL passed 54B635F6 000.03s IPv6 / ESP - Tunnel - AES-CBC - NULL passed B3C286B5 000.03s IPv6 / ESP - Tunnel - NULL - HMAC-SHA1-96 passed B62FB7B2 000.03s IPv6 / ESP - Tunnel - NULL - HMAC-SHA1-96 - altered packet passed 90A551A2 000.03s IPv6 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 passed 76ED653B 000.03s IPv6 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 - altered packet passed 467BD474 000.03s IPv6 / ESP - Tunnel - AES-GCM - NULL passed E168D060 000.03s IPv6 / ESP - Tunnel - AES-GCM - NULL - altered packet passed 7BF3BE38 000.03s IPv6 / ESP - Tunnel - AES-CCM - NULL passed 0BF1F1B8 000.03s IPv6 / ESP - Tunnel - AES-CCM - NULL - altered packet passed 02D509E0 000.03s IPv6 / AH - Transport - HMAC-SHA1-96 passed 8BDBC8D2 000.03s IPv6 / AH - Transport - HMAC-SHA1-96 - altered packet passed 63E63CDF 000.03s IPv6 / AH - Transport - SHA2-256-128 passed 4997ABA2 000.03s IPv6 / AH - Transport - SHA2-256-128 - altered packet passed E1A95B92 000.03s IPv6 / AH - Tunnel - HMAC-SHA1-96 passed 72FCFD4D 000.03s IPv6 / AH - Tunnel - HMAC-SHA1-96 - altered packet passed 74533187 000.04s IPv6 / AH - Tunnel - SHA2-256-128 passed 5BAE868B 000.03s IPv6 / AH - Tunnel - SHA2-256-128 - altered packet passed 629BA203 000.05s IPv6 + Extensions / AH - Transport passed 2CED8A9F 000.04s IPv6 + Routing Header / AH - Transport Campaign CRC=99AACA59 in 003.66s SHA=6D0D04C55881A6BC8B5BCD927FB980B497AF1793 PASSED=122 FAILED=0 ━ Loading: test/scapy/layers/isakmp.uts passed 971541D5 000.02s ISAKMP - Phase 1 - Aggressive Security Association dissection passed 73120E2E 000.01s ISAKMP - Over NAT-Transversal - dissection passed F28B31C6 000.01s ISAKMP - Phase 2 - Security Association dissection passed C7A26A33 000.01s ISAKMP_payload_Transform passed F32DF800 000.02s ISAKMP_payload_Transform build passed AAE066B0 000.01s ISAKMP_payload_Transform dissection passed 1282F975 000.01s ISAKMP_payload_Notify passed DE39CB8B 000.01s ISAKMP_payload_delete Campaign CRC=30DA2388 in 000.09s SHA=8C1CA569FFAC4DAF4FC95E4416E09D54A71A4868 PASSED=8 FAILED=0 ━ Loading: test/scapy/layers/kerberos.uts passed B0D82850 000.01s Parse AS-REQ passed EB84AB16 000.01s Parse KRB-ERROR passed 7E952D53 000.01s Parse AS-REP passed CB82F105 000.02s Parse TGS-REQ passed 43B593A8 000.01s Parse TGS-REP passed C0620561 000.00s Create Key (RC4_HMAC) passed BF0CB69A 000.01s Parse AS-REQ (no preauth) passed 04B28AAD 000.01s Parse and decrypt AS-REP (no preauth, RC4) passed 814BCAA9 000.01s Parse and decrypt TGS-REQ (DES-CBC-MD5) passed A5017D27 000.01s Parse and decrypt TGS-REP (DES-CBC-MD5) passed 630685B3 000.01s FAST - Parse FAST AS-Req passed 00E72D58 000.15s FAST - Decrypt fast ticket in AS-REQ passed BEBD6796 000.01s FAST - Decrypt authenticator in AS-REQ passed 5B6B7548 000.00s FAST - Compute the armor key passed 250EEB18 000.01s FAST - Decrypt KDC REQ BODY from AS-REQ passed 3AE67EF6 000.00s FAST - Check Fast Armor checksum passed EACEBCCC 000.01s Test Kerberos InnerToken wrapping (ancient RFC1964) passed 675FCC94 000.15s MSPAC - Parse WIN2K-PAC (real life) passed 01FF33A9 000.18s MSPAC - Parse WIN2K-PAC (MS-PAC sect 3) passed 5D96DC90 008.84s MSPAC - Build WIN2K-PAC (MS-PAC sect 3) passed E1A0E6A4 000.01s MSPAC - Dissect and rebuild UPN_DNS_INFO passed 5568A621 000.02s MSPAC - Construct a CLAIMS_SET object passed 47D54995 000.01s MSPAC - Check that Pointers, Arrays, etc. were inferred passed 1173A923 000.01s MSPAC - Build the packet passed 18B93418 000.02s MSPAC - Dissect the packet passed 21AE2D38 000.00s Ticketer++ - Load ticketer module passed 079E184A 000.00s Ticketer++ - Write ccache to disk passed 6965E419 000.02s Ticketer++ - Create and load Ticketer object passed CE915728 000.40s Ticketer++ - Get ticket 0, change it, resign it and set it back passed D3F4D1EF 000.01s Ticketer++ - Call show() with ccache passed 3316B8DD 000.01s Ticketer++ - Save to disk passed 2554A757 000.00s Ticketer++ - Read and check written ccache passed 907CB22D 027.91s Ticketer++ - Import ticket passed 735F88BB 000.01s Ticketer++ - Create keytab passed 75403421 000.00s Ticketer++ - Get SPN ssp passed DCBAA62C 000.01s Ticketer++ - Load keytab passed C4CFC828 000.01s Ticketer++ - Call show() with keytab passed F2B5BBB9 000.00s Ticketer++ - Get UPN ssp passed C27B2FA4 000.00s Ticketer++ - Save keytab passed F3C0C4EC 000.02s RFC3691 - Test vectors for KRB-FX-CF2 passed 050B7DA0 000.01s RFC3691 - Test vectors for _n_fold passed F56AA631 000.01s RFC3691 - Test vectors for mit_des_string_to_key passed 70160FD4 000.01s RFC3691 - Test vectors for DES3 passed 4EF5B63D 000.01s RFC3692 - Test vectors for AES passed B7D6BE3F 000.05s RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample results for string-to-key conversion passed 5AC01D24 000.01s RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample results for key derivation passed 92138F88 000.02s RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample encryptions and decryptions passed 674A10F2 000.00s RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample checksums passed 8F0224F5 000.00s RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample pseudorandom function (PRF) invocations passed CA4ED12B 000.01s Decrypt PA-ENC-TIMESTAMP passed DBB7D7C1 000.02s [MS-KILE] RC4 GSS_WrapEx (RFC4757) test vectors (sect 4.5) passed BED47B30 000.00s [MS-KILE] RC4 GSS_UnwrapEx (RFC4757) test vectors (sect 4.5) passed 5E7F9DF5 000.02s Create randomness-mock context manager passed 69D2899C 000.01s Create client and server SPNEGOSSP[KerberosSSP] passed C38095B1 000.06s GSS_Init_sec_context (negTokenInit: KRB_AP_REQ) passed DB08291F 000.14s GSS_Accept_sec_context (SPNEGO_negTokenResp: KRB_AP_REQ->KRB_AP_REP) passed 9371F051 000.01s GSS_Init_sec_context (SPNEGO_negToken: KRB_AP_REP->OK) passed 3A1D403E 000.01s GSS_GetMICEx/GSS_VerifyMICEx: client sends a signed payload passed 71476F8D 000.01s GSS_GetMICEx/GSS_VerifyMICEx: server answers back passed 64BE6B2A 000.02s GSS_GetMICEx/GSS_VerifyMICEx: inject fault passed 5DCF4E81 000.01s Create client and server KerberosSSP (raw) passed B5A34F99 000.05s GSS_Init_sec_context (KRB_AP_REQ) - DCE_STYLE passed DC7BBDE9 000.12s GSS_Accept_sec_context (KRB_AP_REQ->KRB_AP_REP) - DCE_STYLE passed 44A1F973 000.01s GSS_Init_sec_context (SPNEGO_negToken: KRB_AP_REP->KRB_AP_REP) - DCE_STYLE passed 3604AD4D 000.01s GSS_Accept_sec_context (KRB_AP_REP->OK) - DCE_STYLE passed B7818504 000.01s GSS_Wrap/GSS_Unwrap: client sends wrapped payload without confidentiality passed 09B2D54F 000.01s GSS_Wrap/GSS_Unwrap: server answers back without confidentiality passed DC61C9C4 000.03s GSS_WrapEx/GSS_UnwrapEx: client sends wrapped payload with confidentiality passed 7A7B8137 000.02s GSS_WrapEx/GSS_UnwrapEx: server answers back confidentiality Campaign CRC=D4911A1E in 038.68s SHA=062E71E80DBB76CDEBD00EB4EE01C83C2E0A4AD8 PASSED=69 FAILED=0 ━ Loading: test/scapy/layers/l2.uts passed 9198E99F 000.00s Test ARPingResult output passed 470D7569 000.08s arp_mitm - IP to IP passed B1A8DF28 000.10s arp_mitm - IP to range passed 8D22216F 000.00s STP - Basic Instantiation passed AA3BE87F 000.00s STP - Basic Dissection passed 21257BAD 000.00s Simple Ether() / ARP() show passed AFE513E9 000.01s ARP for IPv4 passed A8F2D976 000.00s ARP for IPv6 passed 5EEB24C2 000.01s Dummy ARP passed C41B04AB 000.01s 802.1Q VLAN passed ABEE4F93 000.01s 802.1ad Q-in-Q passed F03DE515 000.01s 802.1ah PBB mac-in-mac passed F1C2D997 000.04s 802.1ah PBB mac-in-mac - answer passed 6EF46D45 000.00s CookedLinux - Basic Dissection passed 2B4AFD82 000.00s CookedLinuxV2 - Basic Dissection Campaign CRC=75825EA5 in 000.28s SHA=CAEC4260D0B9627AFEE4C6B0741E9AAEE3053314 PASSED=15 FAILED=0 ━ Loading: test/scapy/layers/l2tp.uts passed 2CF8D04B 000.01s L2TP - build passed A230380E 000.00s L2TP - build with computed length passed 6BDF4376 000.00s L2TP - dissection Campaign CRC=AF6A5704 in 000.01s SHA=E073D3FFB3DF99157254F90BBBF5B967C8CABA6F PASSED=3 FAILED=0 ━ Loading: test/scapy/layers/ldap.uts passed D8C5FC33 000.00s Load LDAP passed 02DBB16C 000.02s LDAP_UnbindRequest passed 31CF6E74 000.02s LDAP_BindRequest passed B63B357B 000.01s LDAP_BindResponse passed E8463FE4 000.03s LDAP_SearchRequest passed 317D8080 000.11s LDAP_SearchResponse passed 175EC7B5 000.02s Basic CLDAP dissection & build test passed C345924B 000.03s More advanced CLDAP dissection & build test passed 328F22F1 000.00s Test dissection of Microsoft LDAP passed 1957209B 000.02s Test re-build of Microsoft LDAP passed 7EB0E3D7 000.04s Craft new Microsoft LDAP Search Request with Controls passed 21E2E4BB 000.01s Dissect NETLOGON_SAM_LOGON_RESPONSE_EX - V1+V5EX+V5EXWITH_IP passed 5BAC9392 000.00s Dissect NETLOGON_SAM_LOGON_RESPONSE_EX - V1+V5EX passed 04FF1BE1 000.00s Dissect NETLOGON_SAM_LOGON_RESPONSE - V1+V5 passed 8F387767 000.00s Dissect NETLOGON_SAM_LOGON_RESPONSE_NT40 - V1 Campaign CRC=A6B504DE in 000.32s SHA=29AC6D3E570C3C4FBC6B0BCA119A9F00F95DB175 PASSED=15 FAILED=0 ━ Loading: test/scapy/layers/ldapopenldap.uts Campaign CRC=82E73D02 in 000.00s SHA=8489B2233D9B311F5FDB30CBA5687A1AA8130659 PASSED=0 FAILED=0 ━ Loading: test/scapy/layers/llmnr.uts passed 6C984879 000.00s Simple packet dissection passed 1770C0CD 000.00s Dissection with the "T"entative bit set and the "TrunCation" bit unset passed 42099687 000.01s Packet build / dissection passed 38C132CD 000.00s Answers - building passed F1258B96 000.00s Answers - dissecting passed 4F7286DF 000.02s Summary Campaign CRC=2435930C in 000.04s SHA=755CACEE3E96A520852395A267A3B4FD76AC80F8 PASSED=6 FAILED=0 ━ Loading: test/scapy/layers/lltd.uts passed 99984E6C 000.01s Simple packet dissection passed FBB44224 000.01s Packet build / dissection passed 4D757290 000.16s Attribute build / dissection passed 8512CA50 000.03s Large TLV passed 7A47CDD6 000.00s Summary Campaign CRC=87208042 in 000.20s SHA=E627381FCCCD25937427253733BEE3011F5AC4DD PASSED=5 FAILED=0 ━ Loading: test/scapy/layers/mgcp.uts passed 5B4119BB 000.01s MGCP - build passed A0ED03AF 000.00s MGCP - dissect Campaign CRC=12D768A8 in 000.01s SHA=FFE6B99B6805F15DD4D36F390A3922C99BCFE604 PASSED=2 FAILED=0 ━ Loading: test/scapy/layers/mobileip.uts passed E653E518 000.01s MobileIP - build passed A735736A 000.00s MobileIP - dissect Campaign CRC=84239F45 in 000.01s SHA=89D0098ABA1598654C50D3ACA3D0630C08B2C950 PASSED=2 FAILED=0 ━ Loading: test/scapy/layers/msdrsr.uts passed 4D914143 000.23s [EXCH] - Load MSDRSR exchange and decrypt (SPNEGOSSP/NTLMSSP) passed 233A7676 000.01s [EXCH] - Check IDL_DRSBind_Request passed 4E657460 000.00s [EXCH] - Check IDL_DRSBind_Response passed 5BBCD645 000.01s [EXCH] - Check IDL_DRSCrackNames_Request passed 19951D03 000.01s [EXCH] - Check IDL_DRSCrackNames_Response Campaign CRC=2BABE088 in 000.26s SHA=9EFE8F35946992E307DA5D68EEB370DAB4947090 PASSED=5 FAILED=0 ━ Loading: test/scapy/layers/msnrpc.uts passed 330D6ACA 000.01s [MS-NRPC] test vectors - sect 4.2 passed A6917201 000.01s [MS-NRPC] test vectors - sect 4.3 passed FDB677E9 000.02s [MS-NRPC] test vectors - sect 4.3.1 passed 7AE1E08C 000.00s [EXCH] - Load MSRPCE and bind passed BA209B56 000.08s [EXCH] - Parse NRPC exchange (pcap) passed B0F13903 000.01s [EXCH] - Check ept_map_Request passed F1E97FD9 000.02s [EXCH] - Re-build ept_map_Request from scratch passed AD59EA9A 000.01s [EXCH] - Check ept_map_Response passed F5EBF4ED 000.01s [EXCH] - Re-build ept_map_Response from scratch passed FB87BC18 000.00s [EXCH] - Check NetrServerReqChallenge_Request passed 4FC98B71 000.01s [EXCH] - Re-build NetrServerReqChallenge_Request from scratch passed 3543ABF0 000.00s [EXCH] - Check NetrServerReqChallenge_Response passed DED2F6E6 000.00s [EXCH] - Re-build NetrServerReqChallenge_Response from scratch passed AB148ECB 000.00s [EXCH] - Check NetrServerAuthenticate3_Request passed 62E5D792 000.01s [EXCH] - Re-build NetrServerAuthenticate3_Request from scratch passed C874C6D7 000.00s [EXCH] - Check NetrServerAuthenticate3_Response passed 1250AE04 000.01s [EXCH] - Re-build NetrServerAuthenticate3_Response from scratch passed 9EE08EDC 000.01s [NetlogonSSP] - Create randomness-mock context manager passed AEB88361 000.00s [NetlogonSSP] - RC4 - Create client and server NetlogonSSP passed 6E19D682 000.00s [NetlogonSSP] - RC4 - GSS_Init_sec_context (NL_AUTH_MESSAGE) passed 5D8EC78C 000.00s [NetlogonSSP] - RC4 - GSS_Accept_sec_context (NL_AUTH_MESSAGE->NL_AUTH_MESSAGE) passed E1EDC873 000.00s [NetlogonSSP] - RC4 - GSS_Init_sec_context (NL_AUTH_MESSAGE->OK) passed 4F68D876 000.02s [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload passed A2E6D9D9 000.01s [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: server answers back passed 27457AA7 000.01s [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: inject fault passed AEA3D9EA 000.00s [NetlogonSSP] - AES - Create client and server NetlogonSSP passed 6E19D682 000.00s [NetlogonSSP] - AES - GSS_Init_sec_context (NL_AUTH_MESSAGE) passed 5D8EC78C 000.00s [NetlogonSSP] - AES - GSS_Accept_sec_context (NL_AUTH_MESSAGE->NL_AUTH_MESSAGE) passed E1EDC873 000.00s [NetlogonSSP] - AES - GSS_Init_sec_context (NL_AUTH_MESSAGE->OK) passed 651E76B1 000.01s [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload passed EFBCE375 000.01s [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: server answers back passed 27457AA7 000.01s [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: inject fault Campaign CRC=11A858CC in 000.33s SHA=8A6D14633EC822C61BCDD1405B763691209E2F73 PASSED=32 FAILED=0 ━ Loading: test/scapy/layers/msnrtp.uts passed 92F96203 000.05s [MS-NRBF] parse .NET Binary Format passed 712F005A 000.45s [MS-NRBF] build .NET Binary Format Campaign CRC=1782B7FA in 000.50s SHA=A4BCC5757EA93781C89793906BD69CB32D7D12A6 PASSED=2 FAILED=0 ━ Loading: test/scapy/layers/netbios.uts passed 962C167D 000.01s NBNSQueryRequest - build & dissect passed DC633542 000.01s NBNSQueryResponse - build & dissect passed 7841468E 000.01s NBNSQueryResponse answers NBNSQueryRequest passed 900E1AFE 000.01s NBNSQueryResponse answers long NBNSQueryRequest passed 175FD436 000.01s NBNSNodeStatusResponse - build & dissect passed 728B2806 000.01s NBNSNodeStatusRequest - build and answers passed BE88B471 000.01s NBNSWackResponse - build & dissect passed 741E538B 000.00s NBTSession passed 940E3A04 000.00s OSS-Fuzz Findings Campaign CRC=F7B13C45 in 000.08s SHA=376815D43742F8C924AAE5EC7AA889EA029D08C9 PASSED=9 FAILED=0 ━ Loading: test/scapy/layers/netflow.uts passed FAA2CA0C 000.02s NetflowHeaderV5 - basic building passed AA93666E 000.01s NetflowHeaderV5 - UDP bindings passed 4C3D693B 000.00s NetflowHeaderV5 - basic dissection passed 86E34794 000.05s NetflowV9 - advanced dissection passed E3C15092 000.03s NetflowV9 - Multiple FlowSets in one packet passed FE5EF859 000.06s NetflowV9 - build and dissection passed 9FC287A9 000.06s NetflowV9 - advanced build passed DC95D31B 000.01s NetflowV9 - padding #GH2257 passed D19D866C 000.01s NetflowV9 - Options Template build passed EC671098 000.16s NetflowV9 - Advanced build, multiple flowsets and multiple records by flowset passed AB23921C 000.02s NetflowV9 - Advanced dissection, complete example passed 18BDF888 000.04s IPFix dissection passed F0F3B7D8 000.02s NetflowV10/IPFIX - dissection without padding (GH3101) passed 9B964405 000.03s NetflowV10/IPFIX - build passed CF54A5E0 000.05s NetflowSession - dissect packet NetflowV9 packets on-the-flow Campaign CRC=7297834E in 000.57s SHA=C839AA93C032E3BA6B061428BFD30B98ED936B04 PASSED=15 FAILED=0 ━ Loading: test/scapy/layers/ntlm.uts passed 6AF74FDB 000.00s [MS-NLMP] 4.2.1 - Common Values passed 82DAAA5E 000.00s [MS-NLMP] 4.2.4 passed 00A71206 000.00s [MS-NLMP] 4.2.4.1.1 NTOWFv2() passed B629E3B1 000.01s Build NTLMv2_RESPONSE passed C3A9AE1B 000.00s [MS-NLMP] 4.2.4.2.2 NTLMv2 Response passed BA4F35F3 000.00s [MS-NLMP] 4.2.4.1.2 Session Base Key passed E411B70D 000.00s [MS-NLMP] 4.2.4.2.3 Encrypted Session Key passed 45622E3A 000.01s [MS-NLMP] 4.2.4.3 Messages passed 67DF9467 000.01s [MS-NLMP] 4.2.4.4 GSS_WrapEx passed C7DF1FDC 000.01s Create randomness-mock context manager passed 43804612 000.01s Create client and server SPNEGOSSPs passed 0D2B51EF 000.02s GSS_Init_sec_context (negTokenInit: NTLM_NEGOTIATE) passed 5028BA67 000.03s GSS_Accept_sec_context (SPNEGO_negTokenResp: NTLM_NEGOTIATE->NTLM_CHALLENGE) passed CF5F42E9 000.05s GSS_Init_sec_context (SPNEGO_negToken: NTLM_CHALLENGE->NTLM_AUTHENTICATE) passed 33BD4628 000.02s GSS_Accept_sec_context (SPNEGO_negToken: NTLM_AUTHENTICATE->OK) passed 18801F1F 000.01s GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload passed 9BFC6831 000.01s GSS_WrapEx/GSS_UnwrapEx: server answers back passed 02C19E48 000.01s GSS_WrapEx/GSS_UnwrapEx: client continues with seqnum 2 passed 27457AA7 000.01s GSS_WrapEx/GSS_UnwrapEx: inject fault passed 68104229 000.01s Real exchange - Parse token 0 from server passed 6BB04B8A 000.01s Real exchange - Create server SPNEGOSSP passed 3F58C493 000.01s Real exchange - Parse token 1 from client passed E22CA884 000.01s Real exchange - Inject token 2 from server passed 14D5160A 000.02s Real exchange - Parse token 3 from client passed 57141913 000.00s Real exchange - Check mechListMIC against token 4 from server passed 4379BACC 000.01s MISC - Dissect legacy formed NTLM messages Campaign CRC=B99463DB in 000.29s SHA=4803446DB37683EF6FB475410FF5AF239169EDD2 PASSED=26 FAILED=0 ━ Loading: test/scapy/layers/ntp.uts passed B1C374EB 000.00s specific haslayer and getlayer implementations for NTP passed F5C8DE7F 000.01s NTP - Layers (1) passed CAA67885 000.00s NTP - Layers (2) passed 54C8D404 000.00s NTP - sessions (1) passed FC3E08F7 000.00s NTP - sessions (2) passed D9DAEC57 000.00s NTPHeader - Basic checks passed 012A5DF1 000.00s NTPHeader - Dissection passed D936F900 000.00s NTPHeader - High precision passed 17A42957 000.00s NTPHeader - KoD passed 5D4004E1 000.00s NTPHeader - Extension dissection test passed 9BDAC2CB 000.00s NTPAuthenticator passed 921B2291 000.01s NTP Control (mode 6) - CTL_OP_READSTAT (1) - request passed DE657B80 000.01s NTP Control (mode 6) - CTL_OP_READSTAT (2) - response passed D2CCA9EB 000.02s NTP Control (mode 6) - CTL_OP_READSTAT (3) - multi passed 635312D1 000.00s NTP Control (mode 6) - CTL_OP_READVAR (1) - request passed 68F5C4B7 000.01s NTP Control (mode 6) - CTL_OP_READVAR (2) - response (1st packet) passed 5883FFD6 000.01s NTP Control (mode 6) - CTL_OP_READVAR (3) - response (2nd packet) passed 64AFCAA2 000.00s NTP Control (mode 6) - CTL_OP_READVAR (4) - request passed 60ABEC03 000.01s NTP Control (mode 6) - CTL_OP_READVAR (5) - response passed 3E9BE0B0 000.00s NTP Control (mode 6) - CTL_OP_WRITEVAR (1) - request passed D96BFB27 000.01s NTP Control (mode 6) - CTL_OP_WRITEVAR (2) - response passed 4951EAE0 000.01s NTP Control (mode 6) - CTL_OP_CONFIGURE (1) - request passed 4A93EF42 000.01s NTP Control (mode 6) - CTL_OP_CONFIGURE (2) - response passed B954EB4B 000.01s NTP Control (mode 6) - CTL_OP_SAVECONFIG (1) - request passed 291321C3 000.01s NTP Control (mode 6) - CTL_OP_SAVECONFIG (2) - response passed 8973B356 000.00s NTP Control (mode 6) - CTL_OP_REQ_NONCE (1) - request passed CD3592CE 000.00s NTP Control (mode 6) - CTL_OP_REQ_NONCE (2) - response passed 95D3561C 000.00s NTP Control (mode 6) - CTL_OP_READ_MRU (1) - request passed D116F86F 000.00s NTP Control (mode 6) - CTL_OP_READ_MRU (2) - response passed 4CF8154E 000.00s NTP Private (mode 7) - error - Dissection passed 8DED59A7 000.00s NTP Private (mode 7) - REQ_PEER_LIST (1) - request passed B5B89436 000.01s NTP Private (mode 7) - REQ_PEER_LIST (2) - response passed A82A4A4E 000.01s NTP Private (mode 7) - REQ_PEER_INFO (1) - request passed ABDF6258 000.01s NTP Private (mode 7) - REQ_PEER_INFO (2) - response passed 562B4C04 000.00s NTP Private (mode 7) - REQ_PEER_LIST_SUM (1) - request passed 154172E1 000.01s NTP Private (mode 7) - REQ_PEER_LIST_SUM (2) - response (1st packet) passed A11D2B73 000.01s NTP Private (mode 7) - REQ_PEER_LIST_SUM (3) - response (2nd packet) passed 0F736CE9 000.01s NTP Private (mode 7) - REQ_PEER_LIST_SUM (3) - response (3rd packet) passed 8D5CCC16 000.00s NTP Private (mode 7) - REQ_PEER_STATS (1) - request passed 96F88621 000.01s NTP Private (mode 7) - REQ_PEER_STATS (2) - response passed EC26D7D1 000.00s NTP Private (mode 7) - REQ_SYS_INFO (1) - request passed 8E0352E3 000.01s NTP Private (mode 7) - REQ_SYS_INFO (2) - response passed E79BDEEF 000.00s NTP Private (mode 7) - REQ_SYS_STATS (1) - request passed 0EF15231 000.00s NTP Private (mode 7) - REQ_SYS_STATS (2) - response passed E84EC19E 000.00s NTP Private (mode 7) - REQ_IO_STATS (1) - request passed 860BFB5B 000.00s NTP Private (mode 7) - REQ_IO_STATS (2) - response passed ED0234B1 000.00s NTP Private (mode 7) - REQ_MEM_STATS (1) - request passed FD8763D3 000.01s NTP Private (mode 7) - REQ_MEM_STATS (2) - response passed DD835604 000.00s NTP Private (mode 7) - REQ_LOOP_INFO (1) - request passed D00EE28E 000.00s NTP Private (mode 7) - REQ_LOOP_INFO (2) - response passed 1225CF9D 000.00s NTP Private (mode 7) - REQ_TIMER_STATS (1) - request passed 6A3AE8FB 000.00s NTP Private (mode 7) - REQ_TIMER_STATS (2) - response passed 0C44BB13 000.01s NTP Private (mode 7) - REQ_CONFIG (1) - request passed 67EA4136 000.00s NTP Private (mode 7) - REQ_CONFIG (2) - response passed 61ABB1C2 000.01s NTP Private (mode 7) - REQ_UNCONFIG (1) - request passed 3394EC2E 000.00s NTP Private (mode 7) - REQ_UNCONFIG (2) - response passed 691947CA 000.01s NTP Private (mode 7) - REQ_RESADDFLAGS (1) - request passed F4FB6611 000.01s NTP Private (mode 7) - REQ_RESSUBFLAGS (1) - request passed E186C328 000.01s NTP Private (mode 7) - REQ_RESET_PEER (1) - request passed 14F095AD 000.01s NTP Private (mode 7) - REQ_AUTHINFO (1) - response passed 47F3B8E8 000.01s NTP Private (mode 7) - REQ_ADD_TRAP (1) - request passed 2440687E 000.00s NTP Private (mode 7) - REQ_ADD_TRAP (2) - response passed 7661BDB5 000.01s NTP Private (mode 7) - REQ_CLR_TRAP (1) - request passed 63BDCDA1 000.00s NTP Private (mode 7) - REQ_CLR_TRAP (2) - response passed FCCAE19C 000.01s NTP Private (mode 7) - REQ_GET_CTLSTATS - response passed 45B59D08 000.00s NTP Private (mode 7) - REQ_GET_KERNEL (1) - request passed FA987B6E 000.01s NTP Private (mode 7) - REQ_GET_KERNEL (2) - response passed 5E40EC36 000.00s NTP Private (mode 7) - REQ_MON_GETLIST_1 (1) - request passed C420FEA9 000.01s NTP Private (mode 7) - REQ_MON_GETLIST_1 (2) - response passed 7DDACBD6 000.01s NTP Private (mode 7) - REQ_IF_STATS (1) - request passed 9C837A0C 000.01s NTP Private (mode 7) - REQ_IF_STATS (2) - response passed 0B01775D 000.01s NTP Private (mode 7) - REQ_IF_STATS (3) - response passed DA9022B8 000.01s NTP Private (mode 7) - REQ_IF_RELOAD (1) - request passed B6E83CEE 000.01s NTP Private (mode 7) - REQ_IF_RELOAD (2) - response passed 5969E1EC 000.02s Build an NTP packet using RawVal Campaign CRC=0A8D1CBE in 000.43s SHA=D39CAF8D31EF66A536A9295FFB484AA4DFE8DB91 PASSED=75 FAILED=0 ━ Loading: test/scapy/layers/pflog.uts passed 70336DF9 000.00s Load module passed 0732D6A0 000.01s Dissect PFLog packet of a IP()/TCP() dropped packet passed 02CFE070 000.01s Dissect PFLog packet of a IP()/UDP() dropped packet passed 8DE73CBE 000.01s Dissect PFLog packet of a IP()/ICMP() echo-request dropped packet passed 1FFCF54E 000.01s Dissect PFLog packet of a IPv6()/TCP() dropped packet passed D956AB2B 000.01s Dissect PFLog packet of a IPv6()/TCP() passed packet passed 4D0D9924 000.01s Dissect PFLog packet of a IPv6()/UDP() dropped packet passed E8E8A910 000.01s Dissect PFLog packet of a IPv6()/ICMP6() dropped packet passed BBA64F63 000.01s Dissect PFLog packet of a IPv6()/ICMP6() passed packet Campaign CRC=885A30E9 in 000.06s SHA=B414BC6A90B3FF72B9A753ECE93D46F08B1F2793 PASSED=9 FAILED=0 ━ Loading: test/scapy/layers/ppp.uts passed CC23140E 000.01s PPPoE passed 41DF45A2 000.01s PPPoE with tags (appended) passed B6A5A382 000.00s PPPoE with padding passed FEEB02E2 000.01s PPP/HDLC passed 6A6A4CAD 000.03s PPP IPCP passed EDA01755 000.02s PPP ECP passed 855B6AC8 000.00s PPP IP check that default protocol length is 2 bytes passed 8B5571D1 000.01s PPP check parsing with only one byte for protocol Campaign CRC=826DCFF3 in 000.09s SHA=D0D5C6270BB0805A3E62D4B31BD97E3D7EB35DF6 PASSED=8 FAILED=0 ━ Loading: test/scapy/layers/pptp.uts passed 6EFF2540 000.01s Test IP/GRE v0 decoding passed 9E2D0288 000.01s Test IP/GRE v1 decoding with PPP LCP passed 1D85559C 000.02s Test IP/GRE v1 encoding/decoding with PPP LCP Echo passed A9CFFD76 000.01s Test LCP Echo Request / Reply passed 6755A821 000.01s Test LCP Configure Request passed 625ED6EB 000.01s Test LCP Configure Ack passed 51549E14 000.01s Test LCP Configure Nak passed 94552902 000.01s Test LCP Configure Reject passed 140D790A 000.02s Test LCP Configure options passed 376EC727 000.01s Test LCP Auth option passed D8825501 000.01s Test LCP Code-Reject passed 78DFBBA4 000.01s Test LCP Protocol-Reject passed 870294C7 000.01s Test LCP Discard Request passed 584C7AE1 000.01s Test LCP Terminate-Request/Terminate-Ack passed D9FED231 000.01s Test PPP PAP Request passed 36B756A4 000.01s Test PPP PAP Authenticate-Ack passed C0AFFCCE 000.01s Test PPP PAP Authenticate-Nak passed D8483E17 000.01s Test PPP CHAP Challenge passed 0F6EEE34 000.01s Test PPP CHAP Response passed 0B028577 000.01s Test PPP CHAP Success passed 2594D84E 000.01s Test PPP CHAP Failure passed B44E36D2 000.01s Test PPTP Start-Control-Connection-Request passed ADA50819 000.01s Test PPTP Start-Control-Connection-Reply passed DE3D1768 000.00s Test PPTP Stop-Control-Connection-Request passed 0CD7142B 000.01s Test PPTP Stop-Control-Connection-Reply passed 06FAA0BD 000.00s Test PPTP Echo-Request passed 80AF2CB5 000.01s Test PPTP Echo-Reply passed 4AD76384 000.01s Test PPTP Outgoing-Call-Request passed 71E948C8 000.01s Test PPTP Outgoing-Call-Reply passed B2E32729 000.01s Test PPTP Incoming-Call-Request passed 5E58E216 000.01s Test PPTP Incoming-Call-Reply passed 81441A17 000.01s Test PPTP Incoming-Call-Connected passed 13FF9ECF 000.00s Test PPTP Call-Clear-Request passed DE4636EE 000.01s Test PPTP Call-Disconnect-Notify passed 2018BB75 000.01s Test PPTP WAN-Error-Notify passed 27E04195 000.00s Test PPTP Set-Link-Info Campaign CRC=B7F64895 in 000.33s SHA=44CEAEE04634AEBB37F103F83BC9BD30FEAE09CB PASSED=36 FAILED=0 ━ Loading: test/scapy/layers/quic.uts passed 1E4F40F5 000.01s QUIC - Dissect Client Initial Packet passed D1C28921 000.00s QUIC - Dissect Server Initial Packet passed F251BBCD 000.00s QUIC - Dissect Server Handshake Packet passed D4110786 000.02s QUIC - QuicPacketNumberField / QuicPacketNumberBitFieldLenField - variable lengths passed 0D23E90E 000.01s QUIC - QuicPacketNumberField / QuicPacketNumberBitFieldLenField - Out of range passed B6F17FD4 000.01s QUIC - QuicVarIntField - variable lengths passed 6AA022BB 000.01s QUIC - QuicVarIntField - Out of range Campaign CRC=7B5AB153 in 000.06s SHA=F8C3E564DD5C32F44F22E489D87CD917402A2177 PASSED=7 FAILED=0 ━ Loading: test/scapy/layers/radius.uts passed 1983D30D 000.01s IP/UDP/RADIUS - Build passed 5444466F 000.00s IP/UDP/RADIUS - Dissection passed CF9DE413 000.03s RADIUS - Access-Request - Dissection (1) passed 9550873D 000.00s RADIUS - compute_message_authenticator() passed 12FBC275 000.01s RADIUS - Access-Challenge - Dissection (2) passed 5EF55AC7 000.03s RADIUS - Access-Request - Dissection (3) passed D0B0142B 000.01s RADIUS - Access-Challenge - Dissection (4) passed E5F41CCF 000.01s RADIUS - Response Authenticator computation passed E0BDFCC9 000.00s RADIUS - Layers (1) passed DE55C66A 000.01s RADIUS - sessions (1) passed 11C5BF97 000.01s RADIUS - sessions (2) passed F08473B8 000.00s Issue GH#1407 passed D4D6BA76 000.00s RADIUS - attributes with IPv4 addresses passed A7229BDA 000.01s Radius - fragmented EAP - GH2832 passed 09569E8F 000.01s RadiusAttr_User_Password - Parse and Decrypt passed 656B9FD0 000.01s Radius - summary Campaign CRC=A91BFBDA in 000.15s SHA=38D5AEEF59854465F412BC3EC0A674D5412FD0AB PASSED=16 FAILED=0 ━ Loading: test/scapy/layers/rip.uts passed 3A6A3B66 000.01s RIP - build passed 34293B14 000.01s RIP - UDP bindings passed E6AB8522 000.00s RIP - dissection Campaign CRC=37F63DB6 in 000.02s SHA=2FF376083CD35FF6304A39EF36883E7F6A138E87 PASSED=3 FAILED=0 ━ Loading: test/scapy/layers/rtp.uts passed 324C5C42 000.01s test rtp with extension header passed 909F8468 000.01s test layer creation passed 1FF3ADC0 000.00s test RTP without extension Campaign CRC=BB198A8B in 000.02s SHA=BCB203F54B868CDF9727AF5FF0A1A2C849F966CA PASSED=3 FAILED=0 ━ Loading: test/scapy/layers/sctp.uts passed D987AE51 000.01s SCTP - Chunk Init - build passed 1F806BCF 000.00s SCTP - Chunk Init - dissection passed 56F2812B 000.00s SCTP - SCTPChunkSACK - build passed B85A0B9D 000.00s SCTP - SCTPChunkSACK - dissection passed 6FDB8476 000.00s SCTP - answers passed 05142461 000.00s SCTP basic header - Dissection passed 54DA06CB 000.01s basic SCTPChunkData - Dissection passed D2E586CA 000.01s basic SCTPChunkIData - Dissection passed A16D55B8 000.01s basic SCTPChunkForwardTSN - Dissection passed A0A94CBA 000.01s basic SCTPChunkIForwardTSN - Dissection passed D0DF0840 000.00s basic SCTPChunkInit - Dissection passed A72AD685 000.02s SCTPChunkInit multiple valid parameters - Dissection passed A9BB177A 000.00s basic SCTPChunkInitAck - Dissection passed 766DFE36 000.01s SCTPChunkInitAck with state cookie - Dissection passed 8F044F08 000.00s basic SCTPChunkSACK - Dissection passed 00A71D9B 000.00s basic SCTPChunkHeartbeatReq - Dissection passed 09DDEAC5 000.00s basic SCTPChunkHeartbeatAck - Dissection passed BAF0BB5C 000.00s basic SCTPChunkAbort - Dissection passed E1B1E71D 000.00s basic SCTPChunkShutDown - Dissection passed 34DC1D47 000.00s basic SCTPChunkShutDownAck - Dissection passed D9702DA0 000.00s basic SCTPChunkError - Dissection passed D0C7C437 000.00s basic SCTPChunkCookieEcho - Dissection passed AABA658F 000.00s basic SCTPChunkCookieAck - Dissection passed 8D89C618 000.00s basic SCTPChunkShutdownComplete - Dissection passed 0C98967E 000.00s basic SCTPChunkAuthentication - Dissection passed FA28403E 000.00s basic SCTPChunkAddressConf - Dissection passed 870BCF04 000.00s basic SCTPChunkAddressConfAck - Dissection passed 1192E830 000.00s basic SCTPChunkPad - Dissection passed E941D206 000.00s basic SCTPChunkReConfig - Dissection passed 725C81A7 000.00s SCTPChunkParamRandom - Consecutive calls passed 9C2102DE 000.01s SCTP in ICMP Campaign CRC=77261598 in 000.14s SHA=FB965BF91DB212736D9A91198D82EEBAE6E86F6D PASSED=31 FAILED=0 ━ Loading: test/scapy/layers/skinny.uts passed 385F025C 000.01s Skinny - build & dissection Campaign CRC=E78E7A9C in 000.01s SHA=C31E75483864D629BF18B199608D0681784E1A43 PASSED=1 FAILED=0 ━ Loading: test/scapy/layers/smb.uts passed 5C8041A4 000.00s Import passed 5A393D55 000.01s test SMB Generic Header - dissect passed E9C5A9D3 000.01s test SMB Negociate Header - assemble passed 3A069BCC 000.01s SMB Negotiate Request passed 7B556A01 000.02s SMB Negotiate Response Extended Security passed 43C12D97 000.01s SMB Setup AndX Request (ES) passed B9D2D5A5 000.02s SMB Setup AndX Response (ES) passed 6D99F794 000.01s SMB Setup AndX Request - accept incomplete (ES) passed 9F99FA5D 000.01s SMB Setup AndX Response - accept complete (ES) passed DF51F5FF 000.02s BRWS BecomeBackup - build passed FBD440B3 000.00s BRWS BecomeBackup - dissection passed 3078C513 000.02s BRWS HostAnnouncement - build passed A5D73736 000.01s BRWS HostAnnouncement - dissection passed DF0564E1 000.00s OSS-Fuzz Findings Campaign CRC=FADF1BC8 in 000.16s SHA=7417F391EB93644F77267C6D70C8C64393471800 PASSED=14 FAILED=0 ━ Loading: test/scapy/layers/smb2.uts passed 0E002AFB 000.02s SMB2 Header dissecting passed 52B9C30B 000.01s SMB2 Header assembling passed E0DF5CBA 000.01s Common fields in header passed 6FBF8DCE 000.00s SMB2 Negotiate Context in Request - type PREAUTH - disassemble passed 943A2FBE 000.00s SMB2 Negotiate Context in Request - type ENCRYPTION disassemble passed 91C4C51A 000.00s SMB2 Negotiate Context in Request - type COMPRESSION passed BEF52211 000.00s SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE passed D504D49F 000.01s test SMB2 Negotiate Protocol Request Header - assembling passed 51BB0FE5 000.01s Request with no 0x0311 in dialects passed 3ADE3D71 000.02s Common fields in header passed 582ED60C 000.00s SMB2 Negotiate Context in Response - Type PREAUTH passed FED4301A 000.00s SMB2 Negotiate Context in Response - Type ENCRYPTION passed 4023C12C 000.00s SMB2 Negotiate Context in Response - Type COMPRESSION passed B3385EB3 000.01s SMB2 Negotiate Protocol Response Header assembling passed F6CE7142 000.01s Common fields in header passed 6FBF8DCE 000.00s SMB2 Negotiate Context in Request - type PREAUTH - disassemble passed 943A2FBE 000.00s SMB2 Negotiate Context in Request - type ENCRYPTION disassemble passed 91C4C51A 000.00s SMB2 Negotiate Context in Request - type COMPRESSION passed BEF52211 000.00s SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE passed 5865979B 000.00s Default DialectCount passed 6E3636F2 000.01s Default NegotiateContextsCount passed 7F72DF22 000.02s SMB2 Negotiate Context in Request - type PREAUTH - disassemble passed C911B62E 000.00s SMB2 Negotiate Context in Request - type ENCRYPTION disassemble passed 4247490C 000.00s SMB2 Negotiate Context in Request - type COMPRESSION passed 7AC4A6A0 000.00s SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE passed 75F40FFB 000.00s SMB2 Tree connect request passed DDF9AA67 000.01s SMB2 Tree connect response passed D18D6FA0 000.01s Setup Session Request passed F3FCAA93 000.01s Setup Session Response passed 0B30B25B 000.02s SMB2 IOCTL Request - Validate negotiate info passed 0ED2D4A4 000.01s SMB2 IOCTL Request - DFS referral (TargetSetBoundary) passed C3FFD514 000.04s SMB2 IOCTL Response - DFS referral (TargetSetBoundary) passed 89B092F5 000.01s SMB2 IOCTL Request - DFS referral (NameListReferral) passed C8EC5697 000.03s SMB2 IOCTL Response - DFS referral (NameListReferral) passed E169165D 000.02s SMB2 Create Request with Contexts passed 105B25A6 000.02s SMB2 Query Info Response with Security Descriptor passed E569CFCE 000.01s SMB2 Set Info Request with Rename Campaign CRC=38168F19 in 000.34s SHA=A46F29ECF4E5E2A83E965FD044A5ECCB8AD7FC3C PASSED=37 FAILED=0 ━ Loading: test/scapy/layers/smbclientserver.uts passed E1CF89F7 000.11s Define samba server passed 35EB3C3C 001.02s smbclient: SMB 2.0.2 - connect then list shares passed 7F7FCCB3 000.68s smbclient: SMB 2.0.2 - connect to test share and list files passed F9CD39AE 000.72s smbclient: SMB 2.0.2 - connect to test share and get file passed 726B7843 000.76s smbclient: SMB 2.0.2 - connect to test share, cd, put file and cat it passed 38E095D1 000.90s smbclient: SMB 2.0.2 - connect to test share and recursive get passed 01CCD05A 001.03s smbclient: SMB 3.1.1 - connect to test share and recursive get passed B93C3C7D 000.21s Define Scapy smb server passed F01323B1 000.28s smbserver: SMB 3.1.1 - connect then list shares passed FA160B24 000.29s smbserver: SMB 3.1.1 - connect then ls passed 26394D9F 000.29s smbserver: SMB 2.0.2 - connect then ls passed 965B2D88 000.26s smbserver: SMB 3.1.1 - connect then get file passed 33C6E024 000.25s smbserver: SMB 3.1.1 - connect then put file passed B94BFB09 000.28s smbserver: SMB 3.0.2 - require global encryption passed 5132A4C1 000.26s smbserver: SMB 3.1.1 - require share encryption Campaign CRC=0A58B903 in 007.35s SHA=E9CEC272C049BFA8CD4525AA78623469DE634A85 PASSED=15 FAILED=0 ━ Loading: test/scapy/layers/snmp.uts passed 0A234C99 000.01s SNMP assembling passed A9D92740 000.01s SNMP disassembling passed F7F25C3B 000.01s Basic UDP/SNMP bindings passed 8056B27B 000.00s Basic SNMPvarbind build passed 9A02426B 000.00s SNMPvarbind noSuchInstance dissection passed 7E434C51 000.00s Failing SNMPvarbind dissection Campaign CRC=C0514C91 in 000.04s SHA=59DE3F9A16648DFA505ED24FA7C26B2DC71497BF PASSED=6 FAILED=0 ━ Loading: test/scapy/layers/ssh.uts passed D69F0EB3 000.07s Load SSH and SSH pcap passed 03868325 000.00s Check for SSHVersionExchange passed F032961C 000.00s Check for SSH KexInit passed D361044A 000.00s Check for SSH Kex DH Init passed 0389FC59 000.00s Check for SSH Kex DH Reply passed B2AB9E61 000.00s Check for the 2 SSH New Msgs Campaign CRC=B3E747E2 in 000.08s SHA=857B0FF123118BAFE0EF217B947B067157DECE18 PASSED=6 FAILED=0 ━ Loading: test/scapy/layers/tftp.uts passed CBBFDA20 000.01s Test answers passed DAC9F776 000.02s TFTP Options passed 8B756458 000.03s Utilities passed 3E108A7F 000.02s TFTP_read() automaton passed 55E5D49C 000.02s TFTP_read() automaton error passed 38147847 000.03s TFTP_write() automaton passed 1A8CF22D 000.02s TFTP_write() automaton error passed 5EB44746 000.03s TFTP_WRQ_server() automaton passed D50C0642 000.03s TFTP_WRQ_server() automaton with options passed DCD41760 000.07s TFTP_RRQ_server() automaton Campaign CRC=919DD83A in 000.27s SHA=72BB0FCE3A35B5CEFD09333EB7053E3381C6CEBB PASSED=10 FAILED=0 ━ Loading: test/scapy/layers/usb.uts passed C6F5BE0E 000.00s load module passed 0B58C015 000.01s linklayer test passed 8988CA4B 000.00s USBpcapTransferIsochronous passed BDD15E91 000.00s USBpcapTransferInterrupt passed C71FC4AD 000.00s USBpcapTransferControl Campaign CRC=AB7A5C20 in 000.03s SHA=8412652E3C9DFE364A5FEF85A0A4FDA427E1DB3C PASSED=5 FAILED=0 ━ Loading: test/scapy/layers/vrrp.uts passed 06543355 000.00s VRRP - build passed A6C6FAE1 000.00s VRRP - dissection passed 3C60EE28 000.00s VRRP IPv6 - build passed 2F81CF0A 000.00s VRRP IPv6 - dissection passed BFEBF0CA 000.02s VRRP - chksums passed 084C98E6 000.01s VRRP IPv6 - chksums Campaign CRC=D9FC87DC in 000.03s SHA=65DAD9483920530B092948C25FF3853DA3B1B2C9 PASSED=6 FAILED=0 ━ Loading: test/scapy/layers/vxlan.uts passed 1DB45413 000.00s Build a VXLAN packet with VNI of 42 passed 4D21BD51 000.00s Verify VXLAN Ethernet Binding passed AD8F8915 000.01s Verify UDP dport overloading passed F9832B7B 000.02s Build a VXLAN packet with next protocol field passed 8DBE85D1 000.01s Build a VXLAN packet with no group policy ID passed 97DAAC03 000.01s Build a VXLAN packet with group policy ID = 42 passed 6D36BD19 000.04s Build a VXLAN packet followed by and IP or IPv6 layer passed EFED39DA 000.00s Dissect VXLAN with no NextProtocol Campaign CRC=CFDDE2E7 in 000.11s SHA=4AF3A67661B4EE076109057B0D783D1634653B9A PASSED=8 FAILED=0 ━ Loading: test/scapy/layers/x509.uts passed 815A2A6F 000.00s Decoding an ASN.1 SEQUENCE with an unknown, high-tag identifier passed C44CCCD8 000.00s Key class : Importing DER encoded RSA private key passed 156EF5A0 000.00s Key class : key version passed 6FB0E92E 000.00s Key class : key modulus passed 04D67681 000.00s Key class : key public exponent passed CE3F420E 000.00s Key class : key private exponent passed 9C1E1F5D 000.00s Key class : key prime1 passed ADA3892D 000.00s Key class : key prime2 passed 061180BE 000.00s Key class : key exponent1 passed 4C22B5AF 000.00s Key class : key exponent2 passed 2A1EAC96 000.00s Key class : key coefficient passed 3F1BB1AA 000.05s Cert class : Importing DER encoded X.509 Certificate with RSA public key passed 1C954526 000.06s Cert class : Rebuild certificate passed 6519AA69 000.00s Cert class : Version passed 5F89792E 000.00s Cert class : Serial passed 5C6C7729 000.00s Cert class : Signature algorithm (as advertised by TBSCertificate) passed ECEAE947 000.00s Cert class : Issuer structure passed 9A359EB2 000.00s Cert class : Issuer first attribute passed BCD8E63C 000.00s Cert class : Issuer string passed DB986116 000.00s Cert class : Validity passed D5ACFBD3 000.00s Cert class : Subject structure passed 67529256 000.00s Cert class : Subject last attribute passed B8A26A10 000.00s Cert class : Subject string passed 149F6BFE 000.00s Cert class : SubjectPublicKey algorithm passed 8F95CE6F 000.00s Cert class : SubjectPublicKey value passed A51152DA 000.00s Cert class : Extensions structure passed 250F2288 000.00s Cert class : Subject key identifier extension info passed A5DA5700 000.00s Cert class : Subject key identifier extension value passed 2B2062CE 000.00s Cert class : Signature algorithm passed 78AD39E7 000.00s Cert class : Signature value passed 68047BAF 000.15s Cert class : Default X509_Cert from scratch passed FB1213A9 000.00s Cert class : Error passed 44905AC5 000.09s Cert class: Import Windows AD certificate passed A20C9F62 000.01s Cert class: Check some Windows-specific extensions passed 5717B213 000.03s Cert class : X509 Certificate with rare fields types passed F65143C4 000.02s CRL class : Importing DER encoded X.509 CRL passed 1C954526 000.02s CRL class : Rebuild crl passed B1A3384E 000.00s CRL class : Version passed 58565688 000.00s CRL class : Signature algorithm (as advertised by TBSCertList) passed FEFAFE0F 000.00s CRL class : Issuer structure passed D95B0CF4 000.00s CRL class : Issuer first attribute passed 16D18A47 000.00s CRL class : Issuer string passed 29C49A61 000.00s CRL class : This update passed D4495358 000.00s CRL class : Optional next update passed 40944AAA 000.00s CRL class : Optional revoked_certificates structure passed D77CB718 000.00s CRL class : Revoked_certificates first attribute passed C42F3BD5 000.00s CRL class : Extensions structure passed D8172B15 000.00s CRL class : Signature algorithm passed 44713053 000.00s CRL class : Signature value passed 77266656 000.05s CRL class : Default X509_CRL from scratch passed D4B86199 000.00s Randval tests : ASN1F_SEQUENCE_OF passed D4B1DE6E 000.00s Randval tests : ASN1F_PACKET passed CB31C001 000.02s OCSP class : OCSP Response import passed 1CF80C8B 000.00s OCSP class : OCSP Response global checks passed 02125AD1 000.00s OCSP class : OCSP ResponseData checks passed 00946CC4 000.01s OCSP class : OCSP ResponseData dissection with RecokedInfo passed 7C46507E 000.01s OCSP class : OCSP SingleResponse checks passed 5318D377 000.01s OCSP class : OCSP Response reconstruction passed 93FE6938 000.02s OSCP class : OSCP Response with ECDSA Campaign CRC=7554E4DA in 000.62s SHA=0A8F3DD3A4A50F3DFC1F0E480CFE66F57B8090EC PASSED=59 FAILED=0 ━ Loading: test/scapy/layers/tls/cert.uts passed 7467C9D5 000.00s PKCS os2ip basic tests passed 7CDE63E1 000.00s PKCS i2osp basic tests passed B28AF781 000.01s PubKey class : Importing PEM-encoded RSA public key passed DEB7954B 000.00s PubKey class : Verifying PEM key format passed 1C9EB2F5 000.00s PubKey class : Importing DER-encoded RSA Key passed 756D80F5 000.00s PubKey class : Verifying DER key format passed D99A77ED 000.00s PubKey class : Checking modulus value passed B1A9D1E6 000.00s PubKey class : Checking public exponent value passed 74A3AA7E 000.00s PubKey class : Importing PEM-encoded ECDSA public key passed 712AE41F 000.00s PubKey class : Checking curve passed AC355F33 000.00s PubKey class : Checking point value passed 4E636BE1 000.38s PubKeyRSA class : Generate without modulus passed 8C0EE682 000.30s PrivKey class : Importing PEM-encoded RSA private key passed 22B9EE88 000.00s PrivKey class : Checking public attributes passed FB658832 000.00s PrivKey class : Checking private attributes passed 59BEC5F0 000.01s PrivKey class : Importing PEM-encoded ECDSA private key passed 0FE61925 000.00s PrivKey class : Checking public attributes passed AC272088 000.00s PrivKey class : Checking private attributes passed 048DABDC 000.00s PrivKeyECDSA sign & verify passed 981094E8 000.00s PubKeyECDSA verify passed 26F0CC42 000.30s PrivKey class : Importing DER-encoded RSA private key passed 0AB6326B 000.01s PrivKey class: Importing PEM-encoded EdDSA private key passed 8DF11F96 000.37s PrivKey class : sign tbs cert failed 170E860B 000.15s PrivKey class : resign cert passed AB5283E1 000.11s PrivKey/PubKey classes : Signing/Verifying with MD5_SHA1 hash passed DBD4E17F 000.11s PrivKey/PubKey classes : Signing/Verifying with MD5_SHA1 hash with legacy support passed 3F2C417F 000.06s Cert class : Importing PEM-encoded X.509 Certificate passed D5B0F293 000.00s Cert class : Checking version passed FC12B8BB 000.00s Cert class : Checking certificate serial number extraction passed AFA16673 000.00s Cert class : Checking signature algorithm passed 9B8F7229 000.00s Cert class : Checking issuer extraction in basic format (/C=FR ...) passed 2ADF05A7 000.00s Cert class : Checking subject extraction in basic format (/C=FR ...) passed 5DF77734 000.00s Cert class : Checking start date extraction in simple and tuple formats passed 399F8D6A 000.00s Cert class : Checking end date extraction in simple and tuple formats passed 5F4A083B 000.01s Cert class : test remainingDays passed 02EE7F34 000.00s Cert class : Checking RSA public key passed 9544E2C7 000.01s Cert class : Checking extensions passed 1173B95C 000.00s Cert class : encrypt passed 3FD1B423 000.07s Cert class : export passed 57C7A0AD 000.04s Cert class : isIssuerCert passed DA1699AD 000.04s Cert class : Importing another PEM-encoded X.509 Certificate passed 9E7A0AAD 000.00s Cert class : Checking ECDSA public key passed A77D322B 000.00s Cert class : Checking ECDSA signature passed C7650354 000.00s Cert class : Test show passed 3B08B684 000.00s Cert class : Check split_pem on chained certs with missing end \n passed 981AB93D 000.04s Cert class : Import PEM-encoded certificate with ed25519 signature passed 0F0E12D6 000.17s Cert class : Change subject public key identifier and resign passed F710A869 000.03s CRL class : Importing PEM-encoded CRL passed 3BBE93BF 000.00s CRL class : Checking version passed 9FEEDBE5 000.00s CRL class : Checking issuer extraction in basic format (/C=FR ...) passed 9C7206C7 000.00s CRL class : Checking lastUpdate date extraction in tuple format passed AFB28660 000.00s CRL class : Checking nextUpdate date extraction in tuple format passed 3148A0F7 000.00s CRL class : Checking number of revoked certificates passed F5F73161 000.00s CRL class : Checking presence of one revoked certificate passed 4BBE171F 000.07s Cert/CRL class : Checking isRevoked passed 1F2AFF67 000.00s CRL class : Test show passed 29ED0F21 000.46s Cert class : Checking isIssuerCert() passed ECE33A81 000.02s Cert class : Checking isSelfSigned() passed ADD2C36B 000.17s PubKey class : Checking verifyCert() passed F4B26FC9 000.42s Chain class : Checking chain construction passed 676CE307 000.29s Chain class : repr passed B1F3828F 000.25s Chain class : Checking chain verification passed A4A6ED7D 000.56s Chain class: Checking chain verification with file passed B95F31AC 000.00s Clear files passed 4D9EB4B7 000.00s Test __repr__ passed 249C4366 000.54s Test GeneralizedTime Campaign CRC=7C663F2E in 005.06s SHA=712F8962C46733A4C7734C412D9F471D3F4B5C01 PASSED=65 FAILED=1 ✓ All campaigns executed. Writing output... Regression tests for Scapy Answering Machines ━ Run at 04:08:31 from [test/answering_machines.uts] by UTscapy in 1.0221452713012695 └ Passed=15 └ Failed=0 ###### ## Answering Machines ###### ###(000)=[passed] Generic answering machine mocker >>> from unittest import mock >>> @mock.patch("scapy.ansmachine.sniff") ... def test_am(cls_name, packet_query, check_reply, mock_sniff, **kargs): ... packet_query = packet_query.__class__(bytes(packet_query)) ... def sniff(*args,**kargs): ... kargs["prn"](packet_query) ... mock_sniff.side_effect = sniff ... am = cls_name(**kargs) ... called = [False] ... def _sndrpl(x): ... called[0] = True ... check_reply(x.__class__(bytes(x))) ... am.send_reply = _sndrpl ... am() ... assert called[0], "Filter never passed for AnsweringMachine !" ... ###(001)=[passed] BOOT_am >>> def check_BOOTP_am_reply(packet): ... assert BOOTP in packet and packet[BOOTP].op == 2 ... assert packet[BOOTP].yiaddr == "192.168.1.128" and packet[BOOTP].giaddr == "192.168.1.1" ... >>> test_am(BOOTP_am, ... Ether()/IP()/UDP()/BOOTP(op=1), ... check_BOOTP_am_reply) Reply 192.168.1.128 to 00:00:00:00:00:00 ###(002)=[passed] DHCP_am >>> def check_DHCP_am_reply(packet): ... assert DHCP in packet and len(packet[DHCP].options) ... assert ("domain", b"localnet") in packet[DHCP].options ... >>> test_am(DHCP_am, ... Ether()/IP()/UDP()/BOOTP(op=1)/DHCP(options=[('message-type', 'request')]), ... check_DHCP_am_reply, ... domain="localnet") Reply 192.168.1.128 to 00:00:00:00:00:00 ###(003)=[passed] ARP_am >>> def check_ARP_am_reply(packet): ... assert ARP in packet and packet[ARP].psrc == "10.28.7.1" ... assert packet[ARP].hwsrc == "00:01:02:03:04:05" ... >>> test_am(ARP_am, ... Ether()/ARP(pdst="10.28.7.1"), ... check_ARP_am_reply, ... IP_addr="10.28.7.1", ... ARP_addr="00:01:02:03:04:05") Ether / ARP who has 10.28.7.1 says 192.168.122.12 ==> Ether / ARP is at 00:01:02:03:04:05 says 10.28.7.1 on eth0 ###(004)=[passed] ICMPEcho_am >>> def check_ICMP_am_reply(packet): ... packet.show() ... assert packet[Ether].src != "ff:ff:ff:ff:ff:ff" ... assert packet[Ether].dst == "aa:aa:aa:aa:aa:aa" ... assert IP in packet and ICMP in packet ... assert packet[IP].dst == "1.1.1.1" ... assert packet[IP].src == "2.2.2.2" ... assert packet[ICMP].seq == 12 ... >>> test_am(ICMPEcho_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="ff:ff:ff:ff:ff:ff")/IP(src="1.1.1.1", dst="2.2.2.2")/ICMP(seq=12), ... check_ICMP_am_reply) ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 52:54:00:e1:37:0d type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 28 id = 1 flags = frag = 0 ttl = 64 proto = icmp chksum = 0x74db src = 2.2.2.2 dst = 1.1.1.1 \options \ ###[ ICMP ]### type = echo-reply code = 0 chksum = 0xfff3 id = 0x0 seq = 0xc unused = b'' Replying 1.1.1.1 to 2.2.2.2 ###(005)=[passed] DNS_am >>> def check_DNS_am_reply(packet): ... assert packet[Ether].src == "bb:bb:bb:bb:bb:bb" ... assert packet[Ether].dst == "aa:aa:aa:aa:aa:aa" ... assert packet[IP].src == "127.0.0.2" ... assert packet[IP].dst == "127.0.0.1" ... assert DNS in packet and packet[DNS].ancount == 1 ... assert packet[DNS].an[0].rdata == "192.168.1.1" ... assert packet[DNS].qd[0].qname == b"www.secdev.org." ... >>> test_am(DNS_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="bb:bb:bb:bb:bb:bb")/IP(src="127.0.0.1", dst="127.0.0.2")/UDP()/DNS(qd=DNSQR(qname="www.secdev.org")), ... check_DNS_am_reply, ... joker="192.168.1.1") Ether / IP / UDP / DNS Qry b'www.secdev.org.' ==> Ether / IP / UDP / DNS Ans 192.168.1.1 >>> >>> def check_DNS_am_reply_srvmatch(packet): ... assert DNS in packet and packet[DNS].ancount == 1 ... assert isinstance(packet[DNS].an[0], DNSRRSRV) ... assert packet[DNS].an[0].rrname == b'_ldap._tcp.dc._msdcs.scapy.fr.' ... assert packet[DNS].an[0].port == 389 ... assert packet[DNS].an[0].target == b'dc.scapy.fr.' ... >>> test_am(DNS_am, ... Ether()/IP()/UDP()/DNS(qd=DNSQR(qname=b'_ldap._tcp.dc._msdcs.scapy.fr.', qtype="SRV")), ... check_DNS_am_reply_srvmatch, ... srvmatch={"_ldap._tcp.dc._msdcs.scapy.fr": (389, "dc.scapy.fr")}) Ether / IP / UDP / DNS Qry b'_ldap._tcp.dc._msdcs.scapy.fr.' ==> Ether / IP / UDP / DNS Ans >>> >>> def check_DNS_am_reply_arpa(packet): ... assert DNS in packet and packet[DNS].ancount == 1 ... assert packet[DNS].an[0].rdata == b"scapy." ... assert packet[DNS].an[0].rrname == b"1.0.16.172.in-addr.arpa." ... >>> test_am(DNS_am, ... Ether()/IP()/UDP()/DNS(qd=DNSQR(qname=b"1.0.16.172.in-addr.arpa.", qtype="PTR")), ... check_DNS_am_reply_arpa, ... jokerarpa="scapy") Ether / IP / UDP / DNS Qry b'1.0.16.172.in-addr.arpa.' ==> Ether / IP / UDP / DNS Ans b'scapy.' >>> >>> def check_DNS_am_reply2(packet): ... assert DNS in packet and packet[DNS].ancount == 2 ... assert packet[DNS].an[0].rdata == "128.0.0.1" ... assert packet[DNS].an[1].rdata == "::1" ... >>> test_am(DNS_am, ... Ether()/IP(b'E\x00\x00H\x00\x01\x00\x00@\x11|\xa2\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x004\xe8\x9a\x00\x00\x01\x00\x00\x02\x00\x00\x00\x00\x00\x00\x06gaagle\x03com\x00\x00\x01\x00\x01\x06google\x03com\x00\x00\x1c\x00\x01'), ... check_DNS_am_reply2, ... match={"google.com": ("127.0.0.1", "::1"), "gaagle.com": "128.0.0.1"}, ... joker=False) Ether / IP / UDP / DNS Qry b'gaagle.com.' ==> Ether / IP / UDP / DNS Ans 128.0.0.1 >>> >>> assert DNS_am().make_reply(Ether()) is None No IP or IPv6 layer in Ether() >>> assert DNS_am().make_reply(Ether()/IP()) is None No UDP layer in Ether()/IP() Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/dns.py", line 1706, in make_reply resp /= UDP(sport=req[UDP].dport, dport=req[UDP].sport) ~~~^^^^^ File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/packet.py", line 1382, in __getitem__ raise IndexError("Layer [%s] not found" % name) IndexError: Layer [UDP] not found >>> assert DNS_am().make_reply(Ether()/IP()/UDP()) is None No DNS layer in Ether()/IP()/UDP() Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/dns.py", line 1711, in make_reply req = req[self.cls] ~~~^^^^^^^^^^ File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/packet.py", line 1382, in __getitem__ raise IndexError("Layer [%s] not found" % name) IndexError: Layer [DNS] not found >>> assert DNS_am().make_reply( ... Ether()/IP()/UDP()/DNS(b'q\xa04\x00\x00\xa0\x01\x00\xf3\x00\x01\x04\x01y') ... ) is None Cannot parse qd element Raw(load=b'\x01y') NoneType: None ###(006)=[passed] LLMNR_am >>> def check_LLMNR_am_am_reply(packet): ... # assert packet[Ether].src == get_if_hwaddr(conf.iface) ... assert packet[Ether].dst == "aa:aa:aa:aa:aa:aa" ... # assert packet[IP].src == get_if_addr(conf.iface) ... assert packet[IP].dst == "192.168.0.1" ... assert packet[UDP].dport == 51938 ... assert packet[UDP].sport == 5355 ... assert LLMNRResponse in packet and packet[LLMNRResponse].ancount == 1 and packet[LLMNRResponse].qdcount == 1 ... assert packet[LLMNRResponse].qd[0].qname == b"TEST." ... assert packet[LLMNRResponse].an[0].rdata == "192.168.1.1" ... assert packet[LLMNRResponse].an[0].rrname == b"TEST." ... assert packet[LLMNRResponse].an[0].ttl == 60 ... >>> test_am(LLMNR_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="01:00:5e:00:00:fc")/IP(src="192.168.0.1", dst="224.0.0.252")/UDP(dport=5355, sport=51938)/LLMNRQuery(qd=DNSQR(qname=b"TEST.", qtype="A")), ... check_LLMNR_am_am_reply, ... ttl=60, ... match={"TEST": "192.168.1.1"}) Ether / IP / UDP 192.168.0.1:51938 > 224.0.0.252:llmnr / LLMNRQuery who has 'TEST.' ==> Ether / IP / UDP 192.168.122.12:llmnr > 192.168.0.1:51938 / LLMNRQuery 'TEST.' is at '192.168.1.1' ###(007)=[passed] mDNS_am >>> def check_mDNS_am_reply(packet): ... packet.show() ... # assert packet[Ether].src == get_if_hwaddr(conf.iface) ... assert packet[Ether].dst == "01:00:5e:00:00:fb" ... # assert packet[IP].src == get_if_addr(conf.iface) ... assert packet[IP].dst == "224.0.0.251" ... assert packet[IP].ttl == 255 ... assert packet[UDP].dport == 5353 ... assert packet[UDP].sport == 5353 ... assert DNS in packet and packet[DNS].ancount == 1 and packet[DNS].qdcount == 0 ... assert packet[DNS].an[0].rdata == "192.168.1.1" ... assert packet[DNS].an[0].rrname == b"TEST.local." ... assert packet[DNS].an[0].ttl == 10 ... >>> test_am(mDNS_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="01:00:5e:00:00:fb")/IP(src="192.168.0.1", dst="224.0.0.251", ttl=1)/UDP(dport=5353, sport=5353)/DNS(qd=DNSQR(qname=b"TEST.local.", qtype="A")), ... check_mDNS_am_reply, ... joker="192.168.1.1") ###[ Ethernet ]### dst = 01:00:5e:00:00:fb src = 52:54:00:e1:37:0d type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 89 id = 1 flags = frag = 0 ttl = 255 proto = udp chksum = 0x18ee src = 192.168.1.1 dst = 224.0.0.251 \options \ ###[ UDP ]### sport = mdns dport = mdns len = 69 chksum = 0x7c06 ###[ DNS ]### id = 0 qr = 1 opcode = QUERY aa = 1 tc = 0 rd = 0 ra = 0 z = 0 ad = 0 cd = 0 rcode = ok qdcount = 0 ancount = 1 nscount = 0 arcount = 1 \qd \ \an \ |###[ DNS Resource Record ]### | rrname = b'TEST.local.' | type = A | cacheflush= 1 | rclass = IN | ttl = 10 | rdlen = None | rdata = 192.168.1.1 \ns \ \ar \ |###[ DNS OPT Resource Record ]### | rrname = b'.' | type = OPT | rclass = 4096 | extrcode = 0 | version = 0 | z = 4500 | rdlen = None | \rdata \ | |###[ EDNS0 Owner (OWN) ]### | | optcode = Owner | | optlen = 8 | | v = 0 | | s = 0 | | primary_mac= 52:54:00:e1:37:0d Ether / IP / UDP / mDNS Qry b'TEST.local.' ==> Ether / IP / UDP / mDNS Ans 192.168.1.1 >>> >>> >>> def check_mDNS_am_reply2(packet): ... # $ avahi-resolve -n bonjour.local ... packet.show() ... # assert packet[Ether].src == get_if_hwaddr(conf.iface) ... assert packet[Ether].dst == "01:00:5e:00:00:fb" ... # assert packet[IP].src == get_if_addr(conf.iface) ... assert packet[IP].dst == "224.0.0.251" ... assert packet[IP].ttl == 255 ... assert packet[UDP].dport == 5353 ... assert packet[UDP].sport == 5353 ... assert DNS in packet and packet[DNS].ancount == 2 and packet[DNS].qdcount == 0 ... assert packet[DNS].an[0].rdata == "192.168.1.1" ... assert packet[DNS].an[0].rrname == b"bonjour.local." ... assert packet[DNS].an[0].ttl == 120 ... assert packet[DNS].an[1].type == 47 ... assert packet[DNS].an[1].rrname == b"bonjour.local." ... assert packet[DNS].an[1].ttl == 120 ... >>> test_am(mDNS_am, ... Ether(b'\x01\x00^\x00\x00\xfb\xaa\xaa\xaa\xaa\xaa\xaa\x08\x00E\x00\x00A\xce}@\x00\xff\x11\x0b\x89\xc0\xa8\x00\x01\xe0\x00\x00\xfb\x14\xe9\x14\xe9\x00-\xdbl\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x07bonjour\x05local\x00\x00\x01\x00\x01\xc0\x0c\x00\x1c\x00\x01'), ... check_mDNS_am_reply2, ... joker="192.168.1.1", ... ttl=120) ###[ Ethernet ]### dst = 01:00:5e:00:00:fb src = 52:54:00:e1:37:0d type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 112 id = 52861 flags = frag = 0 ttl = 255 proto = udp chksum = 0x4a5a src = 192.168.1.1 dst = 224.0.0.251 \options \ ###[ UDP ]### sport = mdns dport = mdns len = 92 chksum = 0xd7f2 ###[ DNS ]### id = 0 qr = 1 opcode = QUERY aa = 1 tc = 0 rd = 0 ra = 0 z = 0 ad = 0 cd = 0 rcode = ok qdcount = 0 ancount = 2 nscount = 0 arcount = 1 \qd \ \an \ |###[ DNS Resource Record ]### | rrname = b'bonjour.local.' | type = A | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | rdata = 192.168.1.1 |###[ DNS NSEC Resource Record ]### | rrname = b'bonjour.local.' | type = NSEC | cacheflush= 0 | rclass = IN | ttl = 120 | rdlen = None | nextname = b'bonjour.local.' | typebitmaps= ['AAAA'] \ns \ \ar \ |###[ DNS OPT Resource Record ]### | rrname = b'.' | type = OPT | rclass = 4096 | extrcode = 0 | version = 0 | z = 4500 | rdlen = None | \rdata \ | |###[ EDNS0 Owner (OWN) ]### | | optcode = Owner | | optlen = 8 | | v = 0 | | s = 0 | | primary_mac= 52:54:00:e1:37:0d Ether / IP / UDP / mDNS Qry b'bonjour.local.' ==> Ether / IP / UDP / mDNS Ans 192.168.1.1 ###(012)=[passed] WiFi_am >>> from unittest import mock >>> @mock.patch("scapy.layers.dot11.sniff") ... def test_WiFi_am(packet_query, check_reply, mock_sniff, **kargs): ... def sniff(*args,**kargs): ... kargs["prn"](packet_query) ... mock_sniff.side_effect = sniff ... am = WiFi_am(**kargs) ... am.send_reply = check_reply ... am() ... >>> def check_WiFi_am_reply(packet): ... assert isinstance(packet, list) and len(packet) == 2 ... assert TCP in packet[0] and Raw in packet[0] and raw(packet[0][Raw]) == b"5c4pY" ... >>> test_WiFi_am(Dot11(FCfield="to-DS")/IP()/TCP()/"Scapy", ... check_WiFi_am_reply, ... iffrom="scapy0", ifto="scapy1", replace="5c4pY", pattern="Scapy") Sent 127.0.0.1:80 > 127.0.0.1:ftp_data ###(013)=[passed] NBNS_am >>> def check_NBNS_am_reply(name): ... def check(packet): ... packet.show() ... assert packet[Ether].src != "ff:ff:ff:ff:ff:ff" ... assert packet[Ether].dst == "aa:aa:aa:aa:aa:aa" ... assert NBNSQueryResponse in packet and packet[NBNSQueryResponse].RR_NAME == name ... return check ... >>> for server_name in (None, "", b"test", "test"): ... test_am(NBNS_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="ff:ff:ff:ff:ff:ff")/IP()/UDP()/NBNSHeader()/NBNSQueryRequest(QUESTION_NAME="test"), ... check_NBNS_am_reply(b"test"), ... server_name=server_name) ... ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 90 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c90 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = netbios_ns dport = netbios_ns len = 70 chksum = 0x6846 ###[ NBNS Header ]### NAME_TRN_ID= 0 RESPONSE = 1 OPCODE = 0 NM_FLAGS = RD+AA RCODE = 0 QDCOUNT = 0 ANCOUNT = 1 NSCOUNT = 0 ARCOUNT = 0 ###[ NBNS query response ]### RR_NAME = b'test' SUFFIX = workstation NULL = 0 QUESTION_TYPE= NB QUESTION_CLASS= INTERNET TTL = 300000 RDLENGTH = 6 \ADDR_ENTRY\ |###[ NBNS_ADD_ENTRY ]### | G = Unique name | OWNER_NODE_TYPE= B node | UNUSED = Unused | NB_ADDRESS= 192.168.122.12 Ether / IP / UDP / NBNSHeader / NBNSQueryRequest who has '\\test' ==> Ether / IP / UDP / NBNSHeader / NBNSQueryResponse '\\test' is at 192.168.122.12 ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 90 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c90 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = netbios_ns dport = netbios_ns len = 70 chksum = 0x6846 ###[ NBNS Header ]### NAME_TRN_ID= 0 RESPONSE = 1 OPCODE = 0 NM_FLAGS = RD+AA RCODE = 0 QDCOUNT = 0 ANCOUNT = 1 NSCOUNT = 0 ARCOUNT = 0 ###[ NBNS query response ]### RR_NAME = b'test' SUFFIX = workstation NULL = 0 QUESTION_TYPE= NB QUESTION_CLASS= INTERNET TTL = 300000 RDLENGTH = 6 \ADDR_ENTRY\ |###[ NBNS_ADD_ENTRY ]### | G = Unique name | OWNER_NODE_TYPE= B node | UNUSED = Unused | NB_ADDRESS= 192.168.122.12 Ether / IP / UDP / NBNSHeader / NBNSQueryRequest who has '\\test' ==> Ether / IP / UDP / NBNSHeader / NBNSQueryResponse '\\test' is at 192.168.122.12 ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 90 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c90 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = netbios_ns dport = netbios_ns len = 70 chksum = 0x6846 ###[ NBNS Header ]### NAME_TRN_ID= 0 RESPONSE = 1 OPCODE = 0 NM_FLAGS = RD+AA RCODE = 0 QDCOUNT = 0 ANCOUNT = 1 NSCOUNT = 0 ARCOUNT = 0 ###[ NBNS query response ]### RR_NAME = b'test' SUFFIX = workstation NULL = 0 QUESTION_TYPE= NB QUESTION_CLASS= INTERNET TTL = 300000 RDLENGTH = 6 \ADDR_ENTRY\ |###[ NBNS_ADD_ENTRY ]### | G = Unique name | OWNER_NODE_TYPE= B node | UNUSED = Unused | NB_ADDRESS= 192.168.122.12 Ether / IP / UDP / NBNSHeader / NBNSQueryRequest who has '\\test' ==> Ether / IP / UDP / NBNSHeader / NBNSQueryResponse '\\test' is at 192.168.122.12 ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 90 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c90 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = netbios_ns dport = netbios_ns len = 70 chksum = 0x6846 ###[ NBNS Header ]### NAME_TRN_ID= 0 RESPONSE = 1 OPCODE = 0 NM_FLAGS = RD+AA RCODE = 0 QDCOUNT = 0 ANCOUNT = 1 NSCOUNT = 0 ARCOUNT = 0 ###[ NBNS query response ]### RR_NAME = b'test' SUFFIX = workstation NULL = 0 QUESTION_TYPE= NB QUESTION_CLASS= INTERNET TTL = 300000 RDLENGTH = 6 \ADDR_ENTRY\ |###[ NBNS_ADD_ENTRY ]### | G = Unique name | OWNER_NODE_TYPE= B node | UNUSED = Unused | NB_ADDRESS= 192.168.122.12 Ether / IP / UDP / NBNSHeader / NBNSQueryRequest who has '\\test' ==> Ether / IP / UDP / NBNSHeader / NBNSQueryResponse '\\test' is at 192.168.122.12 >>> test_am(NBNS_am, ... Ether(src="aa:aa:aa:aa:aa:aa", dst="ff:ff:ff:ff:ff:ff")/IP()/UDP()/NBNSHeader()/NBNSQueryRequest(QUESTION_NAME=b"\x85"), ... check_NBNS_am_reply(b"\x85"), ... server_name=b"\x85") ###[ Ethernet ]### dst = aa:aa:aa:aa:aa:aa src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 90 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c90 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = netbios_ns dport = netbios_ns len = 70 chksum = 0x7353 ###[ NBNS Header ]### NAME_TRN_ID= 0 RESPONSE = 1 OPCODE = 0 NM_FLAGS = RD+AA RCODE = 0 QDCOUNT = 0 ANCOUNT = 1 NSCOUNT = 0 ARCOUNT = 0 ###[ NBNS query response ]### RR_NAME = b'\x85' SUFFIX = workstation NULL = 0 QUESTION_TYPE= NB QUESTION_CLASS= INTERNET TTL = 300000 RDLENGTH = 6 \ADDR_ENTRY\ |###[ NBNS_ADD_ENTRY ]### | G = Unique name | OWNER_NODE_TYPE= B node | UNUSED = Unused | NB_ADDRESS= 192.168.122.12 Ether / IP / UDP / NBNSHeader / NBNSQueryRequest who has '\\\x85' ==> Ether / IP / UDP / NBNSHeader / NBNSQueryResponse '\\\x85' is at 192.168.122.12 ###(014)=[passed] LdapPing_am >>> def check_LdapPing_am_reply(packet): ... nlogon = packet[CLDAP].protocolOp.attributes[0] ... assert nlogon.type == b"Netlogon" ... logonresp = NETLOGON(nlogon.values[0].value.val) ... assert isinstance(logonresp, NETLOGON_SAM_LOGON_RESPONSE_EX) ... logonresp.show() ... assert logonresp.DnsForestName == b'scapy.fr.', "DnsForestName" ... assert logonresp.DnsDomainName == b'scapy.fr.', "DnsDomainName" ... assert logonresp.DnsHostName == b'DC.scapy.fr.', "DnsHostName" ... assert logonresp.NetbiosDomainName == b'SCAPY.', "NetbiosDomainName" ... assert logonresp.NetbiosComputerName == b'DC.', "NetbiosComputerName" ... assert logonresp.NtVersion == 3, "NtVersion" ... assert logonresp.Flags == 0x3f3fd, "Flags" ... assert logonresp.ClientSiteName == b'Default-First-Site-Name.', "ClientSiteName" ... >>> test_am(LdapPing_am, ... Ether(b'\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\x08\x00E\x00\x00\xaf\x9d\xb1\x00\x00\x80\x11\x9c\x89\xac\x13P\x01\xac\x13W\xdb\xc7{\x01\x85\x00\x9bV[0q\x02\x01\x01cl\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01\x00\x01\x01\x00\xa0M\xa3\x15\x04\tDnsDomain\x04\x08scapy.fr\xa3\x0e\x04\x04Host\x04\x06HOST01\xa3\r\x04\x05NtVer\x04\x04\x16\x00\x00 \xa3\x15\x04\x0bDnsHostName\x04\x06HOST010\n\x04\x08Netlogon'), ... check_LdapPing_am_reply, ... NetbiosComputerName="DC", ... NetbiosDomainName="SCAPY", ... DnsForestName="scapy.fr") ###[ NETLOGON_SAM_LOGON_RESPONSE_EX ]### OpCode = LOGON_SAM_LOGON_RESPONSE_EX Sbz = 0 Flags = PDC+GC+LDAP+DC+KDC+TIMESERV+CLOSEST+RODC+GOOD_TIMESERV+FULL_SECRET_DOMAIN_6+WS+DS_8+DS_9+DS_10+DS_11 DomainGuid= UUID('192bc4b3-0085-4521-83fe-062913ef59f2') DnsForestName= b'scapy.fr.' DnsDomainName= b'scapy.fr.' DnsHostName= b'DC.scapy.fr.' NetbiosDomainName= b'SCAPY.' NetbiosComputerName= b'DC.' UserName = b'.' DcSiteName= b'Default-First-Site-Name.' ClientSiteName= b'Default-First-Site-Name.' NtVersion = V1+V5 LmNtToken = 0xffff Lm20Token = 0xffff Ether / IP / UDP 172.19.80.1:51067 > 172.19.87.219:ldap / CLDAP ==> IP / UDP 172.19.87.219:ldap > 172.19.80.1:51067 / CLDAP / CLDAP >>> >>> >>> def check_NBNS_LdapPing_am_reply(packet): ... packet.show() ... assert SMBMailslot_Write in packet, "SMBMailslot_Write" ... assert packet[SMBMailslot_Write].Name == b'\\MAILSLOT\\NET\\GETDC510CC0AD', "SMBMailslot_Write.Name" ... logonresp = NETLOGON(packet[SMBMailslot_Write].Data.load) ... logonresp.show() ... assert logonresp.DcSockAddrSize == 16, "DcSockAddrSize" ... assert isinstance(logonresp.DcSockAddr, DcSockAddr) ... assert logonresp.DcSockAddr.sin_family == 2, "sin_family" ... assert logonresp.DcSockAddr.sin_port == 0, "sin_port" ... assert logonresp.DcSockAddr.sin_zero == 0, "sin_zero" ... assert logonresp.DcSockAddr.sin_addr == get_if_addr(conf.iface) ... assert logonresp.DnsForestName == b'scapy.fr.', "DnsForestName" ... assert logonresp.DnsDomainName == b'scapy.fr.', "DnsDomainName" ... assert logonresp.DnsHostName == b'DC.scapy.fr.', "DnsHostName" ... assert logonresp.NetbiosDomainName == b'SCAPY.', "NetbiosDomainName" ... assert logonresp.NetbiosComputerName == b'DC.', "NetbiosComputerName" ... assert logonresp.NtVersion == 13, "NtVersion" ... assert logonresp.Flags == 0x3f3fd, "Flags" ... assert logonresp.ClientSiteName == b'Default-First-Site-Name.', "ClientSiteName" ... >>> test_am(LdapPing_am, ... Ether(b'\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\x08\x00E\x00\x01\n\xff\x82\x00\x00\x80\x11:]\xac\x13P\x01\xac\x13W\xdb\x00\x8a\x00\x8a\x00\xf6\xd5\xcb\x10\x02\xde\x9d\xac\x13P\x01\x00\x8a\x00\xe0\x00\x00 EIEPFDFEDADBCACACACACACACACACAAA\x00 FDEDEBFAFJCACACACACACACACACACABM\x00\xffSMB%\x00\x00\x00\x00\x18\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x11\x00\x00@\x00\x02\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00@\x00\\\x00\x03\x00\x01\x00\x00\x00\x02\x00W\x00\\MAILSLOT\\NET\\NETLOGON\x00\x12\x00\x00\x00H\x00O\x00S\x00T\x000\x001\x00\x00\x00\x00\x00\\MAILSLOT\\NET\\GETDC510CC0AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00 \xff\xff\xff\xff'), ... check_NBNS_LdapPing_am_reply, ... NetbiosComputerName="DC", ... NetbiosDomainName="SCAPY", ... DnsForestName="scapy.fr") ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 351 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x42c4 src = 192.168.122.12 dst = 172.19.80.1 \options \ ###[ UDP ]### sport = netbios_dgm dport = netbios_dgm len = 331 chksum = 0x5a96 ###[ NBT Datagram Packet ]### Type = 16 Flags = 2 ID = 0 SourceIP = 192.168.122.12 SourcePort= 138 Length = 309 Offset = 0 SourceName= b'SCAPY' SUFFIX1 = domain controller NULL1 = 0 DestinationName= b'HOST01' SUFFIX2 = workstation NULL2 = 0 ###[ SMB 1 Protocol Request Header ]### Start = b'\xffSMB' Command = SMB_COM_TRANSACTION Status = STATUS_SUCCESS Flags = CASE_INSENSITIVE+CANONICALIZED_PATHS Flags2 = PIDHigh = 0 SecuritySignature= b'' Reserved = 0 TID = 0 PIDLow = 0 UID = 0 MID = 0 ###[ SMB COM Transaction Request ]### WordCount = 17 TotalParamCount= 0 TotalDataCount= 144 MaxParamCount= 0 MaxDataCount= 0 MaxSetupCount= 0 Reserved1 = 0 Flags = Timeout = 1000 Reserved2 = 0 ParameterLen= 0 ParameterBufferOffset= 0 DataLen = 144 DataBufferOffset= 97 SetupCount= 3 Reserved3 = 0 Setup = [1, 1, 2] ByteCount = 172 Name = b'\\MAILSLOT\\NET\\GETDC510CC0AD' Buffer = \Data \ |###[ Raw ]### | load = b'\x17\x00\x00\x00\xfd\xf3\x03\x00\xb3\xc4+\x19\x85\x00!E\x83\xfe\x06)\x13\xefY\xf2\x05scapy\x02fr\x00\x05scapy\x02fr\x00\x02DC\x05scapy\x02fr\x00\x05SCAPY\x00\x02DC\x00\x00\x17Default-First-Site-Name\x00\x17Default-First-Site-Name\x00\x10\x02\x00\x00\x00\xc0\xa8z\x0c\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\xff\xff\xff\xff' ###[ NETLOGON_SAM_LOGON_RESPONSE_EX ]### OpCode = LOGON_SAM_LOGON_RESPONSE_EX Sbz = 0 Flags = PDC+GC+LDAP+DC+KDC+TIMESERV+CLOSEST+RODC+GOOD_TIMESERV+FULL_SECRET_DOMAIN_6+WS+DS_8+DS_9+DS_10+DS_11 DomainGuid= UUID('192bc4b3-0085-4521-83fe-062913ef59f2') DnsForestName= b'scapy.fr.' DnsDomainName= b'scapy.fr.' DnsHostName= b'DC.scapy.fr.' NetbiosDomainName= b'SCAPY.' NetbiosComputerName= b'DC.' UserName = b'.' DcSiteName= b'Default-First-Site-Name.' ClientSiteName= b'Default-First-Site-Name.' DcSockAddrSize= 16 \DcSockAddr\ |###[ DcSockAddr ]### | sin_family= 2 | sin_port = 0 | sin_addr = 192.168.122.12 | sin_zero = 0 NtVersion = V1+V5EX+V5EX_WITH_IP LmNtToken = 0xffff Lm20Token = 0xffff Ether / IP / UDP / NBTDatagram / SMB_Header / Tran b'\\MAILSLOT\\NET\\NETLOGON' ==> IP / UDP / NBTDatagram / SMB_Header / Tran b'\\MAILSLOT\\NET\\GETDC510CC0AD' ###### ## Radius_am ###### ###(015)=[passed] Radius_am PAP - Test Access-Success >>> def check_radius_pap_reply_success(x): ... x.show() ... assert x[Radius].code == 2 ... assert len(x.attributes) == 1 ... assert isinstance(x.attributes[0], RadiusAttr_Message_Authenticator) ... assert x.attributes[0].value == bytes.fromhex("75c0da1e492f6f51771a7a49b9136a6d") ... assert x.authenticator == bytes.fromhex("3dd94c06bc90accfab8168437821ded4") ... >>> test_am( ... Radius_am, ... Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00Z\x00\x8e\x00\x00@\x11|\x03\x7f\x00\x00\x01\x7f\x00\x00\x01\x9f<\x07\x14\x00F\xfeY\x01\xfb\x00>s0\x00\x13\x86x\xd7\x11\xc4\x9e\xe1=\xce&r Access-Accept ###(016)=[passed] Radius_am PAP - Test Access-Reject >>> def check_radius_pap_reply_fail(x): ... x.show() ... assert x[Radius].code == 3 ... assert len(x.attributes) == 1 ... assert isinstance(x.attributes[0], RadiusAttr_Message_Authenticator) ... assert x.attributes[0].value == bytes.fromhex("9a0efbce86998e53fc9228293ebad3d0") ... assert x.authenticator == bytes.fromhex("cce9bcadab26e276f8c6513ad4ee5d87") ... >>> test_am( ... Radius_am, ... Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00ZH$\x00\x00@\x114m\x7f\x00\x00\x01\x7f\x00\x00\x01\xb4F\x07\x14\x00F\xfeY\x01V\x00>\x15\xa7J\x8an+\xe2\x8a\xe9Lx\xa0h\x0e\r\xbaP\x12%\x87Sg;\xab\x93\x95\xb5o\x925\xc7h\x88\x01\x01\x06user\x02\x12\x99\xbc\x970\x847\x95L\x86JeD\xf8\xea\x87\x00'), ... check_radius_pap_reply_fail, ... secret="SECRET", ... IDENTITIES={"user": "password"} ... ) Bad password for user 'user' ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 66 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7ca8 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = radius dport = 46150 len = 46 chksum = 0x7ce8 ###[ RADIUS ]### code = Access-Reject id = 86 len = 38 authenticator= cce9bcadab26e276f8c6513ad4ee5d87 \attributes\ |###[ Message-Authenticator ]### | type = Message-Authenticator | len = 18 | value = 9a0efbce86998e53fc9228293ebad3d0 127.0.0.1 / RADIUS Access-Request (User:'user' PAP) -> Access-Reject ###(017)=[passed] Radius_am MS-CHAP2 - Test Access-Success >>> def check_radius_mschap2_reply_success(x): ... x.show() ... assert x[Radius].code == 2 ... assert len(x.attributes) == 2 ... assert isinstance(x.attributes[0], RadiusAttr_Message_Authenticator) ... assert x.attributes[0].value == bytes.fromhex("5ab34c3b0554fb14f2d5bf7f521914eb") ... assert x.authenticator == bytes.fromhex("c40000ef60fb3c413e2112afb3c7c7d5") ... assert isinstance(x.attributes[1], RadiusAttr_Vendor_Specific) ... chap2_success = x.attributes[1].value ... assert isinstance(chap2_success, MS_CHAP2_Success) ... assert chap2_success.String == b'S=46317A3248777BF4D9FAFF4BF4034DC996B740D9' ... assert bytes(x[Radius]) == b'\x02\x01\x00Y\xc4\x00\x00\xef`\xfb!\x12\xaf\xb3\xc7\xc7\xd5P\x12Z\xb3L;\x05T\xfb\x14\xf2\xd5\xbf\x7fR\x19\x14\xeb\x1a3\x00\x00\x017\x1a-\x00S=46317A3248777BF4D9FAFF4BF4034DC996B740D9' ... >>> test_am( ... Radius_am, ... Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\xado\x90@\x00@\x11\xcc\xad\x7f\x00\x00\x01\x7f\x00\x00\x01\xe1\xea\x07\x14\x00\x99\xfe\xac\x01\x01\x00\x91\xe3\x99\x1b\xec\x1e\x82\x8a\xfcb\xf6\xbf\x824\x13\xc8\x1d\x04\x06\x7f\x00\x01\x01 \x07mynas\x01\x06user\x06\x06\x00\x00\x00\x01\x1a\x18\x00\x00\x017\x0b\x12(\xa0\x18u\x0c\x13\x8c~@\xb71\xa1\xe9\xfd\x1e\xdc\x1a:\x00\x00\x017\x194\x00\x00\xe2\x1fY\xd4O8\x8b\xc6\xf3\x07\xd6\xe5?:3!\x00\x00\x00\x00\x00\x00\x00\x00g-\xd8%\x03\x04\xed\xa7\xc6O\x83"\xdc\xe2\x07\xaa\xf8\x15\xed\xc3~\x08GHP\x12/)\xa2\t\x9dA8\xf9>\xa7V\xba\xf6\xf0LG'), ... check_radius_mschap2_reply_success, ... secret="SECRET", ... IDENTITIES={"user": "password"} ... ) ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 117 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c75 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = radius dport = 57834 len = 97 chksum = 0xe3e6 ###[ RADIUS ]### code = Access-Accept id = 1 len = 89 authenticator= c40000ef60fb3c413e2112afb3c7c7d5 \attributes\ |###[ Message-Authenticator ]### | type = Message-Authenticator | len = 18 | value = 5ab34c3b0554fb14f2d5bf7f521914eb |###[ Vendor-Specific ]### | type = Vendor-Specific | len = 51 | vendor_id = Microsoft | vendor_type= MS-CHAP2-Success | vendor_len= 45 | \value \ | |###[ MS_CHAP2_Success ]### | | Ident = 0 | | String = b'S=46317A3248777BF4D9FAFF4BF4034DC996B740D9' 127.0.0.1 / RADIUS Access-Request (User:'user' MS-CHAP2) -> Access-Accept ###(018)=[passed] Radius_am MS-CHAP2 - Test Access-Reject >>> def check_radius_mschap2_reply_fail(x): ... x.show() ... assert x[Radius].code == 3 ... assert len(x.attributes) == 2 ... assert isinstance(x.attributes[0], RadiusAttr_Message_Authenticator) ... assert x.attributes[0].value == bytes.fromhex("df430d94a4992ca0d38acf02a1fa94f0") ... assert x.authenticator == bytes.fromhex("e0d5cf468ffdf714ed4a40aea1a5715f") ... assert isinstance(x.attributes[1], RadiusAttr_Vendor_Specific) ... chap2_error = x.attributes[1].value ... assert isinstance(chap2_error, MS_CHAP_Error) ... assert chap2_error.String == b'E=691 R=0 V=3' ... assert bytes(x[Radius]) == b'\x03\x01\x00<\xe0\xd5\xcfF\x8f\xfd\xf7\x14\xedJ@\xae\xa1\xa5q_P\x12\xdfC\r\x94\xa4\x99,\xa0\xd3\x8a\xcf\x02\xa1\xfa\x94\xf0\x1a\x16\x00\x00\x017\x02\x10\x00E=691 R=0 V=3' ... >>> test_am( ... Radius_am, ... Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\xad\xca\xd1@\x00@\x11ql\x7f\x00\x00\x01\x7f\x00\x00\x01\xe9\x1b\x07\x14\x00\x99\xfe\xac\x01\x01\x00\x91\xc0{%t\xdd\x8eQC\xda\x861\x11\xf9\xd0\xb2j\x04\x06\x7f\x00\x01\x01 \x07mynas\x01\x06user\x06\x06\x00\x00\x00\x01\x1a\x18\x00\x00\x017\x0b\x12\xd8\x07\xbf\x15N\xfb\x9a;\x0f\xd8\x14\x7f\xae\xe2\xe3e\x1a:\x00\x00\x017\x194\x00\x00\x8e\x8d\xe0\x81\x15]8\xb5j\x7f`\x14\xe0f]\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x88\x07\xfb\xf9\x08H\xb5\x81\x87\xdc\x02\x90\x04\xb0\xaf\x11\x0c\x9a\rwQ\xd4\xcaiP\x12\x85\xfeMzd\xaf\x00\xaa\x12\xe2\x910\xea\xea\xb6\xf3'), ... check_radius_mschap2_reply_fail, ... secret="SECRET", ... IDENTITIES={"user": "password"} ... ) Bad MS-CHAP2-NTResponse for user 'user' ! ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 88 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c92 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = radius dport = 59675 len = 68 chksum = 0x5f17 ###[ RADIUS ]### code = Access-Reject id = 1 len = 60 authenticator= e0d5cf468ffdf714ed4a40aea1a5715f \attributes\ |###[ Message-Authenticator ]### | type = Message-Authenticator | len = 18 | value = df430d94a4992ca0d38acf02a1fa94f0 |###[ Vendor-Specific ]### | type = Vendor-Specific | len = 22 | vendor_id = Microsoft | vendor_type= MS-CHAP-Error | vendor_len= 16 | \value \ | |###[ MS_CHAP_Error ]### | | Ident = 0 | | String = b'E=691 R=0 V=3' 127.0.0.1 / RADIUS Access-Request (User:'user' MS-CHAP2) -> Access-Reject Regression tests for Scapy regarding fields ━ Run at 04:08:33 from [test/fields.uts] by UTscapy in 2.126272439956665 └ Passed=139 └ Failed=0 ###### ## Tests on basic fields ###### ###(000)=[passed] ConditionnalField class >>> class TEST_COND(Packet): ... fields_desc = [ ... IntField("A", 0), ... ConditionalField(IntField("A0",0), lambda pkt:pkt.A == 0), ... ConditionalField(IntField("A1",0), lambda pkt:pkt.A != 0), ... IntField("B", 0), ... ConditionalField(IntField("B0",0), lambda pkt:pkt.B == 0), ... ConditionalField(IntField("B1",0), lambda pkt:pkt.B != 0), ... ] ... >>> print(TEST_COND(TEST_COND().build()).fields) {'A': 0, 'A0': 0, 'B': 0, 'B0': 0} >>> >>> a = TEST_COND() >>> b = TEST_COND(raw(TEST_COND())) >>> assert raw(a) == raw(b) >>> assert a == b >>> >>> >>> class TEST_COND(Packet): ... fields_desc = [ ... ByteField('A', 0), ... ConditionalField(ByteField('B', 0), ... lambda pkt:pkt.A != 0), ... ConditionalField(ByteField('C', 0), ... lambda pkt:pkt.B == 0), ... ] ... >>> assert TEST_COND().build() == b'\x00' >>> >>> >>> class TEST_INNER(Packet): ... fields_desc = [ ... ByteField('A', 0), ... ByteField('B', 0), ... ConditionalField( ... MultipleTypeField( ... [ ... (ByteField('C', 1), lambda pkt: pkt.B == 1), ... (ByteField('C', 2), lambda pkt: pkt.B == 2), ... ], ... ByteField('C', 0), ... ), ... lambda pkt: pkt.A, ... ) ... ] ... >>> pkt = TEST_INNER() >>> pkt.A = 1 >>> pkt.B = 1 >>> assert pkt.C == 1 ###(001)=[passed] Simple tests >>> assert LongField("test", None).addfield(None, b"", 0x44434241) == b'\x00\x00\x00\x00DCBA' >>> assert SignedLongField("test", None).addfield(None, b"", -2) == b'\xff\xff\xff\xff\xff\xff\xff\xfe' >>> >>> assert LELongField("test", None).addfield(None, b"", 0x44434241) == b'ABCD\x00\x00\x00\x00' >>> assert LESignedLongField("test", None).addfield(None, b"", -2) == b'\xfe\xff\xff\xff\xff\xff\xff\xff' ###(002)=[passed] MACField class >>> m = MACField("foo", None) >>> r = m.i2m(None, None) >>> r b'\x00\x00\x00\x00\x00\x00' >>> assert r == b"\x00\x00\x00\x00\x00\x00" >>> r = m.getfield(None, b"\xc0\x01\xbe\xef\xba\xbeABCD") >>> r (b'ABCD', 'c0:01:be:ef:ba:be') >>> assert r == (b"ABCD","c0:01:be:ef:ba:be") >>> r = m.addfield(None, b"FOO", "c0:01:be:ef:ba:be") >>> r b'FOO\xc0\x01\xbe\xef\xba\xbe' >>> assert r == b"FOO\xc0\x01\xbe\xef\xba\xbe" ###(003)=[passed] LEMACField class >>> m = LEMACField("foo", None) >>> r = m.i2m(None, None) >>> r b'\x00\x00\x00\x00\x00\x00' >>> assert r == b"\x00\x00\x00\x00\x00\x00" >>> r = m.getfield(None, b"\xbe\xba\xef\xbe\x01\xc0ABCD") >>> r (b'ABCD', 'c0:01:be:ef:ba:be') >>> assert r == (b"ABCD","c0:01:be:ef:ba:be") >>> r = m.addfield(None, b"FOO", "be:ba:ef:be:01:c0") >>> r b'FOO\xc0\x01\xbe\xef\xba\xbe' >>> assert r == b"FOO\xc0\x01\xbe\xef\xba\xbe" ###(004)=[passed] SourceMACField >>> conf.route.add(net="1.2.3.4/32", dev=conf.iface) >>> p = Ether() / ARP(pdst="1.2.3.4") >>> assert p.src == p.hwsrc == p[ARP].hwsrc == get_if_hwaddr(conf.iface) >>> p = Dot3() / LLC() / SNAP() / ARP(pdst="1.2.3.4") >>> assert p.src == p.hwsrc == p[ARP].hwsrc == get_if_hwaddr(conf.iface) >>> conf.route.delt(net="1.2.3.4/32", dev=conf.iface) ###(005)=[passed] IPField class >>> i = IPField("foo", None) >>> r = i.i2m(None, "1.2.3.4") >>> r b'\x01\x02\x03\x04' >>> assert r == b"\x01\x02\x03\x04" >>> r = i.i2m(None, "255.255.255.255") >>> r b'\xff\xff\xff\xff' >>> assert r == b"\xff\xff\xff\xff" >>> r = i.m2i(None, b"\x01\x02\x03\x04") >>> r '1.2.3.4' >>> assert r == "1.2.3.4" >>> r = i.getfield(None, b"\x01\x02\x03\x04ABCD") >>> r (b'ABCD', '1.2.3.4') >>> assert r == (b"ABCD","1.2.3.4") >>> r = i.addfield(None, b"FOO", "1.2.3.4") >>> r b'FOO\x01\x02\x03\x04' >>> assert r == b"FOO\x01\x02\x03\x04" ###(006)=[passed] SourceIPField >>> defaddr = conf.route.route('0.0.0.0')[1] >>> class Test(Packet): fields_desc = [SourceIPField("sourceip")] ... >>> assert Test().sourceip == defaddr >>> assert Test(raw(Test())).sourceip == defaddr >>> >>> assert IP(dst="0.0.0.0").src == defaddr >>> assert IP(raw(IP(dst="0.0.0.0"))).src == defaddr >>> defaddr = conf.route.route('1.1.1.1')[1] >>> assert IP(dst="1.1.1.1").src == defaddr >>> assert IP(raw(IP(dst="1.1.1.1"))).src == defaddr ###(007)=[passed] ThreeBytesField >>> class TestThreeBytesField(Packet): ... fields_desc = [ ... X3BytesField('test1', None), ... ThreeBytesField('test2', None), ... XLE3BytesField('test3', None), ... LEThreeBytesField('test4', None), ... ] ... >>> p = TestThreeBytesField(test1=0x123456, test2=123456, test3=0xfedbca, test4=567890) >>> assert raw(p) == b'\x12\x34\x56\x01\xe2\x40\xca\xdb\xfe\x52\xaa\x08' >>> print(p.sprintf('%test1% %test2% %test3% %test4%')) 0x123456 123456 0xfedbca 567890 >>> assert p.sprintf('%test1% %test2% %test3% %test4%') == '0x123456 123456 0xfedbca 567890' >>> assert repr(p.test1) == '1193046' ###(008)=[passed] NBytesField >>> class TestNBytesField(Packet): ... fields_desc = [ ... NBytesField('test1', None, 7), ... XNBytesField('test2', None, 5), ... XNBytesField('test3', None, 11), ... NBytesField('test4', None, 11), ... ] ... >>> p = TestNBytesField(test1=0x00112233445566, test2=824650445619, test3=0xffeeddccbbaa9988776655, test4=0xffeeddccbbaa9988776655) >>> print(raw(p)) b'\x00\x11"3DUf\xc0\x00\xff33\xff\xee\xdd\xcc\xbb\xaa\x99\x88wfU\xff\xee\xdd\xcc\xbb\xaa\x99\x88wfU' >>> assert raw(p) == b'\x00\x11\x22\x33\x44\x55\x66\xc0\x00\xff\x33\x33\xff\xee\xdd\xcc\xbb\xaa\x99\x88\x77\x66\x55\xff\xee\xdd\xcc\xbb\xaa\x99\x88\x77\x66\x55' >>> print(p.sprintf('%test1% %test2% %test3% %test4%')) 18838586676582 0xc000ff3333 0xffeeddccbbaa9988776655 309404098707666285700277845 >>> assert p.sprintf('%test1% %test2% %test3% %test4%') == '18838586676582 0xc000ff3333 0xffeeddccbbaa9988776655 309404098707666285700277845' >>> assert p.test1 == 0x112233445566 >>> assert p.test2 == 0xc000ff3333 >>> assert p.test3 == 0xffeeddccbbaa9988776655 >>> assert p.test4 == 309404098707666285700277845 >>> >>> class TestFuzzNBytesField(Packet): ... fields_desc = [ ... NBytesField('test1', 0, 128), ... ] ... >>> f = fuzz(TestFuzzNBytesField()) >>> assert f.test1.max == 2 ** (128 * 8) - 1 >>> >>> p2 = TestNBytesField(raw(p)) >>> assert p2.sprintf('%test1% %test2% %test3% %test4%') == '18838586676582 0xc000ff3333 0xffeeddccbbaa9988776655 309404098707666285700277845' >>> assert p2.test1 == 18838586676582 >>> assert p2.test2 == 0xc000ff3333 >>> assert p2.test3 == 0xffeeddccbbaa9988776655 >>> assert p2.test4 == 309404098707666285700277845 >>> assert raw(p2) == raw(TestNBytesField(test1=p2.test1, test2=p2.test2, test3=p2.test3, test4=p2.test4)) ###(009)=[passed] StrField >>> class TestStrField(Packet): ... fields_desc = [ ... LEFieldLenField('slen', None, length_of="s1"), ... StrLenField('s1', None, length_from=lambda pkt: pkt.slen), ... StrField('s2', None), ... ] ... >>> p = TestStrField(s1="cafe", s2="deadbeef") >>> assert raw(p) == b'\x04\x00cafedeadbeef' >>> print(p.sprintf("%s1% %s2%")) b'cafe' b'deadbeef' >>> assert p.sprintf("%s1% %s2%") == "b'cafe' b'deadbeef'" ###(010)=[passed] StrFieldUtf16 >>> class TestStrLenFieldUtf16(Packet): ... fields_desc = [ ... LEFieldLenField('slen', None, length_of="s1"), ... StrLenFieldUtf16('s1', None, length_from=lambda pkt: pkt.slen), ... ] ... >>> p = TestStrLenFieldUtf16(s1='cafe') >>> assert raw(p) == b'\x08\x00c\x00a\x00f\x00e\x00' >>> assert p.sprintf("%s1%") == 'cafe' ###(011)=[passed] StrFieldUtf16 >>> class TestStrFieldUtf16(Packet): ... fields_desc = [ ... StrFieldUtf16('s1', None), ... ] ... >>> p = TestStrFieldUtf16(s1='cafe') >>> assert raw(p) == b'c\x00a\x00f\x00e\x00' >>> assert p.sprintf("%s1%") == 'cafe' ###### ## Tests on ActionField ###### ###(012)=[passed] Creation of a layer with ActionField >>> class TestAction(Packet): ... __slots__ = ["_val", "_fld", "_priv1", "_priv2"] ... name = "TestAction" ... fields_desc = [ ActionField(ByteField("tst", 3), "my_action", priv1=1, priv2=2) ] ... def __init__(self, *args, **kargs): ... self._val, self._fld, self._priv1, self._priv2 = None, None, None, None ... super(TestAction, self).__init__(*args, **kargs) ... def my_action(self, val, fld, priv1, priv2): ... print("Action (%i)!" % val) ... self._val, self._fld, self._priv1, self._priv2 = val, fld, priv1, priv2 ... ###(013)=[passed] Triggering action >>> t = TestAction() >>> assert t._val == t._fld == t._priv1 == t._priv2 == None >>> t.tst=42 Action (42)! >>> assert t._priv1 == 1 >>> assert t._priv2 == 2 >>> assert t._val == 42 ###### ## Tests on FieldLenField ###### ###(014)=[passed] Creation of a layer with FieldLenField >>> class TestFLenF(Packet): ... fields_desc = [ FieldLenField("len", None, length_of="str", fmt="B", adjust=lambda pkt,x:x+1), ... StrLenField("str", "default", length_from=lambda pkt:pkt.len-1,) ] ... ###(015)=[passed] Assembly of an empty packet >>> p = TestFLenF() >>> p >>> r = raw(p) >>> r b'\x08default' >>> r == b"\x08default" True ###(016)=[passed] Assembly of non empty packet >>> p = TestFLenF(str="123") >>> p >>> r = raw(p) >>> r b'\x04123' >>> r == b"\x04123" True ###(017)=[passed] Disassembly >>> p = TestFLenF(b"\x04ABCDEFGHIJKL") >>> p > >>> p.len == 4 and p.str == b"ABC" and Raw in p True ###(018)=[passed] BitFieldLenField test >>> class TestBFLenF(Packet): ... fields_desc = [ BitFieldLenField("len", None, 4, length_of="str" , adjust=lambda pkt,x:x+1, tot_size=-2), ... BitField("nothing",0xfff, 12, end_tot_size=-2), ... StrLenField("str", "default", length_from=lambda pkt:pkt.len-1, ) ] ... >>> a=TestBFLenF() >>> r = raw(a) >>> r b'\xff\x8fdefault' >>> assert r == b"\xff\x8fdefault" >>> >>> a.str="" >>> r = raw(a) >>> r b'\xff\x1f' >>> assert r == b"\xff\x1f" >>> >>> p = TestBFLenF(b"\xff\x1f@@") >>> p > >>> assert p.len == 1 and p.str == b"" and Raw in p and p[Raw].load == b"@@" >>> >>> p = TestBFLenF(b"\xff\x6fabcdeFGH") >>> p > >>> assert p.len == 6 and p.str == b"abcde" and Raw in p and p[Raw].load == b"FGH" ###(019)=[passed] Test BitLenField >>> SIZES = {0: 6, 1: 6, 2: 14, 3: 22} >>> >>> class TestBitLenField(Packet): ... fields_desc = [ ... BitField("mode", 0, 2), ... BitLenField("value", 0, length_from=lambda pkt: SIZES[pkt.mode]) ... ] ... >>> p = TestBitLenField(mode=1, value=50) >>> assert bytes(p) == b"r" >>> >>> p = TestBitLenField(mode=2, value=5000) >>> assert bytes(p) == b'\x93\x88' >>> >>> p = TestBitLenField(b'\xc0\x01\xf4') >>> assert p.mode == 3 >>> assert p.value == 500 ###(020)=[passed] Test UTCTimeField >>> class TestUTCTimeField(Packet): ... fields_desc = [ ... # A Windows time field. See GH#4308 ... UTCTimeField( ... "Time", ... None, ... fmt=">> >>> p = TestUTCTimeField(Time=0) >>> assert p.sprintf("%Time%") == 'Mon, 01 Jan 1601 00:00:00 (-11644473600)' >>> >>> p = TestUTCTimeField(Time=133587912345678900) >>> assert p.sprintf("%Time%") == 'Sun, 28 Apr 2024 15:20:34 (1714317634)' ###### ## Tests on FieldListField ###### ###(021)=[passed] Creation of a layer >>> class TestFLF(Packet): ... name="test" ... fields_desc = [ FieldLenField("len", None, count_of="lst", fmt="B"), ... FieldListField("lst", None, IntField("elt",0), count_from=lambda pkt:pkt.len) ... ] ... ###(022)=[passed] Assembly of an empty packet >>> a = TestFLF() >>> raw(a) b'\x00' ###(023)=[passed] Assembly of a non-empty packet >>> a = TestFLF() >>> a.lst = [7,65539] >>> ls(a) len : FieldLenField = None ('None') lst : FieldListField = [7, 65539] ('[]') >>> r = raw(a) >>> r b'\x02\x00\x00\x00\x07\x00\x01\x00\x03' >>> import struct >>> r == struct.pack("!BII", 2,7,65539) True ###(024)=[passed] Disassemble >>> import struct >>> p = TestFLF(b"\x00\x11\x12") >>> p > >>> assert p.len == 0 and Raw in p and p[Raw].load == b"\x11\x12" >>> p = TestFLF(struct.pack("!BIII",3,1234,2345,12345678)) >>> p >>> assert p.len == 3 and p.lst == [1234,2345,12345678] ###(025)=[passed] Disassemble unaligned >>> import struct >>> class TestFLFUnaligned(Packet): ... name="test" ... fields_desc = [ BitFieldLenField("len", None, 3, count_of="lst"), ... FieldListField("lst", None, XBitField("elt",0,8), count_from=lambda pkt:pkt.len), ... BitField("ignore", None, 5), ... ] ... >>> p = TestFLFUnaligned(b"\x68\x28\x48\x6a") >>> p >>> assert p.len == 3 and p.lst == [0x41,0x42,0x43] and p.ignore == 0xa ###(026)=[passed] Manipulate >>> a = TestFLF(lst=[4]) >>> r = raw(a) >>> r b'\x01\x00\x00\x00\x04' >>> assert r == b"\x01\x00\x00\x00\x04" >>> a.lst.append(1234) >>> TestFLF(raw(a)) >>> a.show2() ###[ test ]### len = 2 lst = [4, 1234] >>> a.len=7 >>> r = raw(a) >>> assert r == b"\x07\x00\x00\x00\x04\x00\x00\x04\xd2" >>> a.len=2 >>> a.lst=[1,2,3,4,5] >>> p = TestFLF(raw(a)) >>> p > >>> assert Raw in p and p[Raw].load == b'\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05' ###(027)=[passed] Test mutability of the default values >>> class X(Packet): ... fields_desc = [ FieldListField("f", [], ByteField("", 0)) ] ... >>> m = X() >>> m.f.append(3) >>> assert raw(m) == b"\x03" >>> assert m.default_fields['f'] == [] >>> assert m.fields['f'] == [3] ###### ## PacketListField ###### ###(028)=[passed] Create a layer >>> class TestPLF(Packet): ... name="test" ... fields_desc=[ FieldLenField("len", None, count_of="plist"), ... PacketListField("plist", None, IP, count_from=lambda pkt:pkt.len,) ] ... ###(029)=[passed] Test the PacketListField assembly >>> x=TestPLF() >>> r = raw(x) >>> r b'\x00\x00' >>> r == b"\x00\x00" True ###(030)=[passed] Test the PacketListField assembly 2 >>> x=TestPLF() >>> x.plist=[IP()/TCP(), IP()/UDP()] >>> r = raw(x) >>> r b'\x00\x02E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r' >>> r.startswith(b'\x00\x02E') True ###(031)=[passed] Test disassembly >>> x=TestPLF(plist=[IP()/TCP(seq=1234567), IP()/UDP()]) >>> p = TestPLF(raw(x)) >>> p >, >] |> >>> p.show() ###[ test ]### len = 2 \plist \ |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 40 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = 0x7ccd | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 1234567 | ack = 0 | dataofs = 5 | reserved = 0 | flags = S | window = 8192 | chksum = 0xbae2 | urgptr = 0 | options = [] |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 28 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = udp | chksum = 0x7cce | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ UDP ]### | sport = domain | dport = domain | len = 8 | chksum = 0x172 >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 1234567 True ###(032)=[passed] Nested PacketListField >>> y=IP()/TCP(seq=111111)/TestPLF(plist=[IP()/TCP(seq=222222),IP()/UDP()]) >>> p = TestPLF(plist=[y,IP()/TCP(seq=333333)]) >>> p >, >] |>>>, >] |> >>> p.show() ###[ test ]### len = None \plist \ |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 111111 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] |###[ test ]### | len = None | \plist \ | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = tcp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ TCP ]### | | sport = ftp_data | | dport = http | | seq = 222222 | | ack = 0 | | dataofs = None | | reserved = 0 | | flags = S | | window = 8192 | | chksum = None | | urgptr = 0 | | options = [] | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = udp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ UDP ]### | | sport = domain | | dport = domain | | len = None | | chksum = None |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 333333 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 111111 and p[TCP:2].seq==222222 and p[TCP:3].seq == 333333 True ###### ## PacketListField tests ###### ###(033)=[passed] Create a layer >>> class TestPLF(Packet): ... name="test" ... fields_desc=[ FieldLenField("len", None, count_of="plist"), ... PacketListField("plist", None, IP, count_from=lambda pkt:pkt.len) ] ... ###(034)=[passed] Test the PacketListField assembly >>> x=TestPLF() >>> r = raw(x) >>> r b'\x00\x00' >>> r == b"\x00\x00" True ###(035)=[passed] Test the PacketListField assembly 2 >>> x=TestPLF() >>> x.plist=[IP()/TCP(), IP()/UDP()] >>> r = raw(x) >>> r b'\x00\x02E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r' >>> r.startswith(b'\x00\x02E') True ###(036)=[passed] Test disassembly >>> x=TestPLF(plist=[IP()/TCP(seq=1234567), IP()/UDP()]) >>> p = TestPLF(raw(x)) >>> p >, >] |> >>> p.show() ###[ test ]### len = 2 \plist \ |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 40 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = 0x7ccd | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 1234567 | ack = 0 | dataofs = 5 | reserved = 0 | flags = S | window = 8192 | chksum = 0xbae2 | urgptr = 0 | options = [] |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 28 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = udp | chksum = 0x7cce | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ UDP ]### | sport = domain | dport = domain | len = 8 | chksum = 0x172 >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 1234567 True ###(037)=[passed] Test parent reference >>> x=TestPLF(plist=[IP()/TCP(), IP()/UDP()]) >>> assert p.getlayer(IP, 1).parent == p and p.getlayer(IP, 2).parent == p >>> p = TestPLF(raw(x)) >>> assert p.getlayer(IP, 1).parent == p and p.getlayer(IP, 2).parent == p ###(038)=[passed] Test parent reference in guess_payload_class >>> class TestGuessPLFInner(Packet): ... name="test guess inner" ... fields_desc=[ LenField("foo", None) ] ... def guess_payload_class(self, payload): ... self.parentflag = True ... if self.parent is None: ... # all exceptions are caught, so have to use flag ... self.parentflag = False ... return super(TestGuessPLFInner, self).guess_payload_class(payload) ... >>> class TestGuessPLF(Packet): ... name="test guess" ... fields_desc=[PacketListField("plist", None, TestGuessPLFInner, ... next_cls_cb=lambda p,l,c,r: TestGuessPLFInner if len(l) == 0 else None)] ... >>> x=TestGuessPLF(plist=TestGuessPLFInner()/Raw(b'123')) >>> p=TestGuessPLF(raw(x)) >>> assert p[TestGuessPLFInner].parentflag >>> assert p[TestGuessPLFInner].parent == p ###(039)=[passed] Nested PacketListField >>> y=IP()/TCP(seq=111111)/TestPLF(plist=[IP()/TCP(seq=222222),IP()/UDP()]) >>> p = TestPLF(plist=[y,IP()/TCP(seq=333333)]) >>> p >, >] |>>>, >] |> >>> p.show() ###[ test ]### len = None \plist \ |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 111111 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] |###[ test ]### | len = None | \plist \ | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = tcp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ TCP ]### | | sport = ftp_data | | dport = http | | seq = 222222 | | ack = 0 | | dataofs = None | | reserved = 0 | | flags = S | | window = 8192 | | chksum = None | | urgptr = 0 | | options = [] | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = udp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ UDP ]### | | sport = domain | | dport = domain | | len = None | | chksum = None |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 333333 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 111111 and p[TCP:2].seq==222222 and p[TCP:3].seq == 333333 True ###(040)=[passed] Complex packet >>> class TestPkt(Packet): ... fields_desc = [ ByteField("f1",65), ... ShortField("f2",0x4244) ] ... def extract_padding(self, p): ... return "", p ... >>> class TestPLF2(Packet): ... fields_desc = [ FieldLenField("len1", None, count_of="plist", fmt="H", ... adjust=lambda pkt, x: x + 2), ... FieldLenField("len2", None, length_of="plist", fmt="I", ... adjust=lambda pkt, x: (x + 1) // 2), ... PacketListField("plist", None, TestPkt, ... length_from=lambda x: (x.len2 * 2) // 3 * 3) ] ... >>> a=TestPLF2() >>> r = raw(a) >>> r b'\x00\x02\x00\x00\x00\x00' >>> assert r == b"\x00\x02\x00\x00\x00\x00" >>> >>> a.plist=[TestPkt(),TestPkt(f1=100)] >>> r = raw(a) >>> r b'\x00\x04\x00\x00\x00\x03ABDdBD' >>> assert r == b'\x00\x04\x00\x00\x00\x03ABDdBD' >>> >>> a /= "123456" >>> b = TestPLF2(raw(a)) >>> b.show() ###[ TestPLF2 ]### len1 = 4 len2 = 3 \plist \ |###[ TestPkt ]### | f1 = 65 | f2 = 16964 |###[ TestPkt ]### | f1 = 100 | f2 = 16964 ###[ Raw ]### load = b'123456' >>> assert b.len1 == 4 and b.len2 == 3 >>> assert b[TestPkt].f1 == 65 and b[TestPkt].f2 == 0x4244 >>> assert b[TestPkt:2].f1 == 100 >>> assert Raw in b and b[Raw].load == b"123456" >>> >>> a.plist.append(TestPkt(f1=200)) >>> b = TestPLF2(raw(a)) >>> b.show() ###[ TestPLF2 ]### len1 = 5 len2 = 5 \plist \ |###[ TestPkt ]### | f1 = 65 | f2 = 16964 |###[ TestPkt ]### | f1 = 100 | f2 = 16964 |###[ TestPkt ]### | f1 = 200 | f2 = 16964 ###[ Raw ]### load = b'123456' >>> assert b.len1 == 5 and b.len2 == 5 >>> assert b[TestPkt].f1 == 65 and b[TestPkt].f2 == 0x4244 >>> assert b[TestPkt:2].f1 == 100 >>> assert b[TestPkt:3].f1 == 200 >>> assert b.getlayer(TestPkt,4) is None >>> assert Raw in b and b[Raw].load == b"123456" >>> hexdiff(a,b) 0000 0000 00 05 00 00 00 05 41 42 44 64 42 44 C8 42 44 31 ......ABDdBD.BD1 0010 0010 32 33 34 35 36 23456 >>> assert raw(a) == raw(b) ###### ## Tests on TCPOptionsField ###### ###(041)=[passed] Test calls on TCPOptionsField.getfield >>> assert TCPOptionsField("test", "").getfield(TCP(dataofs=0), "") == ('', []) ###### ## PacketListField tests ###### ###(042)=[passed] Create a layer >>> class TestPLF(Packet): ... name="test" ... fields_desc=[ FieldLenField("len", None, count_of="plist"), ... PacketListField("plist", None, IP, count_from=lambda pkt:pkt.len) ] ... ###(043)=[passed] Test the PacketListField assembly >>> x=TestPLF() >>> r = raw(x) >>> r b'\x00\x00' >>> r == b"\x00\x00" True ###(044)=[passed] Test the PacketListField assembly 2 >>> x=TestPLF() >>> x.plist=[IP()/TCP(), IP()/UDP()] >>> r = raw(x) >>> r b'\x00\x02E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r' >>> r.startswith(b'\x00\x02E') True ###(045)=[passed] Test disassembly >>> x=TestPLF(plist=[IP()/TCP(seq=1234567), IP()/UDP()]) >>> p = TestPLF(raw(x)) >>> p >, >] |> >>> p.show() ###[ test ]### len = 2 \plist \ |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 40 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = 0x7ccd | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 1234567 | ack = 0 | dataofs = 5 | reserved = 0 | flags = S | window = 8192 | chksum = 0xbae2 | urgptr = 0 | options = [] |###[ IP ]### | version = 4 | ihl = 5 | tos = 0x0 | len = 28 | id = 1 | flags = | frag = 0 | ttl = 64 | proto = udp | chksum = 0x7cce | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ UDP ]### | sport = domain | dport = domain | len = 8 | chksum = 0x172 >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 1234567 True ###(046)=[passed] Nested PacketListField >>> y=IP()/TCP(seq=111111)/TestPLF(plist=[IP()/TCP(seq=222222),IP()/UDP()]) >>> p = TestPLF(plist=[y,IP()/TCP(seq=333333)]) >>> p >, >] |>>>, >] |> >>> p.show() ###[ test ]### len = None \plist \ |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 111111 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] |###[ test ]### | len = None | \plist \ | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = tcp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ TCP ]### | | sport = ftp_data | | dport = http | | seq = 222222 | | ack = 0 | | dataofs = None | | reserved = 0 | | flags = S | | window = 8192 | | chksum = None | | urgptr = 0 | | options = [] | |###[ IP ]### | | version = 4 | | ihl = None | | tos = 0x0 | | len = None | | id = 1 | | flags = | | frag = 0 | | ttl = 64 | | proto = udp | | chksum = None | | src = 127.0.0.1 | | dst = 127.0.0.1 | | \options \ | |###[ UDP ]### | | sport = domain | | dport = domain | | len = None | | chksum = None |###[ IP ]### | version = 4 | ihl = None | tos = 0x0 | len = None | id = 1 | flags = | frag = 0 | ttl = 64 | proto = tcp | chksum = None | src = 127.0.0.1 | dst = 127.0.0.1 | \options \ |###[ TCP ]### | sport = ftp_data | dport = http | seq = 333333 | ack = 0 | dataofs = None | reserved = 0 | flags = S | window = 8192 | chksum = None | urgptr = 0 | options = [] >>> IP in p and TCP in p and UDP in p and p[TCP].seq == 111111 and p[TCP:2].seq==222222 and p[TCP:3].seq == 333333 True ###(047)=[passed] Complex packet >>> class TestPkt(Packet): ... fields_desc = [ ByteField("f1",65), ... ShortField("f2",0x4244) ] ... def extract_padding(self, p): ... return "", p ... >>> class TestPLF2(Packet): ... fields_desc = [ FieldLenField("len1", None, count_of="plist",fmt="H", ... adjust=lambda pkt,x: x + 2), ... FieldLenField("len2", None, length_of="plist", fmt="I", ... adjust=lambda pkt, x: (x + 1) // 2), ... PacketListField("plist", None, TestPkt, ... length_from=lambda x: (x.len2 * 2) // 3 *3) ] ... >>> a=TestPLF2() >>> r = raw(a) >>> r b'\x00\x02\x00\x00\x00\x00' >>> assert r == b"\x00\x02\x00\x00\x00\x00" >>> >>> a.plist=[TestPkt(),TestPkt(f1=100)] >>> r = raw(a) >>> r b'\x00\x04\x00\x00\x00\x03ABDdBD' >>> assert r == b'\x00\x04\x00\x00\x00\x03ABDdBD' >>> >>> a /= "123456" >>> b = TestPLF2(raw(a)) >>> b.show() ###[ TestPLF2 ]### len1 = 4 len2 = 3 \plist \ |###[ TestPkt ]### | f1 = 65 | f2 = 16964 |###[ TestPkt ]### | f1 = 100 | f2 = 16964 ###[ Raw ]### load = b'123456' >>> assert b.len1 == 4 and b.len2 == 3 >>> assert b[TestPkt].f1 == 65 and b[TestPkt].f2 == 0x4244 >>> assert b[TestPkt:2].f1 == 100 >>> assert Raw in b and b[Raw].load == b"123456" >>> >>> a.plist.append(TestPkt(f1=200)) >>> b = TestPLF2(raw(a)) >>> b.show() ###[ TestPLF2 ]### len1 = 5 len2 = 5 \plist \ |###[ TestPkt ]### | f1 = 65 | f2 = 16964 |###[ TestPkt ]### | f1 = 100 | f2 = 16964 |###[ TestPkt ]### | f1 = 200 | f2 = 16964 ###[ Raw ]### load = b'123456' >>> assert b.len1 == 5 and b.len2 == 5 >>> assert b[TestPkt].f1 == 65 and b[TestPkt].f2 == 0x4244 >>> assert b[TestPkt:2].f1 == 100 >>> assert b[TestPkt:3].f1 == 200 >>> assert b.getlayer(TestPkt,4) is None >>> assert Raw in b and b[Raw].load == b"123456" >>> hexdiff(a,b) 0000 0000 00 05 00 00 00 05 41 42 44 64 42 44 C8 42 44 31 ......ABDdBD.BD1 0010 0010 32 33 34 35 36 23456 >>> assert raw(a) == raw(b) ###(048)=[passed] Create layers for heterogeneous PacketListField >>> TestPLFH1 = type('TestPLFH1', (Packet,), { ... 'name': 'test1', ... 'fields_desc': [ByteField('data', 0)], ... 'guess_payload_class': lambda self, p: conf.padding_layer, ... } ... ) >>> TestPLFH2 = type('TestPLFH2', (Packet,), { ... 'name': 'test2', ... 'fields_desc': [ShortField('data', 0)], ... 'guess_payload_class': lambda self, p: conf.padding_layer, ... } ... ) >>> class TestPLFH3(Packet): ... name = 'test3' ... fields_desc = [ ... PacketListField( ... 'data', [], ... next_cls_cb=lambda pkt, lst, p, remain: pkt.detect_next_packet(lst, p, remain) ... ) ... ] ... def detect_next_packet(self, lst, p, remain): ... if len(remain) < 3: ... return None ... if isinstance(p, type(None)): ... return TestPLFH1 ... if p.data & 3 == 1: ... return TestPLFH1 ... if p.data & 3 == 2: ... return TestPLFH2 ... return None ... ###(049)=[passed] Test heterogeneous PacketListField >>> p = TestPLFH3(b'\x02\x01\x01\xc1\x02\x80\x04toto') >>> assert isinstance(p.data[0], TestPLFH1) >>> assert p.data[0].data == 0x2 >>> assert isinstance(p.data[1], TestPLFH2) >>> assert p.data[1].data == 0x101 >>> assert isinstance(p.data[2], TestPLFH1) >>> assert p.data[2].data == 0xc1 >>> assert isinstance(p.data[3], TestPLFH1) >>> assert p.data[3].data == 0x2 >>> assert isinstance(p.data[4], TestPLFH2) >>> assert p.data[4].data == 0x8004 >>> assert isinstance(p.payload, conf.raw_layer) >>> assert p.payload.load == b'toto' >>> >>> p = TestPLFH3(b'\x02\x01\x01\xc1\x02\x80\x02to') >>> assert isinstance(p.data[0], TestPLFH1) >>> assert p.data[0].data == 0x2 >>> assert isinstance(p.data[1], TestPLFH2) >>> assert p.data[1].data == 0x101 >>> assert isinstance(p.data[2], TestPLFH1) >>> assert p.data[2].data == 0xc1 >>> assert isinstance(p.data[3], TestPLFH1) >>> assert p.data[3].data == 0x2 >>> assert isinstance(p.data[4], TestPLFH2) >>> assert p.data[4].data == 0x8002 >>> assert isinstance(p.payload, conf.raw_layer) >>> assert p.payload.load == b'to' ###(050)=[passed] Create layers for heterogeneous PacketListField with memory >>> TestPLFH4 = type('TestPLFH4', (Packet,), { ... 'name': 'test4', ... 'fields_desc': [ByteField('data', 0)], ... 'guess_payload_class': lambda self, p: conf.padding_layer, ... } ... ) >>> TestPLFH5 = type('TestPLFH5', (Packet,), { ... 'name': 'test5', ... 'fields_desc': [ShortField('data', 0)], ... 'guess_payload_class': lambda self, p: conf.padding_layer, ... } ... ) >>> class TestPLFH6(Packet): ... __slots__ = ['_memory'] ... name = 'test6' ... fields_desc = [ ... PacketListField( ... 'data', [], ... next_cls_cb=lambda pkt, lst, p, remain: pkt.detect_next_packet(lst, p, remain) ... ) ... ] ... def detect_next_packet(self, lst, p, remain): ... if isinstance(p, type(None)): ... self._memory = [TestPLFH4] * 3 + [TestPLFH5] ... try: ... return self._memory.pop(0) ... except IndexError: ... return None ... ###(051)=[passed] Test heterogeneous PacketListField with memory >>> p = TestPLFH6(b'\x01\x02\x03\xc1\x02toto') >>> assert isinstance(p.data[0], TestPLFH4) >>> assert p.data[0].data == 0x1 >>> assert isinstance(p.data[1], TestPLFH4) >>> assert p.data[1].data == 0x2 >>> assert isinstance(p.data[2], TestPLFH4) >>> assert p.data[2].data == 0x3 >>> assert isinstance(p.data[3], TestPLFH5) >>> assert p.data[3].data == 0xc102 >>> assert isinstance(p.payload, conf.raw_layer) >>> assert p.payload.load == b'toto' ###(052)=[passed] Test nested PacketListFields >>> class GuessPayload(Packet): ... @classmethod ... def dispatch_hook(cls, *args, **kargs): ... return TestNestedPLF ... >>> class TestNestedPLF(Packet): ... fields_desc = [ ... ByteField('b', 0), ... PacketListField('pl', [], GuessPayload) ... ] ... >>> p = TestNestedPLF(b'\x01' * 100) >>> >>> i = 1 >>> while p.pl: ... p = p.pl[0] ... p.show() ... i += 1 ... ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ | | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ | | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | | b = 1 | | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ | | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | | b = 1 | | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ | | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | | b = 1 | | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ | | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | | b = 1 | | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ | | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | | b = 1 | | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ | | | | | | | |###[ TestNestedPLF ]### | | | | | | | | b = 1 | | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ | | | | | | |###[ TestNestedPLF ]### | | | | | | | b = 1 | | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ | | | | | |###[ TestNestedPLF ]### | | | | | | b = 1 | | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ | | | | |###[ TestNestedPLF ]### | | | | | b = 1 | | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ | | | |###[ TestNestedPLF ]### | | | | b = 1 | | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ | | |###[ TestNestedPLF ]### | | | b = 1 | | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ | |###[ TestNestedPLF ]### | | b = 1 | | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ |###[ TestNestedPLF ]### | b = 1 | \pl \ ###[ TestNestedPLF ]### b = 1 \pl \ >>> assert i == 100 ###(053)=[passed] Test cache handling of payload modification in a PacketListField >>> class SubPacket(Packet): ... fields_desc = [ ... ByteField("b", 0), ... ] ... >>> class MyPacket(Packet): ... fields_desc = [ ... PacketListField("a", [], SubPacket), ... ] ... >>> >>> p = MyPacket(b"\x00extrapayload") >>> p.a[0] = SubPacket(b=0) / b"test" >>> >>> assert bytes(p) == b"\x00test" ###(054)=[passed] Test cache handling of payload modification in a PacketField >>> class PayloadPacket(Packet): ... fields_desc = [ ... StrField("b", ""), ... ] ... >>> class SubPacket(Packet): ... fields_desc = [] ... >>> bind_layers(SubPacket, PayloadPacket) >>> >>> class MyPacket(Packet): ... fields_desc = [ ... PacketField("a", None, SubPacket), ... ] ... >>> >>> s = b'test' >>> p = MyPacket(s) >>> >>> p[PayloadPacket].b = b'new' >>> assert p.build() != s ###### ## Tests on MultiFlagsField ###### ###(055)=[passed] Test calls on MultiFlagsField.any2i >>> import collections >>> MockPacket = collections.namedtuple('MockPacket', ['type']) >>> >>> f = MultiFlagsField('flags', set(), 3, { ... 0: { ... 0: MultiFlagsEntry('A', 'OptionA'), ... 1: MultiFlagsEntry('B', 'OptionB'), ... }, ... 1: { ... 0: MultiFlagsEntry('+', 'Plus'), ... 1: MultiFlagsEntry('*', 'Star'), ... }, ... }, ... depends_on=lambda x: x.type ... ) >>> >>> mp = MockPacket(0) >>> x = f.any2i(mp, set()) >>> assert isinstance(x, set) >>> assert len(x) == 0 >>> x = f.any2i(mp, {'A'}) >>> assert isinstance(x, set) >>> assert len(x) == 1 >>> assert 'A' in x >>> assert 'B' not in x >>> assert '+' not in x >>> x = f.any2i(mp, {'A', 'B'}) >>> assert isinstance(x, set) >>> assert len(x) == 2 >>> assert 'A' in x >>> assert 'B' in x >>> assert '+' not in x >>> assert '*' not in x >>> x = f.any2i(mp, 3) >>> assert isinstance(x, set) >>> assert len(x) == 2 >>> assert 'A' in x >>> assert 'B' in x >>> assert '+' not in x >>> assert '*' not in x >>> x = f.any2i(mp, 7) >>> assert isinstance(x, set) >>> assert len(x) == 3 >>> assert 'A' in x >>> assert 'B' in x >>> assert 'bit 2' in x >>> assert '+' not in x >>> assert '*' not in x >>> mp = MockPacket(1) >>> x = f.any2i(mp, {'+', '*'}) >>> assert isinstance(x, set) >>> assert len(x) == 2 >>> assert '+' in x >>> assert '*' in x >>> assert 'A' not in x >>> assert 'B' not in x >>> try: ... x = f.any2i(mp, {'A'}) ... ret = False ... except AssertionError: ... ret = True ... >>> assert ret >>> x = f.any2i(None, {'Toto'}) >>> assert 'Toto' in x ###(056)=[passed] Test calls on MultiFlagsField.i2m >>> import collections >>> MockPacket = collections.namedtuple('MockPacket', ['type']) >>> >>> f = MultiFlagsField('flags', set(), 3, { ... 0: { ... 0: MultiFlagsEntry('A', 'OptionA'), ... 1: MultiFlagsEntry('B', 'OptionB'), ... }, ... 1: { ... 0: MultiFlagsEntry('+', 'Plus'), ... 1: MultiFlagsEntry('*', 'Star'), ... }, ... }, ... depends_on=lambda x: x.type ... ) >>> >>> mp = MockPacket(0) >>> x = f.i2m(mp, set()) >>> assert isinstance(x, int) >>> assert x == 0 >>> x = f.i2m(mp, {'A'}) >>> assert isinstance(x, int) >>> assert x == 1 >>> x = f.i2m(mp, {'A', 'B'}) >>> assert isinstance(x, int) >>> assert x == 3 >>> x = f.i2m(mp, {'A', 'B', 'bit 2'}) >>> assert isinstance(x, int) >>> assert x == 7 >>> try: ... x = f.i2m(mp, {'+'}) ... ret = False ... except: ... ret = True ... >>> assert ret ###(057)=[passed] Test calls on MultiFlagsField.m2i >>> import collections >>> MockPacket = collections.namedtuple('MockPacket', ['type']) >>> >>> f = MultiFlagsField('flags', set(), 3, { ... 0: { ... 0: MultiFlagsEntry('A', 'OptionA'), ... 1: MultiFlagsEntry('B', 'OptionB'), ... }, ... 1: { ... 0: MultiFlagsEntry('+', 'Plus'), ... 1: MultiFlagsEntry('*', 'Star'), ... }, ... }, ... depends_on=lambda x: x.type ... ) >>> >>> mp = MockPacket(0) >>> x = f.m2i(mp, 2) >>> assert isinstance(x, set) >>> assert len(x) == 1 >>> assert 'B' in x >>> assert 'A' not in x >>> assert '*' not in x >>> >>> x = f.m2i(mp, 7) >>> assert isinstance(x, set) >>> assert 'B' in x >>> assert 'A' in x >>> assert 'bit 2' in x >>> assert '*' not in x >>> assert '+' not in x >>> x = f.m2i(mp, 0) >>> assert len(x) == 0 >>> mp = MockPacket(1) >>> x = f.m2i(mp, 2) >>> assert isinstance(x, set) >>> assert len(x) == 1 >>> assert '*' in x >>> assert '+' not in x >>> assert 'B' not in x ###(058)=[passed] Test calls on MultiFlagsField.i2repr >>> import collections, re >>> MockPacket = collections.namedtuple('MockPacket', ['type']) >>> >>> f = MultiFlagsField('flags', set(), 3, { ... 0: { ... 0: MultiFlagsEntry('A', 'OptionA'), ... 1: MultiFlagsEntry('B', 'OptionB'), ... }, ... 1: { ... 0: MultiFlagsEntry('+', 'Plus'), ... 1: MultiFlagsEntry('*', 'Star'), ... }, ... }, ... depends_on=lambda x: x.type ... ) >>> >>> mp = MockPacket(0) >>> x = f.i2repr(mp, {'A', 'B'}) >>> assert re.match(r'^.*OptionA \(A\).*$', x) is not None >>> assert re.match(r'^.*OptionB \(B\).*$', x) is not None >>> mp = MockPacket(1) >>> x = f.i2repr(mp, {'*', '+', 'bit 2'}) >>> assert re.match(r'^.*Star \(\*\).*$', x) is not None >>> assert re.match(r'^.*Plus \(\+\).*$', x) is not None >>> assert re.match(r'^.*bit 2.*$', x) is not None ###### ## EnumField tests ###### ###(059)=[passed] EnumField tests initialization >>> f = EnumField('test', 0, {0: 'Foo', 1: 'Bar'}) >>> rf = EnumField('test', 0, {'Foo': 0, 'Bar': 1}) >>> lf = EnumField('test', 0, ['Foo', 'Bar']) >>> fcb = EnumField('test', 0, ( ... lambda x: 'Foo' if x == 0 else 'Bar' if 1 <= x <= 10 else repr(x), ... lambda x: 0 if x == 'Foo' else 1 if x == 'Bar' else int(x), ... ) ... ) >>> >>> def expect_exception(e, c): ... try: ... eval(c) ... assert False ... except e: ... assert True ... ###(060)=[passed] EnumField.any2i_one >>> assert f.any2i_one(None, 'Foo') == 0 >>> assert f.any2i_one(None, 'Bar') == 1 >>> assert f.any2i_one(None, 2) == 2 >>> expect_exception(KeyError, 'f.any2i_one(None, "Baz")') >>> >>> assert rf.any2i_one(None, 'Foo') == 0 >>> assert rf.any2i_one(None, 'Bar') == 1 >>> assert rf.any2i_one(None, 2) == 2 >>> expect_exception(KeyError, 'rf.any2i_one(None, "Baz")') >>> >>> assert lf.any2i_one(None, 'Foo') == 0 >>> assert lf.any2i_one(None, 'Bar') == 1 >>> assert lf.any2i_one(None, 2) == 2 >>> expect_exception(KeyError, 'lf.any2i_one(None, "Baz")') >>> >>> assert fcb.any2i_one(None, 'Foo') == 0 >>> assert fcb.any2i_one(None, 'Bar') == 1 >>> assert fcb.any2i_one(None, 5) == 5 >>> expect_exception(ValueError, 'fcb.any2i_one(None, "Baz")') ###(061)=[passed] EnumField.any2i >>> assert f.any2i(None, 'Foo') == 0 >>> assert f.any2i(None, 'Bar') == 1 >>> assert f.any2i(None, 2) == 2 >>> expect_exception(KeyError, 'f.any2i(None, "Baz")') >>> assert f.any2i(None, ['Foo', 'Bar', 2]) == [0, 1, 2] >>> >>> assert rf.any2i(None, 'Foo') == 0 >>> assert rf.any2i(None, 'Bar') == 1 >>> assert rf.any2i(None, 2) == 2 >>> expect_exception(KeyError, 'rf.any2i(None, "Baz")') >>> assert rf.any2i(None, ['Foo', 'Bar', 2]) == [0, 1, 2] >>> >>> assert lf.any2i(None, 'Foo') == 0 >>> assert lf.any2i(None, 'Bar') == 1 >>> assert lf.any2i(None, 2) == 2 >>> expect_exception(KeyError, 'lf.any2i(None, "Baz")') >>> assert lf.any2i(None, ['Foo', 'Bar', 2]) == [0, 1, 2] >>> >>> assert fcb.any2i(None, 'Foo') == 0 >>> assert fcb.any2i(None, 'Bar') == 1 >>> assert fcb.any2i(None, 5) == 5 >>> expect_exception(ValueError, 'fcb.any2i(None, "Baz")') >>> assert f.any2i(None, ['Foo', 'Bar', 5]) == [0, 1, 5] >>> >>> True True ###(062)=[passed] EnumField.i2repr_one >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '2' >>> >>> assert rf.i2repr_one(None, 0) == 'Foo' >>> assert rf.i2repr_one(None, 1) == 'Bar' >>> assert rf.i2repr_one(None, 2) == '2' >>> >>> assert lf.i2repr_one(None, 0) == 'Foo' >>> assert lf.i2repr_one(None, 1) == 'Bar' >>> assert lf.i2repr_one(None, 2) == '2' >>> >>> assert fcb.i2repr_one(None, 0) == 'Foo' >>> assert fcb.i2repr_one(None, 1) == 'Bar' >>> assert fcb.i2repr_one(None, 5) == 'Bar' >>> assert fcb.i2repr_one(None, 11) == repr(11) >>> >>> conf.noenum.add(f, rf, lf, fcb) >>> >>> assert f.i2repr_one(None, 0) == repr(0) >>> assert f.i2repr_one(None, 1) == repr(1) >>> assert f.i2repr_one(None, 2) == repr(2) >>> >>> assert rf.i2repr_one(None, 0) == repr(0) >>> assert rf.i2repr_one(None, 1) == repr(1) >>> assert rf.i2repr_one(None, 2) == repr(2) >>> >>> assert lf.i2repr_one(None, 0) == repr(0) >>> assert lf.i2repr_one(None, 1) == repr(1) >>> assert lf.i2repr_one(None, 2) == repr(2) >>> >>> assert fcb.i2repr_one(None, 0) == repr(0) >>> assert fcb.i2repr_one(None, 1) == repr(1) >>> assert fcb.i2repr_one(None, 5) == repr(5) >>> assert fcb.i2repr_one(None, 11) == repr(11) >>> >>> conf.noenum.remove(f, rf, lf, fcb) >>> >>> assert f.i2repr_one(None, RandNum(0, 10)) == '' >>> assert rf.i2repr_one(None, RandNum(0, 10)) == '' >>> assert lf.i2repr_one(None, RandNum(0, 10)) == '' >>> assert fcb.i2repr_one(None, RandNum(0, 10)) == '' >>> >>> True True ###(063)=[passed] EnumField.i2repr >>> assert f.i2repr(None, 0) == 'Foo' >>> assert f.i2repr(None, 1) == 'Bar' >>> assert f.i2repr(None, 2) == '2' >>> assert f.i2repr(None, [0, 1]) == ['Foo', 'Bar'] >>> >>> assert rf.i2repr(None, 0) == 'Foo' >>> assert rf.i2repr(None, 1) == 'Bar' >>> assert rf.i2repr(None, 2) == '2' >>> assert rf.i2repr(None, [0, 1]) == ['Foo', 'Bar'] >>> >>> assert lf.i2repr(None, 0) == 'Foo' >>> assert lf.i2repr(None, 1) == 'Bar' >>> assert lf.i2repr(None, 2) == '2' >>> assert lf.i2repr(None, [0, 1]) == ['Foo', 'Bar'] >>> >>> assert fcb.i2repr(None, 0) == 'Foo' >>> assert fcb.i2repr(None, 1) == 'Bar' >>> assert fcb.i2repr(None, 5) == 'Bar' >>> assert fcb.i2repr(None, 11) == repr(11) >>> assert fcb.i2repr(None, [0, 1, 5, 11]) == ['Foo', 'Bar', 'Bar', repr(11)] >>> >>> conf.noenum.add(f, rf, lf, fcb) >>> >>> assert f.i2repr(None, 0) == repr(0) >>> assert f.i2repr(None, 1) == repr(1) >>> assert f.i2repr(None, 2) == repr(2) >>> assert f.i2repr(None, [0, 1, 2]) == [repr(0), repr(1), repr(2)] >>> >>> assert rf.i2repr(None, 0) == repr(0) >>> assert rf.i2repr(None, 1) == repr(1) >>> assert rf.i2repr(None, 2) == repr(2) >>> assert rf.i2repr(None, [0, 1, 2]) == [repr(0), repr(1), repr(2)] >>> >>> assert lf.i2repr(None, 0) == repr(0) >>> assert lf.i2repr(None, 1) == repr(1) >>> assert lf.i2repr(None, 2) == repr(2) >>> assert lf.i2repr(None, [0, 1, 2]) == [repr(0), repr(1), repr(2)] >>> >>> assert fcb.i2repr(None, 0) == repr(0) >>> assert fcb.i2repr(None, 1) == repr(1) >>> assert fcb.i2repr(None, 5) == repr(5) >>> assert fcb.i2repr(None, 11) == repr(11) >>> assert fcb.i2repr(None, [0, 1, 5, 11]) == [repr(0), repr(1), repr(5), repr(11)] >>> >>> conf.noenum.remove(f, rf, lf, fcb) >>> >>> assert f.i2repr_one(None, RandNum(0, 10)) == '' >>> assert rf.i2repr_one(None, RandNum(0, 10)) == '' >>> assert lf.i2repr_one(None, RandNum(0, 10)) == '' >>> assert fcb.i2repr_one(None, RandNum(0, 10)) == '' >>> >>> True True ###(064)=[passed] EnumField with Enum >>> from enum import Enum >>> >>> class JUICE(Enum): ... APPLE = 0 ... ORANGE = 1 ... PINEAPPLE = 2 ... >>> >>> class Breakfast(Packet): ... fields_desc = [EnumField("juice", 1, JUICE, fmt="H")] ... >>> >>> assert raw(Breakfast(juice="ORANGE")) == b"\x00\x01" ###(065)=[passed] LE3BytesEnumField >>> f = LE3BytesEnumField('test', 0, {0: 'Foo', 1: 'Bar'}) ###(066)=[passed] LE3BytesEnumField.i2repr_one >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '2' ###(067)=[passed] XLE3BytesEnumField >>> assert XLE3BytesEnumField("a", 0, {0: "test"}).i2repr_one(None, 0) == "test" >>> assert XLE3BytesEnumField("a", 0, {0: "test"}).i2repr_one(None, 1) == "0x1" ###### ## CharEnumField tests ###### ###(068)=[passed] Building expect_exception handler >>> def expect_exception(e, c): ... try: ... eval(c) ... assert False ... except e: ... assert True ... ###(069)=[passed] CharEnumField tests initialization >>> fc = CharEnumField('test', 'f', {'f': 'Foo', 'b': 'Bar'}) >>> fcb = CharEnumField('test', 'a', ( ... lambda x: 'Foo' if x == 'a' else 'Bar' if x == 'b' else 'Baz', ... lambda x: 'a' if x == 'Foo' else 'b' if x == 'Bar' else '' ... )) >>> >>> True True ###(070)=[passed] CharEnumField.any2i_one >>> assert fc.any2i_one(None, 'Foo') == 'f' >>> assert fc.any2i_one(None, 'Bar') == 'b' >>> expect_exception(KeyError, 'fc.any2i_one(None, "Baz")') >>> >>> assert fcb.any2i_one(None, 'Foo') == 'a' >>> assert fcb.any2i_one(None, 'Bar') == 'b' >>> assert fcb.any2i_one(None, 'Baz') == '' >>> >>> True True ###### ## XByteEnumField tests ###### ###(071)=[passed] Building expect_exception handler >>> def expect_exception(e, c): ... try: ... eval(c) ... assert False ... except e: ... assert True ... ###(072)=[passed] XByteEnumField tests initialization >>> f = XByteEnumField('test', 0, {0: 'Foo', 1: 'Bar'}) >>> fcb = XByteEnumField('test', 0, ( ... lambda x: 'Foo' if x == 0 else 'Bar' if x == 1 else lhex(x), ... lambda x: x ... )) >>> >>> True True ###(073)=[passed] XByteEnumField.i2repr_one >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> True True ###(074)=[passed] XByteEnumField update tests initialization >>> enum = ObservableDict({0: 'Foo', 1: 'Bar'}) >>> f = XByteEnumField('test', 0, enum) >>> fcb = XByteEnumField('test', 0, ( ... lambda x: 'Foo' if x == 0 else 'Bar' if x == 1 else lhex(x), ... lambda x: x ... )) >>> >>> True True ###(075)=[passed] XByteEnumField.i2repr_one with update >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '0x2' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '0x2' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> del enum[1] >>> enum[2] = 'Baz' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == '0x1' >>> assert f.i2repr_one(None, 2) == 'Baz' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == '0x1' >>> assert f.i2repr_one(None, 2) == 'Baz' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> True True ###### ## XShortEnumField tests ###### ###(076)=[passed] Building expect_exception handler >>> def expect_exception(e, c): ... try: ... eval(c) ... assert False ... except e: ... assert True ... ###(077)=[passed] XShortEnumField tests initialization >>> f = XShortEnumField('test', 0, {0: 'Foo', 1: 'Bar'}) >>> fcb = XShortEnumField('test', 0, ( ... lambda x: 'Foo' if x == 0 else 'Bar' if x == 1 else lhex(x), ... lambda x: x ... )) >>> >>> True True ###(078)=[passed] XShortEnumField.i2repr_one >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> True True ###(079)=[passed] XShortEnumField update tests initialization >>> enum = ObservableDict({0: 'Foo', 1: 'Bar'}) >>> f = XShortEnumField('test', 0, enum) >>> fcb = XShortEnumField('test', 0, ( ... lambda x: 'Foo' if x == 0 else 'Bar' if x == 1 else lhex(x), ... lambda x: x ... )) >>> >>> True True ###(080)=[passed] XShortEnumField.i2repr_one with update >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '0x2' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == 'Bar' >>> assert f.i2repr_one(None, 2) == '0x2' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> del enum[1] >>> enum[2] = 'Baz' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == '0x1' >>> assert f.i2repr_one(None, 2) == 'Baz' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> assert f.i2repr_one(None, 0) == 'Foo' >>> assert f.i2repr_one(None, 1) == '0x1' >>> assert f.i2repr_one(None, 2) == 'Baz' >>> assert f.i2repr_one(None, 0xff) == '0xff' >>> >>> True True ###### ## DNSStrField tests ###### ###(081)=[passed] Raise exception - test data >>> dnsf = DNSStrField("test", "") >>> assert dnsf.getfield(None, b"\x01x\x00") == (b"", b"x.") >>> >>> try: ... dnsf.getfield(None, b"\xc0\xff") ... assert False ... except (Scapy_Exception, IndexError): ... pass ... ###### ## YesNoByteField ###### ###(082)=[passed] default usage >>> yn_bf = YesNoByteField('test', 0x00) >>> assert yn_bf.i2repr(None, 0x00) == 'no' >>> assert yn_bf.i2repr(None, 0x01) == 'yes' >>> assert yn_bf.i2repr(None, 0x02) == 'yes' >>> assert yn_bf.i2repr(None, 0xff) == 'yes' ###(083)=[passed] inverted yes - no (scalar config) >>> yn_bf = YesNoByteField('test', 0x00, config={'yes': 0x00, 'no': 0x01}) >>> assert yn_bf.i2repr(None, 0x00) == 'yes' >>> assert yn_bf.i2repr(None, 0x01) == 'no' >>> assert yn_bf.i2repr(None, 0x02) == 2 >>> assert yn_bf.i2repr(None, 0xff) == 255 ###(084)=[passed] inverted yes - no (range config) >>> yn_bf = YesNoByteField('test', 0x00, config={'yes': 0x00, 'no': (0x01, 0xff)}) >>> assert yn_bf.i2repr(None, 0x00) == 'yes' >>> assert yn_bf.i2repr(None, 0x01) == 'no' >>> assert yn_bf.i2repr(None, 0x02) == 'no' >>> assert yn_bf.i2repr(None, 0xff) == 'no' ###(085)=[passed] yes - no (using sets) >>> yn_bf = YesNoByteField('test', 0x00, config={'yes': [0x00, 0x02], 'no': [0x01, 0x04, 0xff]}) >>> assert yn_bf.i2repr(None, 0x00) == 'yes' >>> assert yn_bf.i2repr(None, 0x01) == 'no' >>> assert yn_bf.i2repr(None, 0x02) == 'yes' >>> assert yn_bf.i2repr(None, 0x03) == 3 >>> assert yn_bf.i2repr(None, 0x04) == 'no' >>> assert yn_bf.i2repr(None, 0x05) == 5 >>> assert yn_bf.i2repr(None, 0xff) == 'no' ###(086)=[passed] yes, no and invalid >>> yn_bf = YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': 0x01, 'invalid': (0x02, 0xff)}) >>> assert yn_bf.i2repr(None, 0x00) == 'no' >>> assert yn_bf.i2repr(None, 0x01) == 'yes' >>> assert yn_bf.i2repr(None, 0x02) == 'invalid' >>> assert yn_bf.i2repr(None, 0xff) == 'invalid' ###(087)=[passed] invalid scalar spec >>> try: ... YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': 256}) ... assert False ... except FieldValueRangeException: ... pass ... ###(088)=[passed] invalid range spec - invalid length >>> try: ... YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': (0x00, 0x02, 0x02)}) ... assert False ... except FieldAttributeException: ... pass ... ###(089)=[passed] invalid range spec - invalid value >>> try: ... YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': (0x100, 0x01)}) ... assert False ... except FieldValueRangeException: ... pass ... >>> try: ... YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': (0x00, 0x100)}) ... assert False ... except FieldValueRangeException: ... pass ... ###(090)=[passed] invalid set spec - invalid value >>> try: ... YesNoByteField('test', 0x00, config={'no': 0x00, 'yes': [0x01, 0x101]}) ... assert False ... except FieldValueRangeException: ... pass ... ###(091)=[passed] FlasgField - Python incompatible name >>> assert Dot11().FCfield.to_DS is False ###### ## MultipleTypeField ###### ###(092)=[passed] Test initialization order >>> class DebugPacket(Packet): ... fields_desc = [ ... ByteEnumField("atyp", 0x1, {0x1: "IPv4", 0x3: "DNS", 0x4: "IPv6"}), ... MultipleTypeField( ... [ ... # IPv4 ... (IPField("addr", "0.0.0.0"), lambda pkt: pkt.atyp == 0x1), ... # DNS ... (DNSStrField("addr", ""), lambda pkt: pkt.atyp == 0x3), ... # IPv6 ... (IP6Field("addr", "::"), lambda pkt: pkt.atyp == 0x4), ... ], ... StrField("addr", "") ... ), ... ] ... ###(093)=[passed] Default order >>> a = DebugPacket(atyp=0x3, addr="scapy.net") >>> a = DebugPacket(raw(a)) >>> assert a.addr == b"scapy.net." ###(094)=[passed] Reversed order >>> a = DebugPacket(addr="scapy.net", atyp=0x3) >>> a = DebugPacket(raw(a)) >>> assert a.addr == b"scapy.net." ###(095)=[passed] Test default values auto-update >>> class SweetPacket(Packet): ... name = 'Sweet Celestian Packet' ... fields_desc = [ ... IntField('switch', 0), ... MultipleTypeField([ ... (XShortField('subfield', 0xDEAD), lambda pkt: pkt.switch == 1), ... (XIntField('subfield', 0xBEEFBEEF), lambda pkt: pkt.switch == 2)], ... XByteField('subfield', 0x88) ... ) ... ] ... >>> o = SweetPacket() >>> assert o.subfield == 0x88 >>> >>> o = SweetPacket(switch=1) >>> assert o.subfield == 0xDEAD >>> >>> o = SweetPacket(switch=2) >>> assert o.subfield == 0xBEEFBEEF >>> >>> o = SweetPacket() >>> assert o.subfield == 0x88 >>> o.switch = 1 >>> assert o.subfield == 0xDEAD >>> o.switch = 2 >>> assert o.subfield == 0xBEEFBEEF >>> >>> o = SweetPacket(switch=1, subfield=0x88) >>> assert o.subfield == 0x88 ###(096)=[passed] MultipleTypeField - syntax error >>> import warnings >>> >>> with warnings.catch_warnings(record=True) as w: ... warnings.simplefilter("always") ... class MTFPacket(Packet): ... fields_desc = [ByteField("a", 0), ... MultipleTypeField([ ... (ByteField("b", 0), lambda pkt: pkt.a == 0), ... (ShortField("not_b", 0), lambda: pkt.a != 0), ... ], IntField("b", 0))] ... assert len(w) == 1 ... assert issubclass(w[-1].category, SyntaxWarning) ... ###### ## FlagsField ###### ###(097)=[passed] Test Flags Field Iterator >>> class FlagsTest(Packet): ... fields_desc = [FlagsField("flags", 0, 8, ... ["f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7"])] ... ###(098)=[passed] Test upper nibble >>> a = FlagsTest(b"\xf0") >>> flags = list(a.flags) >>> >>> assert len(flags) == 4 >>> assert "f4" in flags >>> assert "f5" in flags >>> assert "f6" in flags >>> assert "f7" in flags ###(099)=[passed] Test lower nibble >>> a = FlagsTest(b"\x0f") >>> flags = list(a.flags) >>> >>> assert len(flags) == 4 >>> assert "f3" in flags >>> assert "f2" in flags >>> assert "f1" in flags >>> assert "f0" in flags ###(100)=[passed] Test single flag 1 >>> a = FlagsTest(b"\x01") >>> flags = list(a.flags) >>> >>> assert len(flags) == 1 >>> assert "f0" in flags ###(101)=[passed] Test single flag 2 >>> a = FlagsTest(b"\x02") >>> flags = list(a.flags) >>> >>> assert len(flags) == 1 >>> assert "f1" in flags ###(102)=[passed] Test single flag 0x80 >>> a = FlagsTest(b"\x80") >>> flags = list(a.flags) >>> >>> assert len(flags) == 1 >>> assert "f7" in flags ###(103)=[passed] Test pattern 0x55 >>> a = FlagsTest(b"\x55") >>> flags = list(a.flags) >>> >>> assert len(flags) == 4 >>> assert "f6" in flags >>> assert "f2" in flags >>> assert "f4" in flags >>> assert "f0" in flags ###(104)=[passed] Test pattern 0xAA >>> a = FlagsTest(b"\xAA") >>> flags = list(a.flags) >>> >>> assert len(flags) == 4 >>> assert "f7" in flags >>> assert "f3" in flags >>> assert "f5" in flags >>> assert "f1" in flags ###(105)=[passed] Test pattern 0x00 >>> a = FlagsTest(b"\x00") >>> flags = list(a.flags) >>> >>> assert len(flags) == 0 ###(106)=[passed] Test pattern 0xFF >>> a = FlagsTest(b"\xFF") >>> flags = list(a.flags) >>> >>> assert len(flags) == 8 >>> assert "f7" in flags >>> assert "f3" in flags >>> assert "f5" in flags >>> assert "f1" in flags >>> assert "f6" in flags >>> assert "f2" in flags >>> assert "f4" in flags >>> assert "f0" in flags ###(107)=[passed] FlagsField with str >>> class TCPTest(Packet): ... fields_desc = [ ... BitField("reserved", 0, 7), ... FlagsField("flags", 0x2, 9, "FSRPAUECN") ... ] ... >>> a = TCPTest(flags=3) >>> assert a.flags.F >>> assert a.flags.S >>> assert a.sprintf("%flags%") == "FS" ###(108)=[passed] FlagsField with dict >>> class FlagsTest2(Packet): ... fields_desc = [ ... FlagsField("flags", 0x2, 16, { ... 0x0001: "A", ... 0x0008: "B", ... 0x1000: "C", ... }) ... ] ... >>> a = FlagsTest2(flags=9) >>> a.sprintf("%flags%") 'A+B' >>> assert a.flags.A >>> assert a.flags.B >>> assert a.sprintf("%flags%") == "A+B" >>> >>> b = FlagsTest2(flags="B+C") >>> assert b.flags == 0x1000 | 0x0008 ###(109)=[passed] Conditional FlagsField command >>> class CondFlagsTest(Packet): ... fields_desc = [ ... ByteField("b", 0), ... ConditionalField(FlagsField("f", 0, 8, ""), lambda p: p.b == 0) ... ] ... >>> p = CondFlagsTest(b"\x00\x0f") >>> assert p == eval(p.command()) ###### ## ScalingField ###### ###(110)=[passed] ScalingField Test default behaviour >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0) ... ] ... >>> x = DebugPacket() >>> assert len(x) == 1 >>> assert x.data == 0 >>> >>> x.data = 1 >>> assert x.data == 1 ###(111)=[passed] ScalingField Test string assignment >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1) ... ] ... >>> x = DebugPacket() >>> >>> x.data = '\x01' >>> assert x.data == 0.1 >>> x.data = 2.0 >>> assert x.data == 2.0 >>> assert bytes(x) == b"\x14" >>> x.data = b'\xff' >>> assert x.data == 25.5 >>> x.data = '\x7f' >>> assert x.data == 12.7 ###(112)=[passed] ScalingField Test scaling >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1) ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == 0.1 >>> x.data = 2.0 >>> assert x.data == 2.0 >>> assert bytes(x) == b"\x14" >>> x.data = b'\xff' >>> assert x.data == 25.5 ###(113)=[passed] ScalingField Test scaling signed >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, fmt="b") ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == 0.1 >>> x.data = 12.7 >>> assert x.data == 12.7 >>> assert bytes(x) == b"\x7f" >>> x.data = b'\x80' >>> assert x.data == -12.8 >>> x.data = -0.1 >>> assert x.data == -0.1 >>> assert bytes(x) == b"\xff" ###(114)=[passed] ScalingField Test scaling signed offset >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-1, fmt="b") ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == -0.9 >>> x.data = 11.7 >>> assert x.data == 11.7 >>> assert bytes(x) == b"\x7f" >>> x.data = b'\x80' >>> assert x.data == -13.8 >>> x.data = -1.1 >>> assert x.data == -1.1 >>> assert bytes(x) == b"\xff" ###(115)=[passed] ScalingField Test scaling offset >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-1) ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == -0.9 >>> x.data = 11.7 >>> assert x.data == 11.7 >>> assert bytes(x) == b"\x7f" >>> x.data = b'\x80' >>> assert x.data == 11.8 >>> x.data = 24.5 >>> assert x.data == 24.5 >>> assert bytes(x) == b"\xff" ###(116)=[passed] ScalingField Test unit >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, unit="V") ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == 1 >>> assert ScalingField.i2repr(x.fields_desc[0],x, x.data) == '1 V' ###(117)=[passed] ScalingField Test unit and ndigits >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.123456, unit="V", ndigits=1) ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> assert x.data == 0.1 >>> assert ScalingField.i2repr(x.fields_desc[0],x, x.data) == '0.1 V' ###(118)=[passed] ScalingField Test unit and ndigits 2 >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.123456, unit="V", ndigits=3) ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> print(x.__repr__()) >>> assert x.data == 0.123 >>> assert ScalingField.i2repr(x.fields_desc[0],x, x.data) == '0.123 V' ###(119)=[passed] ScalingField Test unit and ndigits 3 >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.123456, unit="V", ndigits=5) ... ] ... >>> x = DebugPacket() >>> >>> x.data = b'\x01' >>> print(x.__repr__()) >>> assert x.data == 0.12346 >>> assert ScalingField.i2repr(x.fields_desc[0],x, x.data) == '0.12346 V' ###(120)=[passed] ScalingField randval byte >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-5) ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -5.0 >>> assert r.max == 20.5 ###(121)=[passed] ScalingField randval byte 2 >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=-0.1, offset=-5) ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -30.5 >>> assert r.max == -5 ###(122)=[passed] ScalingField signed randval byte >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=-0.1, offset=-5, fmt="b") ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -17.7 >>> assert r.max == 7.8 ###(123)=[passed] ScalingField signed randval byte 2 >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-5, fmt="b") ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -17.8 >>> assert r.max == 7.7 ###(124)=[passed] ScalingField signed randval short >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-5, fmt="h") ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -3281.8 >>> assert r.max == 3271.7 ###(125)=[passed] ScalingField signed randval int >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-5, fmt="i") ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -214748369.8 >>> assert r.max == 214748359.7 ###(126)=[passed] ScalingField signed randval long >>> class DebugPacket(Packet): ... fields_desc = [ ... ScalingField('data', 0, scaling=0.1, offset=-5, fmt="q") ... ] ... >>> x = DebugPacket() >>> >>> r = x.fields_desc[0].randval() >>> val = r._fix() >>> assert r.min == -922337203685477585.8 >>> assert r.max == 922337203685477575.7 ###(127)=[passed] ScalingField signed randval long >>> y = fuzz(x) >>> assert bytes(y) != bytes(y) ###(128)=[passed] LSBExtendedField Test addfield and getfield >>> f = LSBExtendedField("a", 0) >>> >>> assert f.addfield(None, b"", 1) == b"\x02" >>> assert f.addfield(None, b"", 127) == b"\xfe" >>> assert f.addfield(None, b"", 128) == b"\x01\x02" >>> assert f.addfield(None, b"", 536) == b"1\x08" >>> assert f.addfield(None, b"", 16383) == b"\xff\xfe" ###(129)=[passed] MSBExtendedField Test i2m and m2i >>> f = MSBExtendedField("a", 0) >>> >>> assert f.addfield(None, b"", 1) == b"\x01" >>> assert f.addfield(None, b"", 127) == b"\x7f" >>> assert f.addfield(None, b"", 128) == b"\x80\x01" >>> assert f.addfield(None, b"", 536) == b"\x98\x04" >>> assert f.addfield(None, b"", 16383) == b"\xff\x7f" ###### ## Deprecated fields in Packet ###### ###(130)=[passed] Field Deprecation test >>> class TestPacket(Packet): ... fields_desc = [ ... ByteField("a", 0), ... LEShortField("b", 15), ... ] ... deprecated_fields = { ... "dpr": ("a", "1.0"), ... "B": ("b", "1.0"), ... } ... >>> try: ... pkt = TestPacket(a=2, B=3) ... assert pkt.B == 3 ... assert pkt.b == 3 ... assert pkt.a == 2 ... ... import warnings ... ... with warnings.catch_warnings(record=True) as w: ... warnings.simplefilter("always") ... assert pkt.dpr == 2 ... assert len(w) == 1 ... assert issubclass(w[-1].category, DeprecationWarning) ... except DeprecationWarning: ... # -Werror is used ... pass ... ###### ## FCSField ###### ###(131)=[passed] FCSField: basic test >>> class TestPacket(Packet): ... fields_desc = [ ... ByteField("a", 0), ... LEShortField("b", 15), ... LEIntField("c", 7), ... FCSField("fcs", None), ... IntField("bottom", 0) ... ] ... >>> bind_layers(TestPacket, Ether) >>> >>> pkt = TestPacket(a=12, fcs=0xbeef, bottom=123)/Ether(src="aa:aa:aa:aa:aa:aa", dst="bb:bb:bb:bb:bb:bb")/IP(src="127.0.0.1", dst="127.0.0.1") >>> >>> assert raw(pkt) == b'\x0c\x0f\x00\x07\x00\x00\x00\x00\x00\x00{\xbb\xbb\xbb\xbb\xbb\xbb\xaa\xaa\xaa\xaa\xaa\xaa\x08\x00E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01\xbe\xef' >>> assert raw(pkt) == b'\x0c\x0f\x00\x07\x00\x00\x00\x00\x00\x00{\xbb\xbb\xbb\xbb\xbb\xbb\xaa\xaa\xaa\xaa\xaa\xaa\x08\x00E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01\xbe\xef' >>> >>> pkt = TestPacket(raw(pkt)) >>> assert pkt.fcs == 0xbeef ###(132)=[passed] FCSField: multiple >>> class TestPacket2(Packet): ... fields_desc = [ ... ByteField("a", 0), ... LEShortField("b", 15), ... FCSField("fcs1", None), ... LEIntField("c", 7), ... FCSField("fcs2", None), ... IntField("bottom", 0), ... ] ... >>> bind_layers(TestPacket2, Ether) >>> >>> pkt = TestPacket2(a=12, fcs1=0xbeef, fcs2=0xfeed, bottom=123)/Ether(src="aa:aa:aa:aa:aa:aa", dst="bb:bb:bb:bb:bb:bb")/IP(src="127.0.0.1", dst="127.0.0.1") >>> >>> assert raw(pkt) == b'\x0c\x0f\x00\x07\x00\x00\x00\x00\x00\x00{\xbb\xbb\xbb\xbb\xbb\xbb\xaa\xaa\xaa\xaa\xaa\xaa\x08\x00E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01\xfe\xed\xbe\xef' >>> assert raw(pkt) == b'\x0c\x0f\x00\x07\x00\x00\x00\x00\x00\x00{\xbb\xbb\xbb\xbb\xbb\xbb\xaa\xaa\xaa\xaa\xaa\xaa\x08\x00E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01\xfe\xed\xbe\xef' >>> >>> pkt = TestPacket2(raw(pkt)) >>> assert pkt.fcs1 == 0xbeef >>> assert pkt.fcs2 == 0xfeed >>> assert pkt.bottom == 123 >>> assert pkt.a == 12 ###### ## PacketField ###### ###(133)=[passed] PacketField: randval() >>> class DebugPacket(Packet): ... fields_desc = [ ... ShortField('short', 0), ... ByteField('byte', 0), ... LongField('long', 0) ... ] ... >>> p = PacketField('packet', b'', DebugPacket).randval() >>> >>> assert isinstance(p.short, RandShort) >>> assert isinstance(p.byte, RandByte) >>> assert isinstance(p.long, RandLong) ###(134)=[passed] PacketField: randval(), PacketField in PacketField >>> class DebugPacket(Packet): ... fields_desc = [ ... ShortField('short1', 0), ... ByteField('byte', 0), ... LongField('long', 0) ... ] ... >>> class DummyPacket(Packet): ... fields_desc = [ ... PacketField('packet', b'', DebugPacket), ... ShortField('short2', 0) ... ] ... >>> >>> p = PacketField('packet', b'', DummyPacket).randval() >>> >>> assert isinstance(p.packet.short1, RandShort) >>> assert isinstance(p.packet.byte, RandByte) >>> assert isinstance(p.packet.long, RandLong) >>> assert isinstance(p.short2, RandShort) ###(135)=[passed] Test parent reference in guess_payload_class >>> class TestGuessInner(Packet): ... name="test guess inner" ... fields_desc=[ ByteField("foo", 0) ] ... def guess_payload_class(self, payload): ... self.parentflag = True ... if self.parent is None: ... # all exceptions are caught, so have to use flag ... self.parentflag = False ... return super(TestGuessInner, self).guess_payload_class(payload) ... >>> class TestGuess(Packet): ... name="test guess" ... fields_desc=[ PacketField("pf", None, TestGuessInner) ] ... >>> x=TestGuess(pf=TestGuessInner()/Raw(b'123')) >>> p=TestGuess(raw(x)) >>> assert p[TestGuessInner].parentflag >>> assert p[TestGuessInner].parent == p ###### ## XStr(*)Field tests ###### ###(136)=[passed] i2repr >>> from collections import namedtuple >>> MockPacket = namedtuple('MockPacket', ['type']) >>> >>> mp = MockPacket(0) >>> f = XStrField('test', None) >>> x = f.i2repr(mp, RandBin()) >>> assert x == '' ###### ## Raw() tests ###### ###(137)=[passed] unaligned data >>> p = Raw(b"abc") >>> p >>> >>> offsetdata = bytes.fromhex("0" + p.load.hex() + "0") >>> >>> p = Raw((offsetdata, 4)) >>> p ###### ## PacketListField() tests ###### ###(138)=[passed] unaligned data >>> class PInner(Packet): ... name = "PInner" ... fields_desc = [ ... BitField("x", 0, 8), ... ] ... def extract_padding(self, s): ... return '', s ... >>> class POuter(Packet): ... name = "POuter" ... fields_desc = [ ... BitField("indent", 0, 4), ... BitFieldLenField("pcount", None, 8, count_of="plist"), ... PacketListField("plist", None, PInner, ... count_from=lambda pkt: pkt.pcount), ... ] ... >>> p = POuter(b"\xf0\x44\x14\x24\x34\x40") >>> p , , , ] |> >>> >>> assert p.indent == 0xf >>> assert p.pcount == 4 >>> assert [p.x for p in p.plist] == [0x41, 0x42, 0x43, 0x44] Import tests ━ Run at 04:10:50 from [test/imports.uts] by UTscapy in 137.24255537986755 └ Passed=4 └ Failed=0 ###### ## Import tests ###### ###(000)=[passed] Prepare importing all scapy files >>> import os >>> import glob >>> import subprocess >>> import re >>> import time >>> import sys >>> from scapy.consts import WINDOWS, OPENBSD >>> >>> EXCEPTIONS = [ ... "scapy.__main__", ... "scapy.all", ... "scapy.contrib.automotive*", ... "scapy.contrib.cansocket*", ... "scapy.contrib.isotp*", ... "scapy.contrib.scada*", ... "scapy.layers.all", ... "scapy.main", ... ] >>> >>> if WINDOWS: ... EXCEPTIONS.append("scapy.layers.tuntap") ... >>> EXCEPTION_PACKAGES = [ ... "arch", ... "libs", ... "modules", ... "tools", ... ] >>> >>> ALL_FILES = [ ... "scapy." + re.match(".*scapy\\" + os.path.sep + "(.*)\\.py$", x).group(1).replace(os.path.sep, ".") ... for x in glob.iglob(scapy_path('/scapy/**/*.py'), recursive=True) ... ] >>> ALL_FILES = [ ... x for x in ALL_FILES if ... not any(x == y if y[-1] != "*" else x.startswith(y[:-1]) for y in EXCEPTIONS) and ... x.split(".")[1] not in EXCEPTION_PACKAGES ... ] >>> >>> NB_PROC = 1 if WINDOWS or OPENBSD else 4 >>> >>> def append_processes(processes, filename): ... processes.append( ... (subprocess.Popen( ... [sys.executable, "-c", "import %s" % filename], ... stderr=subprocess.PIPE, encoding="utf8"), ... time.time(), ... filename)) ... >>> def check_processes(processes): ... for i, tup in enumerate(processes): ... proc, start_ts, file = tup ... errs = "" ... try: ... _, errs = proc.communicate(timeout=0.5) ... except subprocess.TimeoutExpired: ... if time.time() - start_ts > 30: ... proc.kill() ... errs = "Timed out (>30s)!" ... if proc.returncode is None: ... continue ... else: ... print("Finished %s with %d after %f sec" % ... (file, proc.returncode, time.time() - start_ts)) ... if proc.returncode != 0: ... for p in processes: ... p[0].kill() ... raise Exception( ... "Importing the file '%s' failed !\\n%s" % (file, errs)) ... del processes[i] ... return ... >>> >>> def import_all(FILES): ... processes = list() ... while len(processes) == NB_PROC: ... check_processes(processes) ... for filename in FILES: ... check_processes(processes) ... if len(processes) < NB_PROC: ... append_processes(processes, filename) ... ###(001)=[passed] Try importing all core separately >>> import_all(x for x in ALL_FILES if "layers" not in x and "contrib" not in x) Finished scapy.volatile with 0 after 0.806854 sec Finished scapy.utils with 0 after 0.795195 sec Finished scapy.utils6 with 0 after 1.102405 sec Finished scapy.themes with 0 after 0.132875 sec Finished scapy.sessions with 0 after 0.843016 sec Finished scapy.supersocket with 0 after 0.977209 sec Finished scapy.scapypipes with 0 after 0.864598 sec Finished scapy.sendrecv with 0 after 1.114454 sec Finished scapy.route6 with 0 after 1.252959 sec Finished scapy.route with 0 after 1.120958 sec Finished scapy.pton_ntop with 0 after 0.217068 sec Finished scapy.packet with 0 after 1.235719 sec Finished scapy.plist with 0 after 1.451805 sec Finished scapy.pipetool with 0 after 1.334965 sec Finished scapy.fields with 0 after 1.150384 sec Finished scapy.interfaces with 0 after 1.272453 sec Finished scapy.error with 0 after 0.619275 sec Finished scapy.data with 0 after 1.002262 sec Finished scapy.dadict with 0 after 1.001936 sec Finished scapy.consts with 0 after 1.002385 sec Finished scapy.fwdmachine with 0 after 3.485549 sec Finished scapy.config with 0 after 0.709376 sec Finished scapy.compat with 0 after 0.206717 sec Finished scapy.base_classes with 0 after 0.267787 sec Finished scapy.asn1packet with 0 after 1.133922 sec Finished scapy.autorun with 0 after 1.402280 sec Finished scapy.automaton with 0 after 1.400553 sec Finished scapy.as_resolvers with 0 after 0.931875 sec Finished scapy.asn1fields with 0 after 1.184320 sec Finished scapy.ansmachine with 0 after 1.500734 sec Finished scapy.__init__ with 0 after 0.573280 sec Finished scapy.asn1.asn1 with 0 after 1.052260 sec ###(002)=[passed] Try importing all layers separately >>> import_all(x for x in ALL_FILES if "layers" in x) Finished scapy.layers.x509 with 0 after 0.980215 sec Finished scapy.layers.zigbee with 0 after 1.482443 sec Finished scapy.layers.vrrp with 0 after 1.556881 sec Finished scapy.layers.vxlan with 0 after 1.571201 sec Finished scapy.layers.usb with 0 after 2.071207 sec Finished scapy.layers.tuntap with 0 after 1.805250 sec Finished scapy.layers.tftp with 0 after 1.954904 sec Finished scapy.layers.ssh with 0 after 2.918064 sec Finished scapy.layers.snmp with 0 after 3.129571 sec Finished scapy.layers.spnego with 0 after 3.598922 sec Finished scapy.layers.smbserver with 0 after 5.151077 sec Finished scapy.layers.smb2 with 0 after 2.687485 sec Finished scapy.layers.smb with 0 after 2.646691 sec Finished scapy.layers.skinny with 0 after 2.464853 sec Finished scapy.layers.sctp with 0 after 2.616602 sec Finished scapy.layers.rtp with 0 after 2.614601 sec Finished scapy.layers.rip with 0 after 2.358332 sec Finished scapy.layers.radius with 0 after 2.805120 sec Finished scapy.layers.ppi with 0 after 1.737525 sec Finished scapy.layers.ppp with 0 after 2.927295 sec Finished scapy.layers.pptp with 0 after 2.928578 sec Finished scapy.layers.ntlm with 0 after 1.413939 sec Finished scapy.layers.pflog with 0 after 3.691774 sec Finished scapy.layers.ntp with 0 after 2.618316 sec Finished scapy.layers.netflow with 0 after 3.640473 sec Finished scapy.layers.netbios with 0 after 2.297641 sec Finished scapy.layers.ms_nrtp with 0 after 2.297090 sec Finished scapy.layers.mobileip with 0 after 2.100252 sec Finished scapy.layers.llmnr with 0 after 2.894725 sec Finished scapy.layers.lltd with 0 after 2.966130 sec Finished scapy.layers.ldap with 0 after 3.069000 sec Finished scapy.layers.l2tp with 0 after 3.048931 sec Finished scapy.layers.isakmp with 0 after 2.753028 sec Finished scapy.layers.kerberos with 0 after 3.142909 sec Finished scapy.layers.ir with 0 after 2.965272 sec Finished scapy.layers.ipsec with 0 after 2.967074 sec Finished scapy.layers.gssapi with 0 after 1.780087 sec Finished scapy.layers.inet with 0 after 2.450755 sec Finished scapy.layers.hsrp with 0 after 2.878235 sec Finished scapy.layers.http with 0 after 3.120245 sec Finished scapy.layers.dot15d4 with 0 after 1.717178 sec Finished scapy.layers.gprs with 0 after 2.813662 sec Finished scapy.layers.eap with 0 after 2.541572 sec Finished scapy.layers.dot11 with 0 after 3.487434 sec Finished scapy.layers.dhcp6 with 0 after 2.640052 sec Finished scapy.layers.dns with 0 after 2.686363 sec Finished scapy.layers.dhcp with 0 after 2.724781 sec Finished scapy.layers.clns with 0 after 2.722551 sec Finished scapy.layers.can with 0 after 2.173987 sec Finished scapy.layers.bluetooth4LE with 0 after 2.356993 sec Finished scapy.layers.bluetooth with 0 after 2.316940 sec Finished scapy.layers.tls.tools with 0 after 2.319416 sec Finished scapy.layers.tls.session with 0 after 2.683317 sec Finished scapy.layers.tls.quic with 0 after 1.727841 sec Finished scapy.layers.tls.record_tls13 with 0 after 4.135519 sec Finished scapy.layers.tls.record_sslv2 with 0 after 4.135609 sec Finished scapy.layers.tls.handshake with 0 after 3.870543 sec Finished scapy.layers.tls.keyexchange_tls13 with 0 after 5.544219 sec Finished scapy.layers.tls.keyexchange with 0 after 4.270023 sec Finished scapy.layers.tls.handshake_sslv2 with 0 after 3.876541 sec Finished scapy.layers.tls.cert with 0 after 2.280081 sec Finished scapy.layers.tls.basefields with 0 after 2.278777 sec Finished scapy.layers.tls.__init__ with 0 after 1.501662 sec Finished scapy.layers.tls.automaton_srv with 0 after 4.251995 sec Finished scapy.layers.tls.automaton_cli with 0 after 4.248568 sec Finished scapy.layers.tls.crypto.prf with 0 after 1.474397 sec Finished scapy.layers.tls.all with 0 after 3.930230 sec Finished scapy.layers.tls.crypto.pkcs1 with 0 after 2.453902 sec Finished scapy.layers.tls.crypto.md4 with 0 after 1.481489 sec Finished scapy.layers.tls.crypto.suites with 0 after 3.522724 sec Finished scapy.layers.tls.crypto.hkdf with 0 after 1.181774 sec Finished scapy.layers.tls.crypto.hash with 0 after 1.180887 sec Finished scapy.layers.tls.crypto.h_mac with 0 after 1.587029 sec Finished scapy.layers.tls.crypto.compression with 0 after 1.505445 sec Finished scapy.layers.tls.crypto.kx_algs with 0 after 3.692096 sec Finished scapy.layers.tls.crypto.groups with 0 after 2.053564 sec Finished scapy.layers.tls.crypto.common with 0 after 1.054485 sec Finished scapy.layers.tls.crypto.cipher_block with 0 after 1.093947 sec Finished scapy.layers.tls.crypto.ciphers with 0 after 1.628725 sec Finished scapy.layers.tls.crypto.cipher_stream with 0 after 1.626726 sec Finished scapy.layers.tls.crypto.cipher_aead with 0 after 1.581628 sec Finished scapy.layers.tls.crypto.__init__ with 0 after 2.507580 sec Finished scapy.layers.tls.crypto.all with 0 after 3.462797 sec Finished scapy.layers.msrpce.rpcserver with 0 after 3.223250 sec Finished scapy.layers.msrpce.rpcclient with 0 after 3.533259 sec Finished scapy.layers.msrpce.msdrsr with 0 after 3.523578 sec Finished scapy.layers.msrpce.msnrpc with 0 after 4.242291 sec Finished scapy.layers.msrpce.mseerr with 0 after 3.774416 sec Finished scapy.layers.msrpce.__init__ with 0 after 1.003140 sec Finished scapy.layers.msrpce.msdcom with 0 after 4.217813 sec Finished scapy.layers.msrpce.raw.ms_wkst with 0 after 3.649409 sec Finished scapy.layers.msrpce.all with 0 after 4.086452 sec Finished scapy.layers.msrpce.raw.ms_samr with 0 after 3.700337 sec Finished scapy.layers.msrpce.raw.ms_srvs with 0 after 3.812276 sec ###(003)=[passed] Try importing all contribs separately >>> import_all(x for x in ALL_FILES if "contrib" in x) Finished scapy.contrib.wireguard with 0 after 5.013880 sec Finished scapy.contrib.vtp with 0 after 4.514115 sec Finished scapy.contrib.vqp with 0 after 3.584419 sec Finished scapy.contrib.tzsp with 0 after 4.088546 sec Finished scapy.contrib.tcpao with 0 after 2.415818 sec Finished scapy.contrib.tacacs with 0 after 2.830379 sec Finished scapy.contrib.stun with 0 after 2.752640 sec Finished scapy.contrib.socks with 0 after 2.857378 sec Finished scapy.contrib.slowprot with 0 after 2.527112 sec Finished scapy.contrib.send with 0 after 2.994760 sec Finished scapy.contrib.skinny with 0 after 2.997824 sec Finished scapy.contrib.rtcp with 0 after 1.501769 sec Finished scapy.contrib.sdnv with 0 after 2.391603 sec Finished scapy.contrib.rtsp with 0 after 2.669300 sec Finished scapy.contrib.rtr with 0 after 3.788093 sec Finished scapy.contrib.rsvp with 0 after 2.465521 sec Finished scapy.contrib.rpl_metrics with 0 after 2.465550 sec Finished scapy.contrib.rpl with 0 after 2.580938 sec Finished scapy.contrib.ppi_geotag with 0 after 1.790839 sec Finished scapy.contrib.psp with 0 after 2.629957 sec Finished scapy.contrib.ripng with 0 after 2.814379 sec Finished scapy.contrib.ppi_cace with 0 after 2.235982 sec Finished scapy.contrib.postgres with 0 after 2.847689 sec Finished scapy.contrib.portmap with 0 after 2.010516 sec Finished scapy.contrib.pnio_rpc with 0 after 4.011188 sec Finished scapy.contrib.pim with 0 after 2.769218 sec Finished scapy.contrib.pnio_dcp with 0 after 4.774357 sec Finished scapy.contrib.pfcp with 0 after 3.160123 sec Finished scapy.contrib.oncrpc with 0 after 1.720495 sec Finished scapy.contrib.openflow3 with 0 after 3.194876 sec Finished scapy.contrib.openflow with 0 after 2.801754 sec Finished scapy.contrib.opc_da with 0 after 2.800122 sec Finished scapy.contrib.nlm with 0 after 1.922379 sec Finished scapy.contrib.oam with 0 after 2.618342 sec Finished scapy.contrib.nrf_sniffer with 0 after 2.430147 sec Finished scapy.contrib.nsh with 0 after 4.809646 sec Finished scapy.contrib.nfs with 0 after 2.510751 sec Finished scapy.contrib.mqttsn with 0 after 2.512007 sec Finished scapy.contrib.mqtt with 0 after 2.369319 sec Finished scapy.contrib.mount with 0 after 2.367337 sec Finished scapy.contrib.modbus with 0 after 2.614139 sec Finished scapy.contrib.metawatch with 0 after 2.614281 sec Finished scapy.contrib.macsec with 0 after 2.633581 sec Finished scapy.contrib.ltp with 0 after 2.632022 sec Finished scapy.contrib.loraphy2wan with 0 after 2.384368 sec Finished scapy.contrib.lldp with 0 after 2.383080 sec Finished scapy.contrib.ldp with 0 after 4.009898 sec Finished scapy.contrib.isis with 0 after 2.590976 sec Finished scapy.contrib.knx with 0 after 2.593783 sec Finished scapy.contrib.ikev2 with 0 after 2.813626 sec Finished scapy.contrib.igmp with 0 after 2.872596 sec Finished scapy.contrib.ife with 0 after 2.318528 sec Finished scapy.contrib.ibeacon with 0 after 2.597628 sec Finished scapy.contrib.icmp_extensions with 0 after 2.882671 sec Finished scapy.contrib.homeplugsg with 0 after 2.599034 sec Finished scapy.contrib.homepluggp with 0 after 2.571641 sec Finished scapy.contrib.homeplugav with 0 after 2.335824 sec Finished scapy.contrib.hicp with 0 after 4.277906 sec Finished scapy.contrib.gtp with 0 after 2.772144 sec Finished scapy.contrib.gtp_v2 with 0 after 2.801247 sec Finished scapy.contrib.geneve with 0 after 2.534334 sec Finished scapy.contrib.etherip with 0 after 2.678470 sec Finished scapy.contrib.ethercat with 0 after 2.346394 sec Finished scapy.contrib.esmc with 0 after 2.340597 sec Finished scapy.contrib.erspan with 0 after 2.340669 sec Finished scapy.contrib.eddystone with 0 after 2.526044 sec Finished scapy.contrib.eigrp with 0 after 2.701787 sec Finished scapy.contrib.dtp with 0 after 2.512338 sec Finished scapy.contrib.diameter with 0 after 4.516743 sec Finished scapy.contrib.chdlc with 0 after 2.509828 sec Finished scapy.contrib.coap with 0 after 2.574739 sec Finished scapy.contrib.cdp with 0 after 2.716409 sec Finished scapy.contrib.bp with 0 after 2.876946 sec Finished scapy.contrib.bier with 0 after 2.871149 sec Finished scapy.contrib.bgp with 0 after 3.061203 sec Finished scapy.contrib.bfd with 0 after 2.911201 sec Finished scapy.contrib.__init__ with 0 after 1.150465 sec Finished scapy.contrib.aoe with 0 after 2.332076 sec Finished scapy.contrib.rtps.rtps with 0 after 2.084659 sec Regression tests for Linux only ━ Run at 04:10:51 from [test/linux.uts] by UTscapy in 1.254105567932129 └ Passed=3 └ Failed=0 ###### ## Linux only test ###### ###(005)=[passed] IPv6 link-local address selection >>> conf.ifaces._add_fake_iface("scapy0", 'e2:39:91:79:19:10') >>> >>> from unittest.mock import patch >>> conf.route6.routes = [('fe80::', 64, '::', 'scapy0', ['fe80::e039:91ff:fe79:1910'], 256)] >>> conf.route6.ipv6_ifaces = set(['scapy0']) >>> bck_conf_iface = conf.iface >>> conf.iface = "scapy0" This interface is not specified in any provider ! See conf.ifaces output >>> >>> p = Ether()/IPv6(dst="ff02::1")/ICMPv6NIQueryName(data="ff02::1") >>> print(p.sprintf("%Ether.src% > %Ether.dst%\n%IPv6.src% > %IPv6.dst%")) e2:39:91:79:19:10 > None fe80::e039:91ff:fe79:1910 > ff02::1 >>> ip6_ll_address = 'fe80::e039:91ff:fe79:1910' >>> print(p[IPv6].src, ip6_ll_address) fe80::e039:91ff:fe79:1910 fe80::e039:91ff:fe79:1910 >>> assert p[IPv6].src == ip6_ll_address >>> mac_address = 'e2:39:91:79:19:10' >>> print(p[Ether].src, mac_address) e2:39:91:79:19:10 e2:39:91:79:19:10 >>> assert p[Ether].src == mac_address >>> >>> conf.iface = bck_conf_iface >>> conf.route6.resync() ###(010)=[passed] Routing table, interface with no names >>> from unittest.mock import patch >>> >>> @patch("scapy.arch.linux.ioctl") ... def test_read_routes(mock_ioctl): ... def raise_ioerror(*args, **kwargs): ... if args[1] == 0x8912: ... return args[2] ... raise IOError ... mock_ioctl.side_effect = raise_ioerror ... read_routes() ... >>> test_read_routes() ###(014)=[passed] Reload interfaces & routes >>> conf.ifaces.reload() >>> conf.route.resync() >>> conf.route6.resync() Regression tests for Scapy Nmap module ━ Run at 04:10:52 from [test/nmap.uts] by UTscapy in 0.5633611679077148 └ Passed=6 └ Failed=0 ###### ## Basic Nmap OS fingerprints tests ###### ###(000)=[passed] Module loading >>> load_module('nmap') ###(001)=[passed] Test functions >>> d = nmap_udppacket_sig(IP()/UDP(), IP(raw(IP()/ICMP(type=3, code=2)/IPerror()/UDPerror()))) >>> assert len(d) == 9 >>> >>> d = nmap_tcppacket_sig(IP()/TCP()) >>> assert len(d) == 5 ###(002)=[passed] Fetch database >>> try: ... from urllib.request import urlopen ... except ImportError: ... from urllib2 import urlopen ... >>> filename = 'nmap-os-fingerprints' + str(RandString(6)) >>> >>> def _test(): ... with open(filename, 'wb') as fd: ... fd.write(urlopen('https://raw.githubusercontent.com/nmap/nmap/9efe1892/nmap-os-fingerprints').read()) ... >>> retry_test(_test) >>> >>> conf.nmap_base = filename ###(003)=[passed] Database loading >>> print(conf.nmap_kdb.base, conf.nmap_kdb.filename, len(conf.nmap_kdb.get_base())) None None 1684 >>> assert len(conf.nmap_kdb.get_base()) > 100 ###### ## Nmap errors triggering ###### ###(008)=[passed] Nmap base not available >>> conf.nmap_kdb.filename = "invalid" >>> conf.nmap_kdb.reload() Cannot open nmap database [invalid] >>> assert conf.nmap_kdb.filename == None ###(009)=[passed] Clear temp files >>> try: ... os.remove(filename) ... except: ... pass ... Tests for Scapy's p0f module. ━ Run at 04:10:52 from [test/p0f.uts] by UTscapy in 0.3601667881011963 └ Passed=17 └ Failed=0 ###### ## Basic p0f module tests ###### ###(000)=[passed] Module loading >>> load_module('p0f') ###(001)=[passed] Fetch database >>> try: ... from urllib.request import urlopen ... except ImportError: ... from urllib2 import urlopen ... >>> for i in range(10): ... try: ... open("p0f.fp", 'wb').write(urlopen('https://raw.githubusercontent.com/p0f/p0f/e8b924ae7fa099a3a5fe7def0ce3e397fd9a7137/p0f.fp').read()) ... break ... except: ... raise ... 35901 >>> conf.p0f_base = "p0f.fp" >>> p0fdb.reload(conf.p0f_base) ###### ## Default tests ###### ###(002)=[passed] Test TCP p0f, SYN - Windows >>> pkt = IP(b'E\x00\x004Se@\x00\x80\x06\x93?\n\x00\x00\x14\n\x00\x00\x0c\xc3\x08\x01\xbb\xcf\xb4\xbb\\\x00\x00\x00\x00\x80\x02 \x00\xeb\x1b\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x08\x01\x01\x04\x02') >>> assert p0f(pkt) == (('s', 'win', 'Windows', '7 or 8'), 0, False) ###(003)=[passed] Test TCP p0f, SYN - Linux >>> pkt = IP(b"E\x10\x00>> assert p0f(pkt) == (('s', 'unix', 'Linux', '2.6.x'), 0, False) ###(004)=[passed] Test TCP p0f, SYN - IPv6 FreeBSD >>> pkt = IPv6(hlim=64) / TCP(seq=1, window=65535, options=[("MSS", 150), ("NOP", None), ("WScale", 6), ("SAckOK", ""), ("Timestamp", (12345, 0))]) >>> assert p0f(pkt) == (('s', 'unix', 'FreeBSD', '9.x or newer'), 0, False) ###(005)=[passed] Test TCP p0f, SYN-ACK - Linux >>> pkt = IP(b'E\x00\x00<\x00\x00@\x008\x06N;?t\xf3a\xc0\xa8\x01\x03\x00P\xe5\xc0\xa3\xc4\x80\x9f\xe5\x94=\xab\xa0\x12\x16\xa0N\x07\x00\x00\x02\x04\x05\xb4\x04\x02\x08\n\x8d\x9d\x9d\xfa\x00\x17\x95e\x01\x03\x03\x05') >>> assert p0f(pkt) == (('s', 'unix', 'Linux', '2.6.x'), 8, False) ###(006)=[passed] Test HTTP p0f, request - wget >>> pkt = IP(b'E\x00\x00\xba\xcb]@\x00@\x06(d\xc0\xa8\x01\x8c\xae\x8f\xd5\xb8\xe1N\x00P\x8eP\x19\x02\xc7R\x9d\x89\x80\x18\x00.G)\x00\x00\x01\x01\x08\n\x00!\xd2_1\xc7\xbaHGET /images/layout/logo.png HTTP/1.0\r\nUser-Agent: Wget/1.12 (linux-gnu)\r\nAccept: */*\r\nHost: packetlife.net\r\nConnection: Keep-Alive\r\n\r\n') >>> assert p0f(pkt) == (('s', '!', 'wget', '', ('@unix', 'Windows')), False) ###(007)=[passed] Test HTTP p0f, response - nginx >>> pkt = IP(b"E\x00\x05\xdc'\xde@\x00\xfb\x06\x0b\xc1\xae\x8f\xd5\xb8\xc0\xa8\x01\x8c\x00P\xe1N\xc7R\x9d\x89\x8eP\x19\x88\x80\x10\x00lS\xc4\x00\x00\x01\x01\x08\n1\xc7\xbaT\x00!\xd2_HTTP/1.1 200 OK\r\nServer: nginx/0.8.53\r\nDate: Tue, 01 Mar 2011 20:45:16 GMT\r\nContent-Type: image/png\r\nContent-Length: 21684\r\nLast-Modified: Fri, 21 Jan 2011 03:41:14 GMT\r\nConnection: keep-alive\r\nKeep-Alive: timeout=20\r\nExpires: Wed, 29 Feb 2012 20:45:16 GMT\r\nCache-Control: max-age=31536000\r\nCache-Control: public\r\nVary: Accept-Encoding\r\nAccept-Ranges: bytes\r\n\r\n") >>> assert p0f(pkt) == (('s', '!', 'nginx', '1.x', ('@unix',)), False) ###(008)=[passed] Test MTU p0f >>> pkt = IP(b'E\x00\x004Se@\x00\x80\x06\x93?\n\x00\x00\x14\n\x00\x00\x0c\xc3\x08\x01\xbb\xcf\xb4\xbb\\\x00\x00\x00\x00\x80\x02 \x00\xeb\x1b\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x08\x01\x01\x04\x02') >>> assert fingerprint_mtu(pkt) == "Ethernet or modem" ###### ## Tests for p0f_impersonate ###### ###(009)=[passed] Check that the impersonated packet is properly detected by p0f >>> pkt = p0f_impersonate(IP()/TCP(), osgenre="Linux", osdetails="3.11 and newer") >>> assert p0f(pkt) == (("s", "unix", "Linux", "3.11 and newer"), 0, False) ###(010)=[passed] Check incidence of MSS value on linux version detection >>> pkt = IP(ttl=64, flags=2)/TCP(options=[('MSS', 14), ('SAckOK', ''), ('Timestamp', (2638474259, 0)), ('NOP', None), ('WScale', 7)], window=280, seq=3964706621, flags=2) >>> assert p0f(pkt) == (('g', 'unix', 'Linux', '2.2.x-3.x'), 0, False) >>> >>> pkt[TCP].options = [('MSS', 100), ('SAckOK', ''), ('Timestamp', (2638474259, 0)), ('NOP', None), ('WScale', 7)] >>> pkt[TCP].window = 100*20 >>> assert p0f(pkt) == (("s", "unix", "Linux", "3.11 and newer"), 0, False) ###(011)=[passed] Impersonate when window size must be multiple of some integer >>> sig = "*:64:0:1460:%8192,0:mss,nop,ws::0" >>> pkt = p0f_impersonate(IP()/TCP(), signature=sig) >>> assert pkt[TCP].window % 8192 == 0 ###(012)=[passed] Impersonate when window size must be multiple of mss >>> sig = "*:64:0:1024:mss*4,0:mss::0" >>> pkt = p0f_impersonate(IP()/TCP(), signature=sig) >>> assert (pkt[TCP].window // 4) == 1024 ###(013)=[passed] Impersonate when the following quirks are present: seq-,ack-,pushf+,urgf+ >>> sig = "*:64:0:1460:8192,0:mss:seq-,ack-,pushf+,urgf+:0" >>> pkt = p0f_impersonate(IP()/TCP(seq=1, ack=1, flags="S"), signature=sig) >>> tcp = pkt[TCP] >>> assert pkt[TCP].seq == pkt[TCP].ack == 0 >>> assert pkt[TCP].flags.A and pkt[TCP].flags.P and pkt[TCP].flags.U ###(014)=[passed] Use valid option values from original packet >>> sig = "*:64:0:*:8192,*:mss,ws,ts::0" >>> opts = [("MSS", 1400), ("WScale", 3), ("Timestamp", (97256, 0))] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt[TCP].options == opts ###(015)=[passed] Discard invalid options values >>> sig = "*:64:0:1000:8192,5:mss,ws::0" >>> opts = [("MSS", 1400), ("WScale", 3)] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt[TCP].options[0][1] == 1000 >>> assert pkt[TCP].options[1][1] == 5 ###### ## Clear temp files ###### ###(016)=[passed] Remove fp files >>> def _rem(f): ... try: ... os.remove(f) ... except: ... pass ... >>> _rem("p0f.fp") Tests for Scapy's p0fv2 module. ━ Run at 04:10:53 from [test/p0fv2.uts] by UTscapy in 0.27396321296691895 └ Passed=12 └ Failed=0 ###### ## Basic p0f module tests ###### ###(000)=[passed] Module loading >>> load_module('p0fv2') ###(001)=[passed] Fetch database >>> try: ... from urllib.request import urlopen ... except ImportError: ... from urllib2 import urlopen ... >>> def _load_database(file): ... for i in range(10): ... try: ... with open(file, 'wb') as fd: ... fd.write(urlopen('https://raw.githubusercontent.com/p0f/p0f/4b4d1f384abebbb9b1b25b8f3c6df5ad7ab365f7/' + file).read()) ... break ... except: ... raise ... pass ... >>> _load_database("p0f.fp") >>> conf.p0f_base = "p0f.fp" >>> _load_database("p0fa.fp") >>> conf.p0fa_base = "p0fa.fp" >>> _load_database("p0fr.fp") >>> conf.p0fr_base = "p0fr.fp" >>> _load_database("p0fo.fp") >>> conf.p0fo_base = "p0fo.fp" >>> >>> p0f_load_knowledgebases() ###### ## Default tests ###### ###(002)=[passed] Test p0f >>> pkt = Ether(b'\x14\x0cv\x8f\xfe(\xd0P\x99V\xdd\xf9\x08\x00E\x00\x0045+@\x00\x80\x06\x00\x00\xc0\xa8\x00w(M\xe2\xf9\xda\xcb\x01\xbbcc\xdd\x1e\x00\x00\x00\x00\x80\x02\xfa\xf0\xcc\x8c\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x08\x01\x01\x04\x02') >>> >>> assert p0f(pkt) == [('@Windows', 'XP/2000 (RFC1323+, w+, tstamp-)', 0)] ###(003)=[passed] Test prnp0f >>> with ContextManagerCaptureOutput() as cmco: ... prnp0f(pkt) ... assert cmco.get_output() == '192.168.0.119:56011 - @Windows XP/2000 (RFC1323+, w+, tstamp-)\n -> 40.77.226.249:https (S) (distance 0)\n' ... ###### ## Tests for p0f_impersonate ###### ###(004)=[passed] Impersonate when window size must be multiple of some integer >>> sig = ('%467', 64, 1, 60, 'M*,W*', '.', 'Phony Sys', '1.0') >>> pkt = p0f_impersonate(IP()/TCP(), signature=sig) >>> assert pkt.payload.window % 467 == 0 ###(005)=[passed] Handle unusual flags ("F") quirk >>> sig = ('1024', 64, 0, 60, 'W*', 'F', 'Phony Sys', '1.0') >>> pkt = p0f_impersonate(IP()/TCP(), signature=sig) >>> assert (pkt.payload.flags & 40) in (8, 32, 40) ###(006)=[passed] Use valid option values from original packet >>> sig = ('S4', 64, 1, 60, 'M*,W*,T', '.', 'Phony Sys', '1.0') >>> opts = [('MSS', 1400), ('WScale', 3), ('Timestamp', (97256, 0))] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt.payload.options == opts ###(007)=[passed] Use valid option values when multiples required >>> sig = ('S4', 64, 1, 60, 'M%37,W%19', '.', 'Phony Sys', '1.0') >>> opts = [('MSS', 37*15), ('WScale', 19*12)] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt.payload.options == opts ###(008)=[passed] Discard non-multiple option values when multiples required >>> sig = ('S4', 64, 1, 60, 'M%37,W%19', '.', 'Phony Sys', '1.0') >>> opts = [('MSS', 37*15 + 1), ('WScale', 19*12 + 1)] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt.payload.options[0][1] % 37 == 0 >>> assert pkt.payload.options[1][1] % 19 == 0 ###(009)=[passed] Discard bad timestamp values >>> sig = ('S4', 64, 1, 60, 'M*,T', '.', 'Phony Sys', '1.0') >>> opts = [('Timestamp', (0, 1000))] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt.payload.options[1][1][0] > 0 >>> assert pkt.payload.options[1][1][1] == 0 ###(010)=[passed] Discard 2nd timestamp of 0 if "T" quirk is present >>> sig = ('S4', 64, 1, 60, 'M*,T', 'T', 'Phony Sys', '1.0') >>> opts = [('Timestamp', (54321, 0))] >>> pkt = p0f_impersonate(IP()/TCP(options=opts), signature=sig) >>> assert pkt.payload.options[1][1][1] > 0 ###### ## Clear temp files ###### ###(011)=[passed] Remove fp files >>> def _rem(f): ... try: ... os.remove(f) ... except: ... pass ... >>> _rem("p0f.fp") >>> _rem("p0fa.fp") >>> _rem("p0fr.fp") >>> _rem("p0fo.fp") Pipetool related tests ━ Run at 04:10:56 from [test/pipetool.uts] by UTscapy in 3.346512794494629 └ Passed=29 └ Failed=0 ###### ## Basic tests ###### ###(000)=[passed] Test default test case >>> s = PeriodicSource("hello", 1, name="src") >>> d1 = Drain(name="d1") >>> c = ConsoleSink(name="c") >>> tf = TransformDrain(lambda x: "Got %s" % x) >>> s > d1 > c #]> >>> d1 > tf #]> >>> try: ... t = TermSink(name="PipeToolsPeriodicTest", keepterm=False) ... tf > t ... except (IOError, OSError): ... pass ... >>> p = PipeEngine(s) >>> p.start() >'hello' >>> time.sleep(3) >'hello' >'hello' >>> s.msg = [] >>> p.stop() ###(001)=[passed] Test add_pipe >>> s = AutoSource() >>> p = PipeEngine(s) >>> p.add(Pipe()) >>> assert len(p.active_pipes) == 2 >>> >>> x = p.spawn_Pipe() >>> assert len(p.active_pipes) == 3 >>> assert isinstance(x, Pipe) ###(002)=[passed] Test exhausted source >>> s = AutoSource() >>> s._gen_data("hello") >>> s.is_exhausted = True >>> d1 = Drain(name="d1") >>> c = ConsoleSink(name="c") >>> s > d1 > c #]> >>> >>> p = PipeEngine(s) >>> p.start() >>> p.wait_and_stop() >'hello' ###(003)=[passed] Test add_pipe on running instance >>> p = PipeEngine() >>> p.start() >>> >>> s = CLIFeeder() >>> >>> d1 = Drain(name="d1") >>> c = QueueSink(name="c") >>> s > d1 > c #]> >>> >>> p.add(s) >>> >>> s.send("hello") 1 >>> s.send("hi") 1 >>> >>> assert c.q.get(timeout=5) == "hello" >>> assert c.q.get(timeout=5) == "hi" >>> >>> p.stop() ###(004)=[passed] Test Operators >>> s = AutoSource() >>> p = PipeEngine(s) >>> assert p == p >>> >>> a = AutoSource() >>> b = AutoSource() >>> a >> b >#]> >>> assert len(a.high_sinks) == 1 >>> assert len(a.high_sources) == 0 >>> assert len(b.high_sinks) == 0 >>> assert len(b.high_sources) == 1 >>> a >AutoSource]> >>> b >#]> >>> >>> a = Sink() >>> b = AutoSource() >>> a << b >Sink]> >>> assert len(a.high_sinks) == 0 >>> assert len(a.high_sources) == 1 >>> assert len(b.high_sinks) == 1 >>> assert len(b.high_sources) == 0 >>> a >#]> >>> b >Sink]> >>> >>> a = Sink() >>> b = Sink() >>> a % b #>Sink]> >>> assert len(a.sinks) == 1 >>> assert len(a.sources) == 1 >>> assert len(b.sinks) == 1 >>> assert len(b.sources) == 1 >>> >>> a = Sink() >>> b = Sink() >>> a//b >#>>Sink]> >>> assert len(a.high_sinks) == 1 >>> assert len(a.high_sources) == 1 >>> assert len(b.high_sinks) == 1 >>> assert len(b.high_sources) == 1 >>> >>> a = AutoSource() >>> b = Sink() >>> a^b >>> assert len(b.trigger_sources) == 1 >>> assert len(a.trigger_sinks) == 1 ###(005)=[passed] Test doc >>> s = AutoSource() >>> p = PipeEngine(s) >>> p.list_pipes() AutoSource: CLIFeeder: Send messages from python command line: CLIHighFeeder: Send messages from python command line to high output: ConsoleSink: Print messages on low and high entries to ``stdout`` DownDrain: Repeat messages from high entry to low exit: Drain: Repeat messages from low/high entries to (resp.) low/high exits FDSourceSink: Use a file descriptor as source and sink Inject3Sink: InjectSink: Packets received on low input are injected to an interface PeriodicSource: Generate messages periodically on low exit: Pipe: QueueSink: RawConsoleSink: Print messages on low and high entries, using os.write RdpcapSource: Read packets from a PCAP file send them to low exit. Sink: SniffSource: Read packets from an interface and send them to low exit. Source: TCPConnectPipe: TCP connect to addr:port and use it as source and sink TCPListenPipe: TCP listen on [addr:]port and use first connection as source and sink; TermSink: ThreadGenSource: TransformDrain: Apply a function to messages on low and high entry: TriggerDrain: Pass messages and trigger when a condition is met TriggerSink: TriggeredMessage: Send a preloaded message when triggered and trigger in chain TriggeredQueueingValve: Let messages alternatively pass or queued, changing on trigger TriggeredSwitch: Let messages alternatively high or low, changing on trigger TriggeredValve: Let messages alternatively pass or not, changing on trigger UDPClientPipe: UDP send packets to addr:port and use it as source and sink UDPDrain: UDP payloads received on high entry are sent over UDP UDPServerPipe: UDP bind to [addr:]port and use as source and sink UpDrain: Repeat messages from low entry to high exit: WiresharkSink: WrpcapSink: >>> p.list_pipes_detailed() ###### AutoSource ###### CLIFeeder Send messages from python command line: .. code:: +--------+ >>-| |->> | send() | >-| `----|-> +--------+ ###### CLIHighFeeder Send messages from python command line to high output: .. code:: +--------+ >>-| .----|->> | send() | >-| |-> +--------+ ###### ConsoleSink Print messages on low and high entries to ``stdout`` .. code:: +-------+ >>-|--. |->> | print | >-|--' |-> +-------+ ###### DownDrain Repeat messages from high entry to low exit: .. code:: +-------+ >>-|--. |->> | \ | >-| `--|-> +-------+ ###### Drain Repeat messages from low/high entries to (resp.) low/high exits .. code:: +-------+ >>-|-------|->> | | >-|-------|-> +-------+ ###### FDSourceSink Use a file descriptor as source and sink .. code:: +-------------+ >>-| |->> | | >-|-[file desc]-|-> +-------------+ ###### Inject3Sink ###### InjectSink Packets received on low input are injected to an interface .. code:: +-----------+ >>-| |->> | | >-|--[iface] |-> +-----------+ ###### PeriodicSource Generate messages periodically on low exit: .. code:: +-------+ >>-| |->> | msg,T | >-| `----|-> +-------+ ###### Pipe ###### QueueSink Collects messages on the low and high entries into a :py:class:`Queue`. Messages are dequeued with :py:meth:`recv`. Both high and low entries share the same :py:class:`Queue`. .. code:: +-------+ >>-|--. |->> | queue | >-|--' |-> +-------+ ###### RawConsoleSink Print messages on low and high entries, using os.write .. code:: +-------+ >>-|--. |->> | write | >-|--' |-> +-------+ :param newlines: Include a new-line character after printing each packet. Defaults to True. :type newlines: bool ###### RdpcapSource Read packets from a PCAP file send them to low exit. .. code:: +----------+ >>-| |->> | | >-| [pcap]--|-> +----------+ ###### Sink Does nothing; interface to extend for custom sinks. All sinks have the following constructor parameters: :param name: a human-readable name for the element :type name: str ###### SniffSource Read packets from an interface and send them to low exit. .. code:: +-----------+ >>-| |->> | | >-| [iface]--|-> +-----------+ If neither of the ``iface`` or ``socket`` parameters are specified, then Scapy will capture from the first network interface. :param iface: A layer 2 interface to sniff packets from. Mutually exclusive with the ``socket`` parameter. :param filter: Packet filter to use while capturing. See ``L2listen``. Not used with ``socket`` parameter. :param socket: A ``SuperSocket`` to sniff packets from. ###### Source ###### TCPConnectPipe TCP connect to addr:port and use it as source and sink .. code:: +-------------+ >>-| |->> | | >-|-[addr:port]-|-> +-------------+ ###### TCPListenPipe TCP listen on [addr:]port and use first connection as source and sink; send peer address to high output .. code:: +------^------+ >>-| +-[peer]-|->> | / | >-|-[addr:port]-|-> +-------------+ ###### TermSink Prints messages on the low and high entries, on a separate terminal (xterm or cmd). .. code:: +-------+ >>-|--. |->> | print | >-|--' |-> +-------+ :param keepterm: Leave the terminal window open after :py:meth:`~Pipe.stop` is called. Defaults to True. :type keepterm: bool :param newlines: Include a new-line character after printing each packet. Defaults to True. :type newlines: bool :param openearly: Automatically starts the terminal when the constructor is called, rather than waiting for :py:meth:`~Pipe.start`. Defaults to True. :type openearly: bool ###### ThreadGenSource ###### TransformDrain Apply a function to messages on low and high entry: .. code:: +-------+ >>-|--[f]--|->> | | >-|--[f]--|-> +-------+ ###### TriggerDrain Pass messages and trigger when a condition is met .. code:: +------^------+ >>-|-[condition]-|->> | | | >-|-[condition]-|-> +-------------+ ###### TriggerSink ###### TriggeredMessage Send a preloaded message when triggered and trigger in chain .. code:: +------^------+ >>-| | /----|->> | |/ | >-|-[ message ]-|-> +------^------+ ###### TriggeredQueueingValve Let messages alternatively pass or queued, changing on trigger .. code:: +------^-------+ >>-|-[pass/queue]-|->> | | | >-|-[pass/queue]-|-> +------^-------+ ###### TriggeredSwitch Let messages alternatively high or low, changing on trigger .. code:: +------^------+ >>-|-\ | /-|->> | [up/down] | >-|-/ | \-|-> +------^------+ ###### TriggeredValve Let messages alternatively pass or not, changing on trigger .. code:: +------^------+ >>-|-[pass/stop]-|->> | | | >-|-[pass/stop]-|-> +------^------+ ###### UDPClientPipe UDP send packets to addr:port and use it as source and sink Start trying to receive only once a packet has been send .. code:: +-------------+ >>-| |->> | | >-|-[addr:port]-|-> +-------------+ ###### UDPDrain UDP payloads received on high entry are sent over UDP .. code:: +-------------+ >>-|--[payload]--|->> | X | >-|----[UDP]----|-> +-------------+ ###### UDPServerPipe UDP bind to [addr:]port and use as source and sink Use (ip, port) from first received IP packet as destination for all data .. code:: +------^------+ >>-| +-[peer]-|->> | / | >-|-[addr:port]-|-> +-------------+ ###### UpDrain Repeat messages from low entry to high exit: .. code:: +-------+ >>-| ,--|->> | / | >-|--' |-> +-------+ ###### WiresharkSink Streams :py:class:`Packet` from the low entry to Wireshark. Packets are written into a ``pcap`` stream (like :py:class:`WrpcapSink`), and streamed to a new Wireshark process on its ``stdin``. Wireshark is run with the ``-ki -`` arguments, which cause it to treat ``stdin`` as a capture device. Arguments in :py:attr:`args` will be appended after this. Extends :py:mod:`WrpcapSink`. .. code:: +----------+ >>-| |->> | | >-|--[pcap] |-> +----------+ :param linktype: See :py:attr:`WrpcapSink.linktype`. :type linktype: None or int :param args: See :py:attr:`args`. :type args: None or list[str] .. py:attribute:: args Additional arguments for the Wireshark process. This must be either ``None`` (the default), or a ``list`` of ``str``. This attribute has no effect after calling :py:meth:`PipeEngine.start`. See :manpage:`wireshark(1)` for more details. ###### WrpcapSink Writes :py:class:`Packet` on the low entry to a ``pcap`` file. Ignores all messages on the high entry. .. note:: Due to limitations of the ``pcap`` format, all packets **must** be of the same link type. This class will not mutate packets to conform with the expected link type. .. code:: +----------+ >>-| |->> | | >-|--[pcap] |-> +----------+ :param fname: Filename to write packets to. :type fname: str :param linktype: See :py:attr:`linktype`. :type linktype: None or int .. py:attribute:: linktype Set an explicit link-type (``DLT_``) for packets. This must be an ``int`` or ``None``. This is the same as the :py:func:`wrpcap` ``linktype`` parameter. If ``None`` (the default), the linktype will be auto-detected on the first packet. This field will *not* be updated with the result of this auto-detection. This attribute has no effect after calling :py:meth:`PipeEngine.start`. ###(006)=[passed] Test RawConsoleSink with CLIFeeder >>> p = PipeEngine() >>> >>> s = CLIFeeder() >>> s.send("hello") 1 >>> s.is_exhausted = True >>> >>> r, w = os.pipe() >>> >>> d1 = Drain(name="d1") >>> c = RawConsoleSink(name="c") >>> c._write_pipe = w >>> s > d1 > c #]> >>> >>> p.add(s) >>> p.start() >>> >>> assert os.read(r, 20) == b"hello\n" >>> p.wait_and_stop() ###(007)=[passed] Test QueueSink with CLIFeeder >>> p = PipeEngine() >>> >>> s = CLIFeeder() >>> s.send("hello") 1 >>> s.is_exhausted = True >>> >>> d1 = Drain(name="d1") >>> c = QueueSink(name="c") >>> s > d1 > c #]> >>> >>> p.add(s) >>> p.start() >>> >>> p.wait_and_stop() >>> assert c.recv() == "hello" >>> assert c.recv(block=False) is None ###(008)=[passed] Test UpDrain >>> test_val = None >>> >>> class TestSink(Sink): ... def high_push(self, msg): ... global test_val ... test_val = msg ... >>> p = PipeEngine() >>> >>> s = CLIFeeder() >>> s.send("hello") 1 >>> s.is_exhausted = True >>> >>> d1 = UpDrain(name="d1") >>> c = TestSink(name="c") >>> s > d1 #]> >>> d1 >> c >#]> >>> >>> p.add(s) >>> p.start() >>> >>> p.wait_and_stop() >>> assert test_val == "hello" ###(009)=[passed] Test DownDrain >>> test_val = None >>> >>> class TestSink(Sink): ... def push(self, msg): ... global test_val ... test_val = msg ... >>> p = PipeEngine() >>> >>> s = CLIHighFeeder() >>> s.send("hello") 1 >>> s.is_exhausted = True >>> >>> d1 = DownDrain(name="d1") >>> c = TestSink(name="c") >>> s >> d1 >#]> >>> d1 > c #]> >>> >>> p.add(s) >>> p.start() >>> >>> p.wait_and_stop() >>> assert test_val == "hello" ###(010)=[passed] Test PeriodicSource exhaustion >>> s = PeriodicSource("", 1) >>> s.msg = [] >>> p = PipeEngine(s) >>> p.start() >>> p.wait_and_stop() ###### ## Advanced ScapyPipes pipetools tests ###### ###(011)=[passed] Test SniffSource >>> from unittest import mock >>> fd = ObjectPipe("sniffsource") >>> fd.write("test") >>> >>> @mock.patch("scapy.scapypipes.conf.L2listen") ... def _test(l2listen): ... l2listen.return_value=Bunch(close=lambda *args: None, fileno=lambda: fd.fileno(), recv=lambda *args: Raw("data")) ... p = PipeEngine() ... s = SniffSource() ... assert s.s is None ... d1 = Drain(name="d1") ... c = QueueSink(name="c") ... s > d1 > c ... p.add(s) ... p.start() ... x = c.q.get(2) ... assert bytes(x) == b"data" ... assert s.s is not None ... p.stop() ... >>> try: ... _test() ... finally: ... fd.close() ... ###(012)=[passed] Test SniffSource with socket >>> fd = ObjectPipe("sniffsource_socket") >>> fd.write("test") >>> >>> class FakeSocket(object): ... def __init__(self): ... self.times = 0 ... def recv(self, x=None): ... if self.times > 2: ... return ... self.times += 1 ... return Raw(b'hello') ... def fileno(self): ... return fd.fileno() ... >>> try: ... p = PipeEngine() ... s = SniffSource(socket=FakeSocket()) ... assert s.s is not None ... d = Drain() ... c = QueueSink() ... p.add(s > d > c) ... p.start() ... msg = c.q.get(timeout=1) ... p.stop() ... assert raw(msg) == b'hello' ... finally: ... fd.close() ... Exception in thread scapy.pipetool.PipeEngine: Traceback (most recent call last): File "/usr/lib/python3.14/threading.py", line 1081, in _bootstrap_inner self._context.run(self.run) ~~~~~~~~~~~~~~~~~^^^^^^^^^^ File "/usr/lib/python3.14/threading.py", line 1023, in run self._target(*self._args, **self._kwargs) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/pipetool.py", line 168, in run p.stop() ~~~~~~^^ File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/scapypipes.py", line 74, in stop self.s.close() ^^^^^^^^^^^^ AttributeError: 'FakeSocket' object has no attribute 'close' ###(013)=[passed] Test SniffSource with invalid args >>> try: ... s = SniffSource(iface='eth0', socket='not a socket') ... except ValueError: ... pass ... else: ... # expected ValueError ... assert False ... ###(014)=[passed] Test exhausted AutoSource and SniffSource >>> from unittest import mock >>> from scapy.error import Scapy_Exception >>> >>> def _fail(): ... raise Scapy_Exception() ... >>> a = AutoSource() >>> a._send = mock.MagicMock(side_effect=_fail) >>> a.send("x") 1 >>> try: ... a.deliver() ... except: ... pass ... >>> s = SniffSource() >>> s.s = mock.MagicMock() >>> s.s.recv = mock.MagicMock(side_effect=_fail) >>> try: ... s.deliver() ... except: ... pass ... ###(015)=[passed] Test WiresharkSink >>> q = ObjectPipe("wiresharksink") >>> pkt = Ether(dst="aa:aa:aa:aa:aa:aa", src="bb:bb:bb:bb:bb:bb")/IP(dst="127.0.0.1", src="127.0.0.1")/ICMP() >>> >>> from unittest import mock >>> with mock.patch("scapy.scapypipes.subprocess.Popen", return_value=Bunch(stdin=q)) as popen: ... sink = WiresharkSink() ... sink.start() ... >>> sink.push(pkt) >>> >>> q.recv() b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x00' >>> q.recv() b"\xd0wxh&'\x06\x00*\x00\x00\x00*\x00\x00\x00" >>> assert raw(pkt) in q.recv() >>> >>> popen.assert_called_once_with( ... [conf.prog.wireshark, '-Slki', '-'], stdin=subprocess.PIPE, stdout=None, ... stderr=None) ###(016)=[passed] Test WiresharkSink with linktype >>> linktype = scapy.data.DLT_EN3MB >>> q = ObjectPipe("wiresharksink_linktype") >>> pkt = Ether(dst="aa:aa:aa:aa:aa:aa", src="bb:bb:bb:bb:bb:bb")/IP(dst="127.0.0.1", src="127.0.0.1")/ICMP() >>> >>> from unittest import mock >>> with mock.patch("scapy.scapypipes.subprocess.Popen", return_value=Bunch(stdin=q)) as popen: ... sink = WiresharkSink(linktype=linktype) ... sink.start() ... >>> sink.push(pkt) Inconsistent linktypes detected! The resulting file might contain invalid packets. >>> >>> chb(linktype) in q.recv() True >>> q.recv() b'\xd0wxh\x94`\x06\x00*\x00\x00\x00*\x00\x00\x00' >>> assert raw(pkt) in q.recv() ###(017)=[passed] Test WiresharkSink with args >>> linktype = scapy.data.DLT_EN3MB >>> q = ObjectPipe("wiresharksink_args") >>> pkt = Ether(dst="aa:aa:aa:aa:aa:aa", src="bb:bb:bb:bb:bb:bb")/IP(dst="127.0.0.1", src="127.0.0.1")/ICMP() >>> >>> from unittest import mock >>> with mock.patch("scapy.scapypipes.subprocess.Popen", return_value=Bunch(stdin=q)) as popen: ... sink = WiresharkSink(args=['-c', '1']) ... sink.start() ... >>> sink.push(pkt) >>> >>> popen.assert_called_once_with( ... [conf.prog.wireshark, '-Slki', '-', '-c', '1'], ... stdin=subprocess.PIPE, stdout=None, stderr=None) ###(018)=[passed] Test RdpcapSource and WrpcapSink >>> dname = get_temp_dir() >>> >>> req = Ether(b'E\x00\x00\x1c\x00\x00\x00\x004\x01\x1d\x04\xd8:\xd0\x83\xc0\xa8\x00w\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> rpy = Ether(b'\x8c\xf8\x13C5P\xdcS`\xeb\x80H\x08\x00E\x00\x00\x1c\x00\x00\x00\x004\x01\x1d\x04\xd8:\xd0\x83\xc0\xa8\x00w\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> >>> wrpcap(os.path.join(dname, "t.pcap"), [req, rpy]) >>> >>> p = PipeEngine() >>> >>> s = RdpcapSource(os.path.join(dname, "t.pcap")) >>> d1 = Drain(name="d1") >>> c = WrpcapSink(os.path.join(dname, "t2.pcap.gz"), name="c", gz=1) >>> s > d1 > c #]> >>> p.add(s) >>> p.start() >>> p.wait_and_stop() >>> >>> results = rdpcap(os.path.join(dname, "t2.pcap.gz")) >>> >>> assert raw(results[0]) == raw(req) >>> assert raw(results[1]) == raw(rpy) >>> >>> os.unlink(os.path.join(dname, "t.pcap")) >>> os.unlink(os.path.join(dname, "t2.pcap.gz")) ###(020)=[passed] TriggerDrain and TriggeredValve with CLIFeeder >>> s = CLIFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredValve() >>> c = QueueSink() >>> >>> s > d1 > d2 > c #]> >>> d1 ^ d2 #>QueueSink] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> s.send("hello2") 1 >>> s.send("trigger") 1 >>> s.send("hello3") 1 >>> >>> assert c.q.get(timeout=5) == "hello" >>> assert c.q.get(timeout=5) == "trigger" >>> assert c.q.get(timeout=5) == "hello3" >>> >>> p.stop() ###(021)=[passed] TriggerDrain and TriggeredValve with CLIHighFeeder >>> s = CLIHighFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredValve() >>> c = QueueSink() >>> >>> s >> d1 >#]> >>> d1 >> d2 >#]> >>> d2 >> c >#]> >>> d1 ^ d2 >#>>QueueSink] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> s.send("hello2") 1 >>> s.send("trigger") 1 >>> s.send("hello3") 1 >>> >>> assert c.q.get(timeout=5) == "hello" >>> assert c.q.get(timeout=5) == "trigger" >>> assert c.q.get(timeout=5) == "hello3" >>> >>> p.stop() ###(022)=[passed] TriggerDrain and TriggeredQueueingValve with CLIFeeder >>> s = CLIFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredValve() >>> c = QueueSink() >>> >>> s > d1 > d2 > c #]> >>> d1 ^ d2 #>QueueSink] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> s.send("hello2") 1 >>> s.send("trigger") 1 >>> s.send("hello3") 1 >>> >>> assert c.q.get(timeout=5) == "hello" >>> assert c.q.get(timeout=5) == "trigger" >>> assert c.q.get(timeout=5) == "hello3" >>> >>> p.stop() ###(023)=[passed] TriggerDrain and TriggeredSwitch with CLIFeeder on high channel >>> s = CLIFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredSwitch() >>> c = QueueSink() >>> >>> s > d1 > d2 #]> >>> d2 >> c >#]> >>> d1 ^ d2 #] [#>>QueueSink] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> s.send("hello2") 1 >>> s.send("trigger") 1 >>> s.send("hello3") 1 >>> >>> assert c.q.get(timeout=5) == "trigger" >>> assert c.q.get(timeout=5) == "hello2" >>> >>> p.stop() ###(024)=[passed] TriggerDrain and TriggeredSwitch with CLIHighFeeder on low channel >>> s = CLIHighFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredSwitch() >>> c = QueueSink() >>> >>> s >> d1 >#]> >>> d1 >> d2 >#]> >>> d2 > c #]> >>> d1 ^ d2 QueueSink] [TriggerDrain>>#] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> s.send("hello2") 1 >>> s.send("trigger") 1 >>> s.send("hello3") 1 >>> >>> assert c.q.get(timeout=5) == "hello" >>> assert c.q.get(timeout=5) == "trigger" >>> assert c.q.get(timeout=5) == "hello3" >>> >>> p.stop() ###(025)=[passed] TriggerDrain and TriggeredMessage >>> s = CLIFeeder() >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredMessage("hello") >>> c = QueueSink() >>> >>> s > d1 > d2 > c #]> >>> d1 ^ d2 #>QueueSink] [TriggerDrain^#]> >>> >>> p = PipeEngine(s) >>> p.start() >>> >>> s.send("trigger") 1 >>> >>> r = [c.q.get(timeout=5), c.q.get(timeout=5)] >>> assert "hello" in r >>> assert "trigger" in r >>> >>> p.stop() ###(026)=[passed] TriggerDrain and TriggeredQueueingValve on low channel >>> p = PipeEngine() >>> >>> s = CLIFeeder() >>> r, w = os.pipe() >>> >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredQueueingValve() >>> c = QueueSink(name="c") >>> s > d1 > d2 > c #]> >>> d1 ^ d2 #>c] [TriggerDrain^#]> >>> >>> p.add(s) >>> p.start() >>> >>> s.send("trigger") 1 >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> assert c.q.get(timeout=3) == "trigger" >>> assert c.q.get(timeout=3) in ['hello', 'trigger'] >>> assert c.q.get(timeout=3) in ['hello', 'trigger'] >>> assert d2.q.qsize() == 0 >>> >>> p.stop() ###(027)=[passed] TriggerDrain and TriggeredQueueingValve on high channel >>> p = PipeEngine() >>> >>> s = CLIHighFeeder() >>> r, w = os.pipe() >>> >>> d1 = TriggerDrain(lambda x:x=="trigger") >>> d2 = TriggeredQueueingValve() >>> c = QueueSink(name="c") >>> s >> d1 >> d2 >> c >#]> >>> d1 ^ d2 >#>>c] [TriggerDrain^#]> >>> >>> p.add(s) >>> p.start() >>> >>> s.send("trigger") 1 >>> s.send("hello") 1 >>> s.send("trigger") 1 >>> assert c.q.get(timeout=3) == "trigger" >>> assert c.q.get(timeout=3) == "hello" >>> assert d2.q.qsize() == 0 >>> >>> p.stop() ###(028)=[passed] UDPDrain >>> p = PipeEngine() >>> >>> s = CLIFeeder() >>> s2 = CLIHighFeeder() >>> d1 = UDPDrain() >>> c = QueueSink() >>> >>> s > d1 > c #]> >>> s2 >> d1 >> c #] [UDPDrain>>#]> >>> >>> p.add(s) >>> p.add(s2) >>> p.start() >>> >>> pkt = DNS() >>> >>> s.send(IP(src="127.0.0.1")/UDP()/DNS()) 1 >>> s2.send(pkt) 1 >>> >>> res = [c.q.get(timeout=2), c.q.get(timeout=2)] >>> assert raw(pkt) in res >>> res.remove(raw(pkt)) >>> assert DNS in res[0] and res[0][UDP].sport == 1234 >>> >>> p.stop() ###(029)=[passed] FDSourceSink on a ObjectPipe object >>> obj = ObjectPipe("fdsourcesink") >>> obj.send("hello") 1 >>> >>> s = FDSourceSink(obj) >>> d = Drain() >>> c = QueueSink() >>> s > d > c #]> >>> >>> s.push("data") >>> s.deliver() >>> assert c.q.get(timeout=1) == "hello" Regression tests for Scapy random objects ━ Run at 04:10:56 from [test/random.uts] by UTscapy in 0.041588544845581055 └ Passed=11 └ Failed=0 ###### ## Random objects ###### ###(000)=[passed] RandomEnumeration >>> ren = RandomEnumeration(0, 7, seed=0x2807, forever=False) >>> [x for x in ren] == [5, 0, 2, 7, 6, 3, 1, 4] True ###(001)=[passed] RandIP6 >>> random.seed(0x2807) >>> r6 = RandIP6() >>> assert r6 == "240b:238f:b53f:b727:d0f9:bfc4:2007:e265" >>> assert r6.command() == "RandIP6()" >>> >>> random.seed(0x2807) >>> r6 = RandIP6("2001:db8::-") >>> assert r6 == "2001:0db8::b53f" >>> assert r6.command() == "RandIP6(ip6template='2001:db8::-')" >>> >>> r6 = RandIP6("2001:db8::*") >>> assert r6 == "2001:0db8::bfc4" >>> assert r6.command() == "RandIP6(ip6template='2001:db8::*')" ###(002)=[passed] RandMAC >>> random.seed(0x2807) >>> rm = RandMAC() >>> assert rm == "24:23:b5:b7:d0:bf" >>> assert rm.command() == "RandMAC()" >>> >>> rm = RandMAC("00:01:02:03:04:0-7") >>> assert rm == "00:01:02:03:04:01" >>> assert rm.command() == "RandMAC(template='00:01:02:03:04:0-7')" ###(003)=[passed] RandOID >>> random.seed(0x2807) >>> rand_obj = RandOID() >>> assert rand_obj == "7.222.44.194.276.116.320.6.84.97.31.5.25.20.13.84.104.18" >>> assert rand_obj.command() == "RandOID()" >>> >>> rand_obj = RandOID("1.2.3.*") >>> assert rand_obj == "1.2.3.41" >>> assert rand_obj.command() == "RandOID(fmt='1.2.3.*')" >>> >>> rand_obj = RandOID("1.2.3.0-28") >>> assert rand_obj == "1.2.3.12" >>> assert rand_obj.command() == "RandOID(fmt='1.2.3.0-28')" >>> >>> rand_obj = RandOID("1.2.3.0-28", depth=RandNumExpo(0.2), idnum=RandNumExpo(0.02)) >>> assert rand_obj.command() == "RandOID(fmt='1.2.3.0-28', depth=RandNumExpo(lambd=0.2), idnum=RandNumExpo(lambd=0.02))" ###(004)=[passed] RandRegExp >>> random.seed(0x2807) >>> rex = RandRegExp("[g-v]* @? [0-9]{3} . (g|v)") >>> bytes(rex) == b'irrtv @ 517 \xc2\xb8 v' True >>> assert rex.command() == "RandRegExp(regexp='[g-v]* @? [0-9]{3} . (g|v)')" >>> >>> rex = RandRegExp("[:digit:][:space:][:word:]") >>> assert re.match(b"\\d\\s\\w", bytes(rex)) ###(005)=[passed] Corrupted(Bytes|Bits) >>> random.seed(0x2807) >>> cb = CorruptedBytes("ABCDE", p=0.5) >>> assert cb.command() == "CorruptedBytes(s='ABCDE', p=0.5)" >>> assert sane(raw(cb)) in [".BCD)", "&BCDW"] >>> >>> cb = CorruptedBits("ABCDE", p=0.2) >>> assert cb.command() == "CorruptedBits(s='ABCDE', p=0.2)" >>> assert sane(raw(cb)) in ["ECk@Y", "QB.P."] ###(006)=[passed] RandEnumKeys >>> random.seed(0x2807) >>> rek = RandEnumKeys({'a': 1, 'b': 2, 'c': 3}, seed=0x2807) >>> rek.enum.sort() >>> assert rek.command() == "RandEnumKeys(enum=['a', 'b', 'c'], seed=10247)" >>> r = str(rek) >>> assert r == 'a' ###(007)=[passed] RandSingNum >>> random.seed(0x2807) >>> rs = RandSingNum(-28, 7) >>> assert rs._fix() in [2, 3] >>> assert rs.command() == "RandSingNum(mn=-28, mx=7)" ###(008)=[passed] Rand* >>> random.seed(0x2807) >>> rss = RandSingString() >>> assert rss == "foo.exe:" >>> assert rss.command() == "RandSingString()" >>> >>> random.seed(0x2807) >>> rts = RandTermString(4, "scapy") >>> assert sane(raw(rts)) in ["...Zscapy", "$#..scapy"] >>> assert rts.command() == "RandTermString(size=4, term=b'scapy')" ###(009)=[passed] RandInt (test __bool__) >>> a = "True" if RandNum(False, True) else "False" >>> assert a in ["True", "False"] ###(010)=[passed] Various volatiles >>> random.seed(0x2807) >>> rng = RandNumGamma(1, 42) >>> assert rng._fix() in (8, 73) >>> assert rng.command() == "RandNumGamma(alpha=1, beta=42)" >>> >>> random.seed(0x2807) >>> rng = RandNumGauss(1, 42) >>> assert rng._fix() == 8 >>> assert rng.command() == "RandNumGauss(mu=1, sigma=42)" >>> >>> renum = RandEnum(1, 42, seed=0x2807) >>> assert renum == 37 >>> assert renum.command() == "RandEnum(min=1, max=42, seed=10247)" >>> >>> rp = RandPool((IncrementalValue(), 42), (IncrementalValue(), 0)) >>> assert rp == 0 >>> assert rp.command() == "RandPool((IncrementalValue(), 42), (IncrementalValue(), 0))" >>> >>> de = DelayedEval("3 + 1") >>> assert de == 4 >>> assert de.command() == "DelayedEval(expr='3 + 1')" >>> >>> v = IncrementalValue(restart=2) >>> assert v == 0 and v == 1 and v == 2 and v == 0 >>> assert v.command() == "IncrementalValue(restart=2)" with LatexTheme ━ Run at 04:11:22 from [test/regression.uts] by UTscapy in 25.453574419021606 └ Passed=299 └ Failed=0 ###### ## Information on Scapy ###### ###(000)=[passed] Setup >>> def expect_exception(e, c): ... try: ... c() ... return False ... except e: ... return True ... ###(001)=[passed] Get conf Dump the current configuration >>> conf ASN1_default_codec = ASN1_default_long_size = 0 AS_resolver = BTsocket = commands = IPID_count : Identify IP id values classes in a list of packets... contribs = {'http': {'auto_compression': True, 'auto_chunk': True}} crypto_valid = True crypto_valid_advanced = True dcerpc_force_header_signing = False dcerpc_session_enable = False debug_dissector = False debug_match = False debug_strfixedlenfield = False debug_tls = False default_l2 = dot15d4_protocol = None emph = ethertypes = except_filter = '' exts = Name Version Specs fancy_banner = True filter = '' geoip_city = None histfile = '/builddir/.config/scapy/history' iface = ifaces = Source Index Name MAC IPv4 IPv6 sys 1 lo 00:00:00:00:00:00 127.... interactive = False interactive_shell = 'auto' ipv6_enabled = True ipython_use_jedi = False l2types = 0x0 <-> Loopback (Loopback) 0x1 <- Dot3 (802.3) 0x1 <-> Ether (... l3types = 0x3 -> IPv46 (IPv4/6) 0x800 <-> IP (IP) 0x806 <-> ARP (ARP) 0x8... layers = Packet : NoPayload : max_list_count = 100 mib = min_pkt_size = 60 nameservers = ['127.0.0.53'] neighbor = Ether -> LLC Dot3 -> LLC Dot3 -> SNAP Ether -> Dot1Q Ether -> A... netcache = arp_cache: 0 valid items. Timeout=120s in6_neighbor: 0 valid it... nmap_base = 'nmap-os-fingerprintsr5wVXE' nmap_kdb = noenum = p0f_base = 'p0f.fp' p0fa_base = 'p0fa.fp' p0fo_base = 'p0fo.fp' p0fr_base = 'p0fr.fp' padding = 1 padding_layer = prog = display = 'display' dot = 'dot' extcap_folders = ['/builddir/.c... prompt = '>>> ' protocols = raise_no_dst_mac = False raw_layer = raw_summary = False recv_poll_rate = 0.05 resolve = route = Network Netmask Gateway Iface Output IP Metric 0.0.0.0 0.0.0.0 ... route6 = Destination Next Hop Iface Src candidates Metric ::/0 2620:52:3... route6_autoload = True route_autoload = True services_sctp = services_tcp = services_udp = session = '' sniff_promisc = True stats_classic_protocols = [, , >> >>> IP().src '127.0.0.1' >>> conf.loopback_name 'lo' ###(002)=[passed] Test module version detection >>> class FakeModule(object): ... __version__ = "v1.12" ... >>> class FakeModule2(object): ... __version__ = "5.143.3.12" ... >>> class FakeModule3(object): ... __version__ = "v2.4.2.dev42" ... >>> from scapy.config import _version_checker >>> >>> assert _version_checker(FakeModule, (1,11,5)) >>> assert not _version_checker(FakeModule, (1,13)) >>> >>> assert _version_checker(FakeModule2, (5, 1)) >>> assert not _version_checker(FakeModule2, (5, 143, 4)) >>> >>> assert _version_checker(FakeModule3, (2, 4, 2)) ###(003)=[passed] Check Scapy version >>> from unittest import mock >>> >>> import scapy >>> from scapy import _parse_tag, _version_from_git_describe >>> from scapy.config import _version_checker >>> >>> b = Bunch(returncode=0, communicate=lambda *args, **kargs: (b"v2.4.5rc1-261-g44b98e14", None)) >>> with mock.patch('scapy.subprocess.Popen', return_value=b): ... with mock.patch('scapy.os.path.isdir', return_value=True): ... class GitModuleScapy(object): ... __version__ = _version_from_git_describe() ... >>> with mock.patch('scapy.subprocess.Popen', return_value=b): ... with mock.patch('scapy.os.path.isdir', return_value=False): ... try: ... _version_from_git_describe() ... assert False ... except ValueError: ... pass ... >>> assert GitModuleScapy.__version__ == '2.4.5rc1.dev261' >>> assert _version_checker(GitModuleScapy, (2, 4, 5)) ###(004)=[passed] List layers >>> ls() AD_AND_OR : None AD_KDCIssued : None AH : AH AKMSuite : AKM suite ARP : ARP ASN1P_INTEGER : None ASN1P_OID : None ASN1P_PRIVSEQ : None ASN1_Packet : None ATT_Error_Response : Error Response ATT_Exchange_MTU_Request : Exchange MTU Request ATT_Exchange_MTU_Response : Exchange MTU Response ATT_Execute_Write_Request : Execute Write Request ATT_Execute_Write_Response : Execute Write Response ATT_Find_By_Type_Value_Request : Find By Type Value Request ATT_Find_By_Type_Value_Response : Find By Type Value Response ATT_Find_Information_Request : Find Information Request ATT_Find_Information_Response : Find Information Response ATT_Handle : ATT Short Handle ATT_Handle_UUID128 : ATT Handle (UUID 128) ATT_Handle_Value_Indication : Handle Value Indication ATT_Handle_Value_Notification : Handle Value Notification ATT_Handle_Variable : None ATT_Hdr : ATT header ATT_Prepare_Write_Request : Prepare Write Request ATT_Prepare_Write_Response : Prepare Write Response ATT_Read_Blob_Request : Read Blob Request ATT_Read_Blob_Response : Read Blob Response ATT_Read_By_Group_Type_Request : Read By Group Type Request ATT_Read_By_Group_Type_Response : Read By Group Type Response ATT_Read_By_Type_Request : Read By Type Request ATT_Read_By_Type_Request_128bit : Read By Type Request ATT_Read_By_Type_Response : Read By Type Response ATT_Read_Multiple_Request : Read Multiple Request ATT_Read_Multiple_Response : Read Multiple Response ATT_Read_Request : Read Request ATT_Read_Response : Read Response ATT_Write_Command : Write Request ATT_Write_Request : Write Request ATT_Write_Response : Write Response AV_PAIR : NTLM AV Pair AlgorithmIdentifier : None AttributeValueAssertion : None AuthorizationData : None AuthorizationDataItem : None BOOTP : BOOTP BRWS : None BRWS_BecomeBackup : None BRWS_HostAnnouncement : None BRWS_LocalMasterAnnouncement : None BSSTerminationDuration : BSS Termination Duration BTLE : BT4LE BTLE_ADV : BTLE advertising header BTLE_ADV_DIRECT_IND : BTLE ADV_DIRECT_IND BTLE_ADV_IND : BTLE ADV_IND BTLE_ADV_NONCONN_IND : BTLE ADV_NONCONN_IND BTLE_ADV_SCAN_IND : BTLE ADV_SCAN_IND BTLE_CONNECT_REQ : BTLE connect request BTLE_CTRL : BTLE_CTRL BTLE_DATA : BTLE data header BTLE_EMPTY_PDU : Empty data PDU BTLE_PPI : BTLE PPI header BTLE_RF : BTLE RF info header BTLE_SCAN_REQ : BTLE scan request BTLE_SCAN_RSP : BTLE scan response Breakfast : None CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 : None CLDAP : None ChangePasswdData : None Checksum : None CommonAuthVerifier : Common Authentication Verifier CondFlagsTest : None CookedLinux : cooked linux CookedLinuxV2 : cooked linux v2 DFS_REFERRAL : None DFS_REFERRAL_ENTRY0 : None DFS_REFERRAL_ENTRY1 : None DFS_REFERRAL_V3 : None DFS_REFERRAL_V4 : None DHCP : DHCP options DHCP6 : DHCPv6 Generic Message DHCP6NTPSubOptMCAddr : DHCP6 NTP Multicast Address Suboption DHCP6NTPSubOptSrvAddr : DHCP6 NTP Server Address Suboption DHCP6NTPSubOptSrvFQDN : DHCP6 NTP Server FQDN Suboption DHCP6OptAddrRegEnable : DHCP6 Address Registration Option DHCP6OptAuth : DHCP6 Option - Authentication DHCP6OptBCMCSDomains : DHCP6 Option - BCMCS Domain Name List DHCP6OptBCMCSServers : DHCP6 Option - BCMCS Addresses List DHCP6OptBootFileUrl : DHCP6 Boot File URL Option DHCP6OptCaptivePortal : DHCP6 Option - Captive-Portal DHCP6OptClientArchType : DHCP6 Client System Architecture Type Option DHCP6OptClientFQDN : DHCP6 Option - Client FQDN DHCP6OptClientId : DHCP6 Client Identifier Option DHCP6OptClientLinkLayerAddr : DHCP6 Option - Client Link Layer address DHCP6OptClientNetworkInterId : DHCP6 Client Network Interface Identifier Option DHCP6OptDNSDomains : DHCP6 Option - Domain Search List option DHCP6OptDNSServers : DHCP6 Option - DNS Recursive Name Server DHCP6OptERPDomain : DHCP6 Option - ERP Domain Name List DHCP6OptElapsedTime : DHCP6 Elapsed Time Option DHCP6OptGeoConf : DHCP6 Option - Civic Location DHCP6OptGeoConfElement : None DHCP6OptIAAddress : DHCP6 IA Address Option (IA_TA or IA_NA suboption) DHCP6OptIAPrefix : DHCP6 Option - IA Prefix option DHCP6OptIA_NA : DHCP6 Identity Association for Non-temporary Addresses Option DHCP6OptIA_PD : DHCP6 Option - Identity Association for Prefix Delegation DHCP6OptIA_TA : DHCP6 Identity Association for Temporary Addresses Option DHCP6OptIfaceId : DHCP6 Interface-Id Option DHCP6OptInfoRefreshTime : DHCP6 Option - Information Refresh Time DHCP6OptLQClientLink : DHCP6 Client Link Option DHCP6OptMudUrl : DHCP6 Option - MUD URL DHCP6OptNISDomain : DHCP6 Option - NIS Domain Name DHCP6OptNISPDomain : DHCP6 Option - NIS+ Domain Name DHCP6OptNISPServers : DHCP6 Option - NIS+ Servers DHCP6OptNISServers : DHCP6 Option - NIS Servers DHCP6OptNTPServer : DHCP6 NTP Server Option DHCP6OptNewPOSIXTimeZone : DHCP6 POSIX Timezone Option DHCP6OptNewTZDBTimeZone : DHCP6 TZDB Timezone Option DHCP6OptOptReq : DHCP6 Option Request Option DHCP6OptPanaAuthAgent : DHCP6 PANA Authentication Agent Option DHCP6OptPref : DHCP6 Preference Option DHCP6OptRapidCommit : DHCP6 Rapid Commit Option DHCP6OptReconfAccept : DHCP6 Reconfigure Accept Option DHCP6OptReconfMsg : DHCP6 Reconfigure Message Option DHCP6OptRelayAgentERO : DHCP6 Option - RelayRequest Option DHCP6OptRelayMsg : DHCP6 Relay Message Option DHCP6OptRelaySuppliedOpt : DHCP6 Relay-Supplied Options Option DHCP6OptRemoteID : DHCP6 Option - Relay Agent Remote-ID DHCP6OptSIPDomains : DHCP6 Option - SIP Servers Domain Name List DHCP6OptSIPServers : DHCP6 Option - SIP Servers IPv6 Address List DHCP6OptSNTPServers : DHCP6 option - SNTP Servers DHCP6OptServerId : DHCP6 Server Identifier Option DHCP6OptServerUnicast : DHCP6 Server Unicast Option DHCP6OptStatusCode : DHCP6 Status Code Option DHCP6OptSubscriberID : DHCP6 Option - Subscriber ID DHCP6OptUnknown : Unknown DHCPv6 Option DHCP6OptUserClass : DHCP6 User Class Option DHCP6OptVSS : DHCP6 Option - Virtual Subnet Selection DHCP6OptVendorClass : DHCP6 Vendor Class Option DHCP6OptVendorSpecificInfo : DHCP6 Vendor-specific Information Option DHCP6_AddrRegInform : DHCPv6 Information Request Message DHCP6_AddrRegReply : DHCPv6 Information Reply Message DHCP6_Advertise : DHCPv6 Advertise Message DHCP6_Confirm : DHCPv6 Confirm Message DHCP6_Decline : DHCPv6 Decline Message DHCP6_InfoRequest : DHCPv6 Information Request Message DHCP6_Rebind : DHCPv6 Rebind Message DHCP6_Reconf : DHCPv6 Reconfigure Message DHCP6_RelayForward : DHCPv6 Relay Forward Message (Relay Agent/Server Message) DHCP6_RelayReply : DHCPv6 Relay Reply Message (Relay Agent/Server Message) DHCP6_Release : DHCPv6 Release Message DHCP6_Renew : DHCPv6 Renew Message DHCP6_Reply : DHCPv6 Reply Message DHCP6_Request : DHCPv6 Request Message DHCP6_Solicit : DHCPv6 Solicit Message DHRepInfo : None DIR_PPP : None DNS : DNS DNSCompressedPacket : None DNSQR : DNS Question Record DNSRR : DNS Resource Record DNSRRDLV : DNS DLV Resource Record DNSRRDNSKEY : DNS DNSKEY Resource Record DNSRRDS : DNS DS Resource Record DNSRRHINFO : DNS HINFO Resource Record DNSRRHTTPS : DNS HTTPS Resource Record DNSRRMX : DNS MX Resource Record DNSRRNAPTR : DNS NAPTR Resource Record DNSRRNSEC : DNS NSEC Resource Record DNSRRNSEC3 : DNS NSEC3 Resource Record DNSRRNSEC3PARAM : DNS NSEC3PARAM Resource Record DNSRROPT : DNS OPT Resource Record DNSRRRSIG : DNS RRSIG Resource Record DNSRRSOA : DNS SOA Resource Record DNSRRSRV : DNS SRV Resource Record DNSRRSVCB : DNS SVCB Resource Record DNSRRTSIG : DNS TSIG Resource Record DUID_EN : DUID - Assigned by Vendor Based on Enterprise Number DUID_LL : DUID - Based on Link-layer Address DUID_LLT : DUID - Link-layer address plus time DUID_UUID : DUID - Based on UUID DataPacket : Data Packet DcSockAddr : None DceRpc : None DceRpc4 : DCE/RPC v4 DceRpc4Payload : None DceRpc5 : DCE/RPC v5 DceRpc5AbstractSyntax : Presentation Syntax (p_syntax_id_t) DceRpc5AlterContext : DCE/RPC v5 - AlterContext DceRpc5AlterContextResp : DCE/RPC v5 - AlterContextResp DceRpc5Auth3 : DCE/RPC v5 - Auth3 DceRpc5Bind : DCE/RPC v5 - Bind DceRpc5BindAck : DCE/RPC v5 - Bind Ack DceRpc5BindNak : DCE/RPC v5 - Bind Nak DceRpc5Context : Presentation Context (p_cont_elem_t) DceRpc5Fault : DCE/RPC v5 - Fault DceRpc5PortAny : Port Any (port_any_t) DceRpc5Request : DCE/RPC v5 - Request DceRpc5Response : DCE/RPC v5 - Response DceRpc5Result : Context negotiation Result DceRpc5TransferSyntax : Presentation Transfer Syntax (p_syntax_id_t) DceRpc5Version : version_t DceRpcSecVT : Verification trailer DceRpcSecVTBitmask : rpc_sec_vt_bitmask DceRpcSecVTCommand : Verification trailer command DceRpcSecVTHeader2 : rpc_sec_vt_header2 DceRpcSecVTPcontext : rpc_sec_vt_pcontext DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DebugPacket : None DirectTCP : Direct TCP Dot11 : 802.11 Dot11ATIM : 802.11 ATIM Dot11Ack : 802.11 Ack packet Dot11Action : 802.11 Action Dot11AssoReq : 802.11 Association Request Dot11AssoResp : 802.11 Association Response Dot11Auth : 802.11 Authentication Dot11BSSTMRequest : BSS Transition Management Request Dot11BSSTMResponse : BSS Transition Management Response Dot11Beacon : 802.11 Beacon Dot11CCMP : 802.11 CCMP packet Dot11CSA : Channel Switch Announcement Frame Dot11Deauth : 802.11 Deauthentication Dot11Disas : 802.11 Disassociation Dot11Elt : 802.11 Information Element Dot11EltCSA : 802.11 CSA Element Dot11EltCountry : 802.11 Country Dot11EltCountryConstraintTriplet : 802.11 Country Constraint Triplet Dot11EltDSSSet : 802.11 DSSS Parameter Set Dot11EltERP : 802.11 ERP Dot11EltHTCapabilities : 802.11 HT Capabilities Dot11EltMicrosoftWPA : 802.11 Microsoft WPA Dot11EltOBSS : 802.11 OBSS Scan Parameters Element Dot11EltRSN : 802.11 RSN information Dot11EltRates : 802.11 Rates Dot11EltVHTOperation : 802.11 VHT Operation Element Dot11EltVendorSpecific : 802.11 Vendor Specific Dot11Encrypted : 802.11 Encrypted (unknown algorithm) Dot11FCS : 802.11-FCS Dot11ProbeReq : 802.11 Probe Request Dot11ProbeResp : 802.11 Probe Response Dot11QoS : 802.11 QoS Dot11ReassoReq : 802.11 Reassociation Request Dot11ReassoResp : 802.11 Reassociation Response Dot11S1GBeacon : 802.11 S1G Beacon Dot11SpectrumManagement : 802.11 Spectrum Management Action Dot11TKIP : 802.11 TKIP packet Dot11VHTOperationInfo : 802.11 VHT Operation Information Dot11WEP : 802.11 WEP packet Dot11WNM : 802.11 WNM Action Dot15d4 : 802.15.4 Dot15d4Ack : 802.15.4 Ack Dot15d4AuxSecurityHeader : 802.15.4 Auxiliary Security Header Dot15d4Beacon : 802.15.4 Beacon Dot15d4Cmd : 802.15.4 Command Dot15d4CmdAssocReq : 802.15.4 Association Request Payload Dot15d4CmdAssocResp : 802.15.4 Association Response Payload Dot15d4CmdCoordRealign : 802.15.4 Coordinator Realign Command Dot15d4CmdCoordRealignPage : 802.15.4 Coordinator Realign Page Dot15d4CmdDisassociation : 802.15.4 Disassociation Notification Payload Dot15d4CmdGTSReq : 802.15.4 GTS request command Dot15d4Data : 802.15.4 Data Dot15d4FCS : 802.15.4 - FCS Dot1AD : 802_1AD Dot1AH : 802_1AH Dot1Q : 802.1Q Dot3 : 802.3 DummyPacket : None EAP : EAP EAPOL : EAPOL EAPOL_KEY : EAPOL_KEY EAP_FAST : EAP-FAST EAP_MD5 : EAP-MD5 EAP_PEAP : PEAP EAP_TLS : EAP-TLS EAP_TTLS : EAP-TTLS ECCurve : None ECDSAPrivateKey : None ECDSAPrivateKey_OpenSSL : ECDSA Params + Private Key ECDSAPublicKey : None ECDSASignature : None ECFieldID : None ECParameters : None ECSpecifiedDomain : None EDNS0COOKIE : DNS EDNS0 COOKIE EDNS0ClientSubnet : DNS EDNS0 Client Subnet EDNS0DAU : DNSSEC Algorithm Understood (DAU) EDNS0DHU : DS Hash Understood (DHU) EDNS0ExtendedDNSError : DNS EDNS0 Extended DNS Error EDNS0N3U : NSEC3 Hash Understood (N3U) EDNS0OWN : EDNS0 Owner (OWN) EDNS0TLV : DNS EDNS0 TLV EIR_AdvertisingInterval : Advertising Interval EIR_Appearance : EIR_Appearance EIR_ClassOfDevice : Class of device EIR_CompleteList128BitServiceUUIDs : Complete list of 128-bit service UUIDs EIR_CompleteList16BitServiceUUIDs : Complete list of 16-bit service UUIDs EIR_CompleteList32BitServiceUUIDs : Complete list of 32-bit service UUIDs EIR_CompleteLocalName : Complete Local Name EIR_Device_ID : Device ID EIR_Element : EIR Element EIR_Flags : Flags EIR_Hdr : EIR Header EIR_IncompleteList128BitServiceUUIDs : Incomplete list of 128-bit service UUIDs EIR_IncompleteList16BitServiceUUIDs : Incomplete list of 16-bit service UUIDs EIR_IncompleteList32BitServiceUUIDs : Incomplete list of 32-bit service UUIDs EIR_LEBluetoothDeviceAddress : LE Bluetooth Device Address EIR_Manufacturer_Specific_Data : EIR Manufacturer Specific Data EIR_PeripheralConnectionIntervalRange : Peripheral Connection Interval Range EIR_PublicTargetAddress : Public Target Address EIR_Raw : EIR Raw EIR_SecureSimplePairingHashC192 : Secure Simple Pairing Hash C-192 EIR_SecureSimplePairingRandomizerR192 : Secure Simple Pairing Randomizer R-192 EIR_SecurityManagerOOBFlags : Security Manager Out of Band Flags EIR_ServiceData128BitUUID : EIR Service Data - 128-bit UUID EIR_ServiceData16BitUUID : EIR Service Data - 16-bit UUID EIR_ServiceData32BitUUID : EIR Service Data - 32-bit UUID EIR_ServiceSolicitation128BitUUID : EIR Service Solicitation - 128-bit UUID EIR_ServiceSolicitation16BitUUID : EIR Service Solicitation - 16-bit UUID EIR_ShortenedLocalName : Shortened Local Name EIR_TX_Power_Level : TX Power Level EIR_URI : EIR URI EPacket : None ESP : ESP ETYPE_INFO : None ETYPE_INFO2 : None ETYPE_INFO_ENTRY : None ETYPE_INFO_ENTRY2 : None EdDSAPrivateKey : None EdDSAPublicKey : None EncAPRepPart : None EncASRepPart : None EncKeyPack : None EncKrbCredPart : None EncKrbPrivPart : None EncTGSRepPart : None EncTicketPart : None EncryptedData : None EncryptionKey : None EndpointFlagsPacket : RTPS Endpoint Builtin Endpoint Flags Ether : Ethernet EtherCat : None EtherCatAPRD : None EtherCatAPRW : None EtherCatAPWR : None EtherCatARMW : None EtherCatBRD : None EtherCatBRW : None EtherCatBWR : None EtherCatFPRD : None EtherCatFPRW : None EtherCatFPWR : None EtherCatFRMW : None EtherCatLRD : None EtherCatLRW : None EtherCatLWR : None EtherCatType12DLPDU : None ExternalPrincipalIdentifier : None FILE_BOTH_DIR_INFORMATION : None FILE_FULL_DIR_INFORMATION : None FILE_GET_QUOTA_INFORMATION : None FILE_ID_BOTH_DIR_INFORMATION : None FILE_NAME_INFORMATION : None FILE_NOTIFY_INFORMATION : None FileAccessInformation : None FileAlignmentInformation : None FileAllInformation : None FileAlternateNameInformation : None FileBasicInformation : None FileBothDirectoryInformation : None FileEaInformation : None FileFsAttributeInformation : None FileFsSizeInformation : None FileFsVolumeInformation : None FileFullDirectoryInformation : None FileIdBothDirectoryInformation : None FileInternalInformation : None FileModeInformation : None FileNetworkOpenInformation : None FilePositionInformation : None FileRenameInformation : None FileStandardInformation : None FileStreamInformation : None FlagsTest : None FlagsTest2 : None GPRS : GPRSdummy GRE : GRE GRE_PPTP : GRE PPTP GRErouting : GRE routing information GSSAPI_BLOB : None GSSAPI_BLOB_SIGNATURE : None GUIDPacket : RTPS GUID GUIDPrefixPacket : RTPS GUID Prefix GssBufferDesc : gss_buffer_desc GssChannelBindings : gss_channel_bindings_struct GuessPayload : None H2AbstractHeadersFrame : None H2ContinuationFrame : HTTP/2 Continuation Frame H2DataFrame : HTTP/2 Data Frame H2Frame : HTTP/2 Frame H2FramePayload : None H2GoAwayFrame : HTTP/2 Go Away Frame H2HeadersFrame : HTTP/2 Headers Frame H2PaddedDataFrame : HTTP/2 Padded Data Frame H2PaddedHeadersFrame : HTTP/2 Headers Frame with Padding H2PaddedPriorityHeadersFrame : HTTP/2 Headers Frame with Padding and Priority H2PaddedPushPromiseFrame : HTTP/2 Padded Push Promise Frame H2PingFrame : HTTP/2 Ping Frame H2PriorityFrame : HTTP/2 Priority Frame H2PriorityHeadersFrame : HTTP/2 Headers Frame with Priority H2PushPromiseFrame : HTTP/2 Push Promise Frame H2ResetFrame : HTTP/2 Reset Frame H2Seq : HTTP/2 Frame Sequence H2Setting : HTTP/2 Setting H2SettingsFrame : HTTP/2 Settings Frame H2WindowUpdateFrame : HTTP/2 Window Update Frame HAO : Home Address Option HBHOptUnknown : Scapy6 Unknown Option HCI_ACL_Hdr : HCI ACL header HCI_Cmd_Accept_Connection_Request : HCI_Accept_Connection_Request HCI_Cmd_Authentication_Requested : HCI_Authentication_Requested HCI_Cmd_Change_Connection_Link_Key : HCI_Change_Connection_Link_Key HCI_Cmd_Change_Connection_Packet_Type : HCI_Cmd_Change_Connection_Packet_Type HCI_Cmd_Complete_LE_Read_White_List_Size : LE Read White List Size HCI_Cmd_Complete_Read_BD_Addr : Read BD Addr HCI_Cmd_Complete_Read_Local_Extended_Features : Read Local Extended Features command complete HCI_Cmd_Complete_Read_Local_Name : Read Local Name command complete HCI_Cmd_Complete_Read_Local_Version_Information : Read Local Version Information HCI_Cmd_Create_Connection : HCI_Create_Connection HCI_Cmd_Create_Connection_Cancel : HCI_Create_Connection_Cancel HCI_Cmd_Disconnect : HCI_Disconnect HCI_Cmd_Exit_Peiodic_Inquiry_Mode : HCI_Exit_Periodic_Inquiry_Mode HCI_Cmd_Hold_Mode : HCI_Hold_Mode HCI_Cmd_IO_Capability_Request_Reply : HCI_Read_Remote_Supported_Features HCI_Cmd_Inquiry : HCI_Inquiry HCI_Cmd_Inquiry_Cancel : HCI_Inquiry_Cancel HCI_Cmd_LE_Add_Device_To_Filter_Accept_List : HCI_LE_Add_Device_To_Filter_Accept_List HCI_Cmd_LE_Clear_Filter_Accept_List : HCI_LE_Clear_Filter_Accept_List HCI_Cmd_LE_Connection_Update : HCI_LE_Connection_Update HCI_Cmd_LE_Create_Connection : HCI_LE_Create_Connection HCI_Cmd_LE_Create_Connection_Cancel : HCI_LE_Create_Connection_Cancel HCI_Cmd_LE_Enable_Encryption : HCI_LE_Enable_Encryption HCI_Cmd_LE_Long_Term_Key_Request_Negative_Reply : HCI_LE_Long_Term_Key_Request _Negative_Reply HCI_Cmd_LE_Long_Term_Key_Request_Reply : HCI_LE_Long_Term_Key_Request_Reply HCI_Cmd_LE_Read_Buffer_Size_V1 : HCI_LE_Read_Buffer_Size [v1] HCI_Cmd_LE_Read_Buffer_Size_V2 : HCI_LE_Read_Buffer_Size [v2] HCI_Cmd_LE_Read_Filter_Accept_List_Size : HCI_LE_Read_Filter_Accept_List_Size HCI_Cmd_LE_Read_Local_Supported_Features : HCI_LE_Read_Local_Supported_Features HCI_Cmd_LE_Read_Remote_Features : HCI_LE_Read_Remote_Features HCI_Cmd_LE_Remove_Device_From_Filter_Accept_List : HCI_LE_Remove_Device_From_Filter_Accept_List HCI_Cmd_LE_Set_Advertise_Enable : HCI_LE_Set_Advertising_Enable HCI_Cmd_LE_Set_Advertising_Data : HCI_LE_Set_Advertising_Data HCI_Cmd_LE_Set_Advertising_Parameters : HCI_LE_Set_Advertising_Parameters HCI_Cmd_LE_Set_Random_Address : HCI_LE_Set_Random_Address HCI_Cmd_LE_Set_Scan_Enable : HCI_LE_Set_Scan_Enable HCI_Cmd_LE_Set_Scan_Parameters : HCI_LE_Set_Scan_Parameters HCI_Cmd_LE_Set_Scan_Response_Data : HCI_LE_Set_Scan_Response_Data HCI_Cmd_Link_Key_Request_Negative_Reply : HCI_Link_Key_Request_Negative_Reply HCI_Cmd_Link_Key_Request_Reply : HCI_Link_Key_Request_Reply HCI_Cmd_Link_Key_Selection : HCI_Cmd_Link_Key_Selection HCI_Cmd_PIN_Code_Request_Negative_Reply : HCI_PIN_Code_Request_Negative_Reply HCI_Cmd_PIN_Code_Request_Reply : HCI_PIN_Code_Request_Reply HCI_Cmd_Periodic_Inquiry_Mode : HCI_Periodic_Inquiry_Mode HCI_Cmd_Read_BD_Addr : HCI_Read_BD_ADDR HCI_Cmd_Read_LE_Host_Support : HCI_Read_LE_Host_Support HCI_Cmd_Read_Link_Quality : HCI_Read_Link_Quality HCI_Cmd_Read_Local_Extended_Features : HCI_Read_Local_Extended_Features HCI_Cmd_Read_Local_Name : HCI_Read_Local_Name HCI_Cmd_Read_Local_Version_Information : HCI_Read_Local_Version_Information HCI_Cmd_Read_Loopback_Mode : HCI_Read_Loopback_Mode HCI_Cmd_Read_RSSI : HCI_Read_RSSI HCI_Cmd_Read_Remote_Extended_Features : HCI_Read_Remote_Supported_Features HCI_Cmd_Read_Remote_Supported_Features : HCI_Read_Remote_Supported_Features HCI_Cmd_Reject_Connection_Response : HCI_Reject_Connection_Response HCI_Cmd_Remote_Name_Request : HCI_Remote_Name_Request HCI_Cmd_Remote_Name_Request_Cancel : HCI_Remote_Name_Request_Cancel HCI_Cmd_Remote_OOB_Data_Request_Negative_Reply : HCI_Remote_OOB_Data_Request_Negative_Reply HCI_Cmd_Remote_OOB_Data_Request_Reply : HCI_Remote_OOB_Data_Request_Reply HCI_Cmd_Reset : HCI_Reset HCI_Cmd_Set_Connection_Encryption : HCI_Set_Connection_Encryption HCI_Cmd_Set_Event_Filter : HCI_Set_Event_Filter HCI_Cmd_Set_Event_Mask : HCI_Set_Event_Mask HCI_Cmd_User_Confirmation_Request_Negative_Reply : HCI_User_Confirmation_Request_Negative_Reply HCI_Cmd_User_Confirmation_Request_Reply : HCI_User_Confirmation_Request_Reply HCI_Cmd_User_Passkey_Request_Negative_Reply : HCI_User_Passkey_Request_Negative_Reply HCI_Cmd_User_Passkey_Request_Reply : HCI_User_Passkey_Request_Reply HCI_Cmd_Write_Connect_Accept_Timeout : HCI_Write_Connection_Accept_Timeout HCI_Cmd_Write_Extended_Inquiry_Response : HCI_Write_Extended_Inquiry_Response HCI_Cmd_Write_LE_Host_Support : HCI_Write_LE_Host_Support HCI_Cmd_Write_Local_Name : None HCI_Cmd_Write_Loopback_Mode : HCI_Write_Loopback_Mode HCI_Command_Hdr : HCI Command header HCI_Event_Command_Complete : HCI_Command_Complete HCI_Event_Command_Status : HCI_Command_Status HCI_Event_Connection_Complete : HCI_Connection_Complete HCI_Event_Disconnection_Complete : HCI_Disconnection_Complete HCI_Event_Encryption_Change : HCI_Encryption_Change HCI_Event_Extended_Inquiry_Result : HCI_Extended_Inquiry_Result HCI_Event_Hdr : HCI Event header HCI_Event_IO_Capability_Response : HCI_IO_Capability_Response HCI_Event_Inquiry_Complete : HCI_Inquiry_Complete HCI_Event_Inquiry_Result : HCI_Inquiry_Result HCI_Event_Inquiry_Result_With_Rssi : HCI_Inquiry_Result_with_RSSI HCI_Event_LE_Meta : HCI_LE_Meta HCI_Event_Link_Key_Request : HCI_Link_Key_Request HCI_Event_Number_Of_Completed_Packets : HCI_Number_Of_Completed_Packets HCI_Event_Read_Remote_Extended_Features_Complete : HCI_Read_Remote_Extended_Features_Complete HCI_Event_Read_Remote_Supported_Features_Complete : HCI_Read_Remote_Supported_Features_Complete HCI_Event_Read_Remote_Version_Information_Complete : HCI_Read_Remote_Version_Information HCI_Event_Remote_Name_Request_Complete : HCI_Remote_Name_Request_Complete HCI_Extended_Inquiry_Response : None HCI_Hdr : HCI header HCI_LE_Meta_Advertising_Report : Advertising Report HCI_LE_Meta_Advertising_Reports : Advertising Reports HCI_LE_Meta_Connection_Complete : Connection Complete HCI_LE_Meta_Connection_Update_Complete : Connection Update Complete HCI_LE_Meta_Extended_Advertising_Report : Extended Advertising Report HCI_LE_Meta_Extended_Advertising_Reports : Extended Advertising Reports HCI_LE_Meta_Long_Term_Key_Request : Long Term Key Request HCI_Mon_Hdr : Bluetooth Linux Monitor Transport Header HCI_Mon_Index_Info : Bluetooth Linux Monitor Transport Index Info Packet HCI_Mon_New_Index : Bluetooth Linux Monitor Transport New Index Packet HCI_Mon_Pcap_Hdr : Bluetooth Linux Monitor Transport Pcap Header HCI_Mon_System_Note : Bluetooth Linux Monitor Transport System Note Packet HCI_PHDR_Hdr : HCI PHDR transport layer HDLC : None HPackDynamicSizeUpdate : HPack Dynamic Size Update HPackHdrString : HPack Header String HPackHeaders : None HPackIndexedHdr : HPack Indexed Header Field HPackLitHdrFldWithIncrIndexing : HPack Literal Header With Incremental Indexing HPackLitHdrFldWithoutIndexing : HPack Literal Header Without Indexing (or Never Indexing) HSRP : HSRP HSRPmd5 : HSRP MD5 Authentication HTTP : HTTP 1 HTTPRequest : HTTP Request HTTPResponse : HTTP Response HostAddress : None IAKERB_HEADER : None ICMP : ICMP ICMPExtension_Header : ICMP Extension Header (RFC4884) ICMPExtension_InterfaceInformation : ICMP Extension Object - Interface Information Object (RFC5837) ICMPExtension_Object : ICMP Extension Object ICMPerror : ICMP in ICMP ICMPv6DestUnreach : ICMPv6 Destination Unreachable ICMPv6EchoReply : ICMPv6 Echo Reply ICMPv6EchoRequest : ICMPv6 Echo Request ICMPv6HAADReply : ICMPv6 Home Agent Address Discovery Reply ICMPv6HAADRequest : ICMPv6 Home Agent Address Discovery Request ICMPv6MLDMultAddrRec : ICMPv6 MLDv2 - Multicast Address Record ICMPv6MLDone : MLD - Multicast Listener Done ICMPv6MLQuery : MLD - Multicast Listener Query ICMPv6MLQuery2 : MLDv2 - Multicast Listener Query ICMPv6MLReport : MLD - Multicast Listener Report ICMPv6MLReport2 : MLDv2 - Multicast Listener Report ICMPv6MPAdv : ICMPv6 Mobile Prefix Advertisement ICMPv6MPSol : ICMPv6 Mobile Prefix Solicitation ICMPv6MRD_Advertisement : ICMPv6 Multicast Router Discovery Advertisement ICMPv6MRD_Solicitation : ICMPv6 Multicast Router Discovery Solicitation ICMPv6MRD_Termination : ICMPv6 Multicast Router Discovery Termination ICMPv6NDOptAdvInterval : ICMPv6 Neighbor Discovery - Interval Advertisement ICMPv6NDOptCaptivePortal : ICMPv6 Neighbor Discovery Option - Captive-Portal Option ICMPv6NDOptDNSSL : ICMPv6 Neighbor Discovery Option - DNS Search List Option ICMPv6NDOptDstLLAddr : ICMPv6 Neighbor Discovery Option - Destination Link-Layer Address ICMPv6NDOptEFA : ICMPv6 Neighbor Discovery Option - Expanded Flags Option ICMPv6NDOptHAInfo : ICMPv6 Neighbor Discovery - Home Agent Information ICMPv6NDOptIPAddr : ICMPv6 Neighbor Discovery - IP Address Option (FH for MIPv6) ICMPv6NDOptLLA : ICMPv6 Neighbor Discovery - Link-Layer Address (LLA) Option (FH for MIPv6) ICMPv6NDOptMAP : ICMPv6 Neighbor Discovery - MAP Option ICMPv6NDOptMTU : ICMPv6 Neighbor Discovery Option - MTU ICMPv6NDOptNewRtrPrefix : ICMPv6 Neighbor Discovery - New Router Prefix Information Option (FH for MIPv6) ICMPv6NDOptPREF64 : ICMPv6 Neighbor Discovery Option - PREF64 Option ICMPv6NDOptPrefixInfo : ICMPv6 Neighbor Discovery Option - Prefix Information ICMPv6NDOptRDNSS : ICMPv6 Neighbor Discovery Option - Recursive DNS Server Option ICMPv6NDOptRedirectedHdr : ICMPv6 Neighbor Discovery Option - Redirected Header ICMPv6NDOptRouteInfo : ICMPv6 Neighbor Discovery Option - Route Information Option ICMPv6NDOptShortcutLimit : ICMPv6 Neighbor Discovery Option - NBMA Shortcut Limit ICMPv6NDOptSrcAddrList : ICMPv6 Inverse Neighbor Discovery Option - Source Address List ICMPv6NDOptSrcLLAddr : ICMPv6 Neighbor Discovery Option - Source Link-Layer Address ICMPv6NDOptTgtAddrList : ICMPv6 Inverse Neighbor Discovery Option - Target Address List ICMPv6NDOptUnknown : ICMPv6 Neighbor Discovery Option - Scapy Unimplemented ICMPv6ND_INDAdv : ICMPv6 Inverse Neighbor Discovery Advertisement ICMPv6ND_INDSol : ICMPv6 Inverse Neighbor Discovery Solicitation ICMPv6ND_NA : ICMPv6 Neighbor Discovery - Neighbor Advertisement ICMPv6ND_NS : ICMPv6 Neighbor Discovery - Neighbor Solicitation ICMPv6ND_RA : ICMPv6 Neighbor Discovery - Router Advertisement ICMPv6ND_RS : ICMPv6 Neighbor Discovery - Router Solicitation ICMPv6ND_Redirect : ICMPv6 Neighbor Discovery - Redirect ICMPv6NIQueryIPv4 : ICMPv6 Node Information Query - IPv4 Address Query ICMPv6NIQueryIPv6 : ICMPv6 Node Information Query - IPv6 Address Query ICMPv6NIQueryNOOP : ICMPv6 Node Information Query - NOOP Query ICMPv6NIQueryName : ICMPv6 Node Information Query - IPv6 Name Query ICMPv6NIReplyIPv4 : ICMPv6 Node Information Reply - IPv4 addresses ICMPv6NIReplyIPv6 : ICMPv6 Node Information Reply - IPv6 addresses ICMPv6NIReplyNOOP : ICMPv6 Node Information Reply - NOOP Reply ICMPv6NIReplyName : ICMPv6 Node Information Reply - Node Names ICMPv6NIReplyRefuse : ICMPv6 Node Information Reply - Responder refuses to supply answer ICMPv6NIReplyUnknown : ICMPv6 Node Information Reply - Qtype unknown to the responder ICMPv6PacketTooBig : ICMPv6 Packet Too Big ICMPv6ParamProblem : ICMPv6 Parameter Problem ICMPv6RPL : RPL ICMPv6TimeExceeded : ICMPv6 Time Exceeded ICMPv6Unknown : Scapy6 ICMPv6 fallback class IP : IP IPOption : IP Option IPOption_Address_Extension : IP Option Address Extension IPOption_EOL : IP Option End of Options List IPOption_LSRR : IP Option Loose Source and Record Route IPOption_MTU_Probe : IP Option MTU Probe IPOption_MTU_Reply : IP Option MTU Reply IPOption_NOP : IP Option No Operation IPOption_RR : IP Option Record Route IPOption_Router_Alert : IP Option Router Alert IPOption_SDBM : IP Option Selective Directed Broadcast Mode IPOption_SSRR : IP Option Strict Source and Record Route IPOption_Security : IP Option Security IPOption_Stream_Id : IP Option Stream ID IPOption_Timestamp : IP Option Timestamp IPOption_Traceroute : IP Option Traceroute IPerror : IP in ICMP IPerror6 : IPv6 in ICMPv6 IPv46 : IPv4/6 IPv6 : IPv6 IPv6ExtHdrDestOpt : IPv6 Extension Header - Destination Options Header IPv6ExtHdrFragment : IPv6 Extension Header - Fragmentation header IPv6ExtHdrHopByHop : IPv6 Extension Header - Hop-by-Hop Options Header IPv6ExtHdrRouting : IPv6 Option Header Routing IPv6ExtHdrSegmentRouting : IPv6 Option Header Segment Routing IPv6ExtHdrSegmentRoutingTLV : IPv6 Option Header Segment Routing - Generic TLV IPv6ExtHdrSegmentRoutingTLVEgressNode : IPv6 Option Header Segment Routing - Egress Node TLV IPv6ExtHdrSegmentRoutingTLVHMAC : IPv6 Option Header Segment Routing - HMAC TLV IPv6ExtHdrSegmentRoutingTLVIngressNode : IPv6 Option Header Segment Routing - Ingress Node TLV IPv6ExtHdrSegmentRoutingTLVPad1 : IPv6 Option Header Segment Routing - Pad1 TLV IPv6ExtHdrSegmentRoutingTLVPadN : IPv6 Option Header Segment Routing - PadN TLV ISAKMP : ISAKMP ISAKMP_payload : ISAKMP payload ISAKMP_payload_Delete : ISAKMP Delete ISAKMP_payload_Hash : ISAKMP Hash ISAKMP_payload_ID : ISAKMP Identification ISAKMP_payload_KE : ISAKMP Key Exchange ISAKMP_payload_Nonce : ISAKMP Nonce ISAKMP_payload_Notify : ISAKMP Notify (Notification) ISAKMP_payload_Proposal : IKE proposal ISAKMP_payload_SA : ISAKMP SA ISAKMP_payload_SIG : ISAKMP Signature ISAKMP_payload_Transform : IKE Transform ISAKMP_payload_VendorID : ISAKMP Vendor ID InlineQoSPacket : Inline QoS IrLAPCommand : IrDA Link Access Protocol Command IrLAPHead : IrDA Link Access Protocol Header IrLMP : IrDA Link Management Protocol Jumbo : Jumbo Payload KDC_PROXY_MESSAGE : None KERB_AD_LOGIN_ALIAS : None KERB_AD_RESTRICTION_ENTRY : KERB-AD-RESTRICTION-ENTRY KERB_AUTH_DATA_AP_OPTIONS : KERB-AUTH-DATA-AP-OPTIONS KERB_AUTH_DATA_CLIENT_TARGET : KERB-AD-TARGET-PRINCIPAL KERB_DMSA_KEY_PACKAGE : None KERB_ERROR_DATA : None KERB_ERROR_UNK : None KERB_EXT_ERROR : None KERB_KEY_LIST_REP : None KERB_KEY_LIST_REQ : None KERB_SUPERSEDED_BY_USER : None KPASSWD_REP : None KPASSWD_REQ : None KPasswdRepData : None KRB_AP_REP : None KRB_AP_REQ : None KRB_AS_REP : None KRB_AS_REQ : None KRB_Authenticator : None KRB_AuthenticatorChecksum : None KRB_CRED : None KRB_ERROR : None KRB_FINISHED : None KRB_GSSAPI_Token : Kerberos GSSAPI-Token KRB_GSS_Delete_sec_context_RFC1964 : Kerberos v5 GSS_Delete_sec_context (RFC1964) KRB_GSS_EXT : None KRB_GSS_MIC : Kerberos v5 MIC Token KRB_GSS_MIC_RFC1964 : Kerberos v5 MIC Token (RFC1964) KRB_GSS_Wrap : Kerberos v5 Wrap Token KRB_GSS_Wrap_RFC1964 : Kerberos v5 GSS_Wrap (RFC1964) KRB_InnerToken : Kerberos v5 InnerToken KRB_KDC_REQ_BODY : None KRB_PRIV : None KRB_TGS_REP : None KRB_TGS_REQ : None KRB_TGT_REP : None KRB_TGT_REQ : None KRB_Ticket : None Kerberos : None KerberosTCPHeader : None Kpasswd : None KpasswdTCPHeader : None KrbCredInfo : None KrbFastArmor : None KrbFastArmoredRep : None KrbFastArmoredReq : None KrbFastFinished : None KrbFastReq : None KrbFastResponse : None L2CAP_CmdHdr : L2CAP command header L2CAP_CmdRej : L2CAP Command Rej L2CAP_ConfReq : L2CAP Conf Req L2CAP_ConfResp : L2CAP Conf Resp L2CAP_ConnReq : L2CAP Conn Req L2CAP_ConnResp : L2CAP Conn Resp L2CAP_Connection_Parameter_Update_Request : L2CAP Connection Parameter Update Request L2CAP_Connection_Parameter_Update_Response : L2CAP Connection Parameter Update Response L2CAP_Create_Channel_Request : L2CAP Create Channel Request L2CAP_Create_Channel_Response : L2CAP Create Channel Response L2CAP_Credit_Based_Connection_Request : L2CAP Credit Based Connection Request L2CAP_Credit_Based_Connection_Response : L2CAP Credit Based Connection Response L2CAP_Credit_Based_Reconfigure_Request : L2CAP Credit Based Reconfigure Request L2CAP_Credit_Based_Reconfigure_Response : L2CAP Credit Based Reconfigure Response L2CAP_DisconnReq : L2CAP Disconn Req L2CAP_DisconnResp : L2CAP Disconn Resp L2CAP_EchoReq : L2CAP Echo Req L2CAP_EchoResp : L2CAP Echo Resp L2CAP_Flow_Control_Credit_Ind : L2CAP Flow Control Credit Ind L2CAP_Hdr : L2CAP header L2CAP_InfoReq : L2CAP Info Req L2CAP_InfoResp : L2CAP Info Resp L2CAP_LE_Credit_Based_Connection_Request : L2CAP LE Credit Based Connection Request L2CAP_LE_Credit_Based_Connection_Response : L2CAP LE Credit Based Connection Response L2CAP_Move_Channel_Confirmation_Request : L2CAP Move Channel Confirmation Request L2CAP_Move_Channel_Confirmation_Response : L2CAP Move Channel Confirmation Response L2CAP_Move_Channel_Request : L2CAP Move Channel Request L2CAP_Move_Channel_Response : L2CAP Move Channel Response L2TP : L2TP LDAP : None LDAPReferral : None LDAP_AbandonRequest : None LDAP_AddRequest : None LDAP_AddResponse : None LDAP_Attribute : None LDAP_AttributeValue : None LDAP_Authentication_SaslCredentials : None LDAP_BindRequest : None LDAP_BindResponse : None LDAP_Control : None LDAP_DelRequest : None LDAP_DelResponse : None LDAP_ExtendedResponse : None LDAP_Filter : None LDAP_FilterAnd : None LDAP_FilterApproxMatch : None LDAP_FilterEqual : None LDAP_FilterExtensibleMatch : None LDAP_FilterGreaterOrEqual : None LDAP_FilterLessOrEqual : None LDAP_FilterNot : None LDAP_FilterOr : None LDAP_FilterPresent : None LDAP_ModifyDNRequest : None LDAP_ModifyDNResponse : None LDAP_ModifyRequest : None LDAP_ModifyRequestChange : None LDAP_ModifyResponse : None LDAP_PartialAttribute : None LDAP_SASL_Buffer : None LDAP_SASL_GSSAPI_SsfCap : None LDAP_SearchRequest : None LDAP_SearchRequestAttribute : None LDAP_SearchResponseEntry : None LDAP_SearchResponseReference : None LDAP_SearchResponseResultDone : None LDAP_SubstringFilter : None LDAP_SubstringFilterAny : None LDAP_SubstringFilterFinal : None LDAP_SubstringFilterInitial : None LDAP_SubstringFilterStr : None LDAP_UnbindRequest : None LDAP_realSearchControlValue : None LDAP_serverSDFlagsControl : None LEAP : Cisco LEAP LLC : LLC LLMNRQuery : Link Local Multicast Node Resolution - Query LLMNRResponse : Link Local Multicast Node Resolution - Response LLTD : LLTD LLTDAttribute : LLTD Attribute LLTDAttribute80211MaxRate : LLTD Attribute - 802.11 Max Rate LLTDAttribute80211PhysicalMedium : LLTD Attribute - 802.11 Physical Medium LLTDAttributeCharacteristics : LLTD Attribute - Characteristics LLTDAttributeDeviceUUID : LLTD Attribute - Device UUID LLTDAttributeEOP : LLTD Attribute - End Of Property LLTDAttributeHostID : LLTD Attribute - Host ID LLTDAttributeIPv4Address : LLTD Attribute - IPv4 Address LLTDAttributeIPv6Address : LLTD Attribute - IPv6 Address LLTDAttributeLargeTLV : LLTD Attribute - Large TLV LLTDAttributeLinkSpeed : LLTD Attribute - Link Speed LLTDAttributeMachineName : LLTD Attribute - Machine Name LLTDAttributePerformanceCounterFrequency : LLTD Attribute - Performance Counter Frequency LLTDAttributePhysicalMedium : LLTD Attribute - Physical Medium LLTDAttributeQOSCharacteristics : LLTD Attribute - QoS Characteristics LLTDAttributeSeesList : LLTD Attribute - Sees List Working Set LLTDDiscover : LLTD - Discover LLTDEmit : LLTD - Emit LLTDEmiteeDesc : LLTD - Emitee Desc LLTDHello : LLTD - Hello LLTDQueryLargeTlv : LLTD - Query Large Tlv LLTDQueryLargeTlvResp : LLTD - Query Large Tlv Response LLTDQueryResp : LLTD - Query Response LLTDRecveeDesc : LLTD - Recvee Desc LL_CHANNEL_MAP_IND : LL_CHANNEL_MAP_IND LL_CHANNEL_REPORTING_IND : LL_SUBRATE_IND LL_CHANNEL_STATUS_IND : LL_CHANNEL_STATUS_IND LL_CIS_IND : LL_CIS_IND LL_CIS_REQ : LL_CIS_REQ LL_CIS_RSP : LL_CIS_RSP LL_CIS_TERMINATE_IND : LL_CIS_TERMINATE_IND LL_CLOCK_ACCURACY_REQ : LL_CLOCK_ACCURACY_REQ LL_CLOCK_ACCURACY_RSP : LL_CLOCK_ACCURACY_RSP LL_CONNECTION_PARAM_REQ : LL_CONNECTION_PARAM_REQ LL_CONNECTION_PARAM_RSP : LL_CONNECTION_PARAM_RSP LL_CONNECTION_UPDATE_IND : LL_CONNECTION_UPDATE_IND LL_CTE_REQ : LL_CTE_REQ LL_CTE_RSP : LL_CTE_RSP LL_ENC_REQ : LL_ENC_REQ LL_ENC_RSP : LL_ENC_RSP LL_FEATURE_REQ : LL_FEATURE_REQ LL_FEATURE_RSP : LL_FEATURE_RSP LL_LENGTH_REQ : LL_LENGTH_REQ LL_LENGTH_RSP : LL_LENGTH_RSP LL_MIN_USED_CHANNELS_IND : LL_MIN_USED_CHANNELS_IND LL_PAUSE_ENC_REQ : LL_PAUSE_ENC_REQ LL_PAUSE_ENC_RSP : LL_PAUSE_ENC_RSP LL_PERIODIC_SYNC_IND : LL_PERIODIC_SYNC_IND LL_PHY_REQ : LL_PHY_REQ LL_PHY_RSP : LL_PHY_RSP LL_PHY_UPDATE_IND : LL_PHY_UPDATE_IND LL_PING_REQ : LL_PING_REQ LL_PING_RSP : LL_PING_RSP LL_POWER_CHANGE_IND : LL_POWER_CHANGE_IND LL_POWER_CONTROL_REQ : LL_POWER_CONTROL_REQ LL_POWER_CONTROL_RSP : LL_POWER_CONTROL_RSP LL_REJECT_EXT_IND : LL_REJECT_EXT_IND LL_REJECT_IND : LL_REJECT_IND LL_SLAVE_FEATURE_REQ : LL_SLAVE_FEATURE_REQ LL_START_ENC_REQ : LL_START_ENC_REQ LL_START_ENC_RSP : LL_START_ENC_RSP LL_SUBRATE_IND : LL_SUBRATE_IND LL_SUBRATE_REQ : LL_SUBRATE_REQ LL_TERMINATE_IND : LL_TERMINATE_IND LL_UNKNOWN_RSP : LL_UNKNOWN_RSP LL_VERSION_IND : LL_VERSION_IND LM_RESPONSE : None LMv2_RESPONSE : None LPSERVER_INFO_100 : None LPSERVER_INFO_1005 : None LPSERVER_INFO_101 : None LPSERVER_INFO_1010 : None LPSERVER_INFO_1016 : None LPSERVER_INFO_1017 : None LPSERVER_INFO_1018 : None LPSERVER_INFO_102 : None LPSERVER_INFO_103 : None LPSERVER_INFO_1107 : None LPSERVER_INFO_1501 : None LPSERVER_INFO_1502 : None LPSERVER_INFO_1503 : None LPSERVER_INFO_1506 : None LPSERVER_INFO_1510 : None LPSERVER_INFO_1511 : None LPSERVER_INFO_1512 : None LPSERVER_INFO_1513 : None LPSERVER_INFO_1514 : None LPSERVER_INFO_1515 : None LPSERVER_INFO_1516 : None LPSERVER_INFO_1518 : None LPSERVER_INFO_1523 : None LPSERVER_INFO_1528 : None LPSERVER_INFO_1529 : None LPSERVER_INFO_1530 : None LPSERVER_INFO_1533 : None LPSERVER_INFO_1534 : None LPSERVER_INFO_1535 : None LPSERVER_INFO_1536 : None LPSERVER_INFO_1538 : None LPSERVER_INFO_1539 : None LPSERVER_INFO_1540 : None LPSERVER_INFO_1541 : None LPSERVER_INFO_1542 : None LPSERVER_INFO_1543 : None LPSERVER_INFO_1544 : None LPSERVER_INFO_1545 : None LPSERVER_INFO_1546 : None LPSERVER_INFO_1547 : None LPSERVER_INFO_1548 : None LPSERVER_INFO_1549 : None LPSERVER_INFO_1550 : None LPSERVER_INFO_1552 : None LPSERVER_INFO_1553 : None LPSERVER_INFO_1554 : None LPSERVER_INFO_1555 : None LPSERVER_INFO_1556 : None LPSERVER_INFO_502 : None LPSERVER_INFO_503 : None LPSERVER_INFO_599 : None LPSHARE_ENUM_STRUCT : None LPSHARE_INFO_0 : None LPSHARE_INFO_1 : None LPSHARE_INFO_1004 : None LPSHARE_INFO_1005 : None LPSHARE_INFO_1006 : None LPSHARE_INFO_1501_I : None LPSHARE_INFO_2 : None LPSHARE_INFO_501 : None LPSHARE_INFO_502_I : None LPSHARE_INFO_503_I : None LPWKSTA_INFO_100 : None LPWKSTA_INFO_101 : None LPWKSTA_INFO_1013 : None LPWKSTA_INFO_1018 : None LPWKSTA_INFO_102 : None LPWKSTA_INFO_1046 : None LPWKSTA_INFO_502 : None LSAP_TOKEN_INFO_INTEGRITY : None LastReqItem : None LeaseDurationPacket : Lease Duration LinkStatusEntry : ZigBee Link Status Entry LinuxTunIfReq : None LinuxTunPacketInfo : None LoWPANBroadcast : 6LoWPAN Broadcast LoWPANFragmentationFirst : 6LoWPAN First Fragmentation Packet LoWPANFragmentationSubsequent : 6LoWPAN Subsequent Fragmentation Packet LoWPANMesh : 6LoWPAN Mesh Packet LoWPANUncompressedIPv6 : 6LoWPAN Uncompressed IPv6 LoWPAN_HC1 : LoWPAN_HC1 Compressed IPv6 LoWPAN_HC2_UDP : 6LoWPAN HC1 UDP encoding LoWPAN_IPHC : LoWPAN IP Header Compression Packet LoWPAN_NHC : LOWPAN_NHC LoWPAN_NHC_Hdr : None LoWPAN_NHC_IPv6Ext : None LoWPAN_NHC_UDP : None LocatorPacket : RTPS Locator Loopback : Loopback LoopbackOpenBSD : OpenBSD Loopback MACsecSCI : SCI MGCP : MGCP MIP6MH_BA : IPv6 Mobility Header - Binding ACK MIP6MH_BE : IPv6 Mobility Header - Binding Error MIP6MH_BRR : IPv6 Mobility Header - Binding Refresh Request MIP6MH_BU : IPv6 Mobility Header - Binding Update MIP6MH_CoT : IPv6 Mobility Header - Care-of Test MIP6MH_CoTI : IPv6 Mobility Header - Care-of Test Init MIP6MH_Generic : IPv6 Mobility Header - Generic Message MIP6MH_HoT : IPv6 Mobility Header - Home Test MIP6MH_HoTI : IPv6 Mobility Header - Home Test Init MIP6OptAltCoA : MIPv6 Option - Alternate Care-of Address MIP6OptBRAdvice : Mobile IPv6 Option - Binding Refresh Advice MIP6OptBindingAuthData : MIPv6 Option - Binding Authorization Data MIP6OptCGAParams : MIPv6 option - CGA Parameters MIP6OptCGAParamsReq : MIPv6 option - CGA Parameters Request MIP6OptCareOfTest : MIPv6 option - Care-of Test MIP6OptCareOfTestInit : MIPv6 option - Care-of Test Init MIP6OptHomeKeygenToken : MIPv6 option - Home Keygen Token MIP6OptLLAddr : MIPv6 Option - Link-Layer Address (MH-LLA) MIP6OptMNID : MIPv6 Option - Mobile Node Identifier MIP6OptMobNetPrefix : NEMO Option - Mobile Network Prefix MIP6OptMsgAuth : MIPv6 Option - Mobility Message Authentication MIP6OptNonceIndices : MIPv6 Option - Nonce Indices MIP6OptReplayProtection : MIPv6 option - Replay Protection MIP6OptSignature : MIPv6 option - Signature MIP6OptUnknown : Scapy6 - Unknown Mobility Option MKABasicParamSet : Basic Parameter Set MKADistributedCAKParamSet : Distributed CAK parameter set MKADistributedSAKParamSet : Distributed SAK parameter set MKAICVSet : ICV MKALivePeerListParamSet : Live Peer List Parameter Set MKAPDU : MKPDU MKAParamSet : None MKAPeerListTuple : Peer List Tuple MKAPotentialPeerListParamSet : Potential Peer List Parameter Set MKASAKUseParamSet : SAK Use Parameter Set MOVE_DST_IPADDR : None MPacketPreamble : MPacket Preamble MS_CHAP2_Response : None MS_CHAP2_Success : None MS_CHAP_Domain : None MS_CHAP_Error : None MTFPacket : None MethodData : None MobileIP : Mobile IP (RFC3344) MobileIPRRP : Mobile IP Registration Reply (RFC3344) MobileIPRRQ : Mobile IP Registration Request (RFC3344) MobileIPTunnelData : Mobile IP Tunnel Data Message (RFC3519) MyPacket : None MyPacket : None NAT_KEEPALIVE : None NBNSHeader : NBNS Header NBNSNodeStatusRequest : NBNS status request NBNSNodeStatusResponse : NBNS Node Status Response NBNSNodeStatusResponseService : NBNS Node Status Response Service NBNSQueryRequest : NBNS query request NBNSQueryResponse : NBNS query response NBNSRegistrationRequest : NBNS registration request NBNSWackResponse : NBNS Wait for Acknowledgement Response NBNS_ADD_ENTRY : None NBTDatagram : NBT Datagram Packet NBTSession : NBT Session Packet NDRConformantArray : None NDRConformantString : None NDRContextHandle : None NDRPacket : None NDRPointer : None NDRSerialization1Header : None NDRSerialization1PrivateHeader : None NDRUnion : None NDRVaryingArray : None NEGOEX_BYTE_VECTOR : None NEGOEX_CHECKSUM : None NEGOEX_EXCHANGE_MESSAGE : None NEGOEX_EXCHANGE_NTLM : None NEGOEX_EXCHANGE_NTLM_ITEM : None NEGOEX_EXTENSION_VECTOR : None NEGOEX_MESSAGE_HEADER : None NEGOEX_NEGO_MESSAGE : None NEGOEX_VERIFY_MESSAGE : None NETLOGON : None NETLOGON_LOGON_QUERY : None NETLOGON_SAM_LOGON_REQUEST : None NETLOGON_SAM_LOGON_RESPONSE : None NETLOGON_SAM_LOGON_RESPONSE_EX : None NETLOGON_SAM_LOGON_RESPONSE_NT40 : None NETWORK_INTERFACE_INFO : None NL_AUTH_MESSAGE : NL_AUTH_MESSAGE NL_AUTH_SIGNATURE : NL_AUTH_(SHA2_)SIGNATURE NON_ESP : None NTLMSSP_MESSAGE_SIGNATURE : None NTLM_AUTHENTICATE : NTLM Authenticate NTLM_AUTHENTICATE_V2 : NTLM Authenticate NTLM_CHALLENGE : NTLM Challenge NTLM_Header : NTLM Header NTLM_NEGOTIATE : NTLM Negotiate NTLM_RESPONSE : None NTLMv2_CLIENT_CHALLENGE : None NTLMv2_RESPONSE : None NTP : None NTPAuthenticator : Authenticator NTPClockStatusPacket : clock status NTPConfPeer : conf_peer NTPConfRestrict : conf_restrict NTPConfTrap : conf_trap NTPConfUnpeer : conf_unpeer NTPControl : NTP Control message NTPErrorStatusPacket : error status NTPExtension : extension NTPExtensions : NTPv4 extensions NTPHeader : NTPHeader NTPInfoAuth : info_auth NTPInfoControl : info_control NTPInfoIOStats : info_io_stats NTPInfoIfStatsIPv4 : info_if_stats NTPInfoIfStatsIPv6 : info_if_stats NTPInfoKernel : info_kernel NTPInfoLoop : info_loop NTPInfoMemStats : info_mem_stats NTPInfoMonitor1 : InfoMonitor1 NTPInfoPeer : info_peer NTPInfoPeerList : info_peer_list NTPInfoPeerStats : info_peer_stats NTPInfoPeerSummary : info_peer_summary NTPInfoSys : info_sys NTPInfoSysStats : info_sys_stats NTPInfoTimerStats : info_timer_stats NTPPeerStatusDataPacket : data / peer status NTPPeerStatusPacket : peer status NTPPrivate : Private (mode 7) NTPPrivatePktTail : req_pkt_tail NTPPrivateReqPacket : request data NTPSystemStatusPacket : system status NeighborReport : Neighbor Report NetBIOS_DS : NetBIOS datagram service NetflowDataflowsetV9 : Netflow DataFlowSet V9/10 NetflowFlowsetV9 : Netflow FlowSet V9/10 NetflowHeader : Netflow Header NetflowHeaderV1 : Netflow Header v1 NetflowHeaderV10 : IPFix (Netflow V10) Header NetflowHeaderV5 : Netflow Header v5 NetflowHeaderV9 : Netflow Header V9 NetflowOptionsFlowset10 : Netflow V10 (IPFix) Options Template FlowSet NetflowOptionsFlowsetOptionV9 : Netflow Options Template FlowSet V9/10 - Option NetflowOptionsFlowsetScopeV9 : Netflow Options Template FlowSet V9/10 - Scope NetflowOptionsFlowsetV9 : Netflow Options Template FlowSet V9 NetflowOptionsRecordOptionV9 : Netflow Options Template Record V9/10 - Option NetflowOptionsRecordScopeV9 : Netflow Options Template Record V9/10 - Scope NetflowRecordV1 : Netflow Record v1 NetflowRecordV5 : Netflow Record v5 NetflowRecordV9 : Netflow DataFlowset Record V9/10 NetflowTemplateFieldV9 : Netflow Flowset Template Field V9/10 NetflowTemplateV9 : Netflow Flowset Template V9/10 NetrEnumerateComputerNames_Request : None NetrEnumerateComputerNames_Response : None NetrServerGetInfo_Request : None NetrServerGetInfo_Response : None NetrShareEnum_Request : None NetrShareEnum_Response : None NetrShareGetInfo_Request : None NetrShareGetInfo_Response : None NetrWkstaGetInfo_Request : None NetrWkstaGetInfo_Response : None NoPayload : None OCSP_ByKey : None OCSP_ByName : None OCSP_CertID : None OCSP_CertStatus : None OCSP_GoodInfo : None OCSP_ResponderID : None OCSP_Response : None OCSP_ResponseBytes : None OCSP_ResponseData : None OCSP_RevokedInfo : None OCSP_SingleResponse : None OCSP_UnknownInfo : None PADATA : None PA_AUTHENTICATION_SET : None PA_AUTHENTICATION_SET_ELEM : None PA_ENC_TS_ENC : None PA_FOR_USER : None PA_FX_FAST_REPLY : None PA_FX_FAST_REQUEST : None PA_PAC_OPTIONS : None PA_PAC_REQUEST : None PA_PK_AS_REP : None PA_PK_AS_REQ : None PA_S4U_X509_USER : None PA_SUPPORTED_ENCTYPES : None PIDPacketBase : PID Base Packet PID_BUILTIN_ENDPOINT_QOS : PID_BUILTIN_ENDPOINT_QOS PID_BUILTIN_ENDPOINT_SET : PID_BUILTIN_ENDPOINT_SET PID_CONTENT_FILTER_PROPERTY : PID_CONTENT_FILTER_PROPERTY PID_DEADLINE : PID_DEADLINE PID_DEFAULT_MULTICAST_LOCATOR : PID_DEFAULT_MULTICAST_LOCATOR PID_DEFAULT_UNICAST_IPADDRESS : PID_DEFAULT_UNICAST_IPADDRESS PID_DEFAULT_UNICAST_LOCATOR : PID_DEFAULT_UNICAST_LOCATOR PID_DEFAULT_UNICAST_PORT : PID_DEFAULT_UNICAST_PORT PID_DESTINATION_ORDER : PID_DESTINATION_ORDER PID_DOMAIN_ID : PID_DOMAIN_ID PID_DOMAIN_TAG : PID_DOMAIN_TAG PID_DURABILITY : PID_DURABILITY PID_DURABILITY_SERVICE : PID_DURABILITY_SERVICE PID_ENDPOINT_GUID : PID_ENDPOINT_GUID PID_ENTITY_NAME : PID_ENTITY_NAME PID_EXPECTS_INLINE_QOS : PID_EXPECTS_INLINE_QOS PID_GROUP_DATA : PID_GROUP_DATA PID_GROUP_ENTITYID : PID_GROUP_ENTITYID PID_GROUP_GUID : PID_GROUP_GUID PID_HISTORY : PID_HISTORY PID_KEY_HASH : PID_KEY_HASH PID_LATENCY_BUDGET : PID_LATENCY_BUDGET PID_LIFESPAN : PID_LIFESPAN PID_LIVELINESS : PID_LIVELINESS PID_METATRAFFIC_MULTICAST_IPADDRESS : PID_METATRAFFIC_MULTICAST_IPADDRESS PID_METATRAFFIC_MULTICAST_LOCATOR : PID_METATRAFFIC_MULTICAST_LOCATOR PID_METATRAFFIC_MULTICAST_PORT : PID_METATRAFFIC_MULTICAST_PORT PID_METATRAFFIC_UNICAST_IPADDRESS : PID_METATRAFFIC_UNICAST_IPADDRESS PID_METATRAFFIC_UNICAST_LOCATOR : PID_METATRAFFIC_UNICAST_LOCATOR PID_METATRAFFIC_UNICAST_PORT : PID_METATRAFFIC_UNICAST_PORT PID_MULTICAST_IPADDRESS : PID_MULTICAST_IPADDRESS PID_MULTICAST_LOCATOR : PID_MULTICAST_LOCATOR PID_OWNERSHIP : PID_OWNERSHIP PID_OWNERSHIP_STRENGTH : PID_OWNERSHIP_STRENGTH PID_PAD : PID_PAD PID_PARTICIPANT_BUILTIN_ENDPOINTS : PID_PARTICIPANT_BUILTIN_ENDPOINTS PID_PARTICIPANT_GUID : PID_PARTICIPANT_GUID PID_PARTICIPANT_LEASE_DURATION : PID_PARTICIPANT_LEASE_DURATION PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT : PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT PID_PARTITION : PID_PARTITION PID_PLUGIN_PROMISCUITY_KIND : PID_PLUGIN_PROMISCUITY_KIND PID_PRESENTATION : PID_PRESENTATION PID_PRODUCT_VERSION : PID_PRODUCT_VERSION PID_PROPERTY_LIST : PID_PROPERTY_LIST PID_PROTOCOL_VERSION : PID_PROTOCOL_VERSION PID_REACHABILITY_LEASE_DURATION : PID_REACHABILITY_LEASE_DURATION PID_RELIABILITY : PID_RELIABILITY PID_RESOURCE_LIMITS : PID_RESOURCE_LIMITS PID_RTI_DOMAIN_ID : PID_RTI_DOMAIN_ID PID_SENTINEL : PID_SENTINEL PID_STATUS_INFO : PID_STATUS_INFO PID_TIME_BASED_FILTER : PID_TIME_BASED_FILTER PID_TOPIC_DATA : PID_TOPIC_DATA PID_TOPIC_NAME : PID_TOPIC_NAME PID_TRANSPORT_INFO_LIST : PID_TRANSPORT_INFO_LIST PID_TRANSPORT_PRIO : PID_TRANSPORT_PRIO PID_TRANSPORT_PRIORITY : PID_TRANSPORT_PRIORITY PID_TYPE_MAX_SIZE_SERIALIZED : PID_TYPE_MAX_SIZE_SERIALIZED PID_TYPE_NAME : PID_TYPE_NAME PID_UNICAST_LOCATOR : PID_UNICAST_LOCATOR PID_UNKNOWN : PID_UNKNOWN PID_USER_DATA : PID_USER_DATA PID_VENDOR_BUILTIN_ENDPOINT_SET : PID_VENDOR_BUILTIN_ENDPOINT_SET PID_VENDOR_ID : PID_VENDOR_ID PInner : PInner PMKIDListPacket : PMKIDs PNET_COMPUTER_NAME_ARRAY : None POuter : POuter PPI : Per-Packet Information header (PPI) PPI_Element : PPI Element PPI_Hdr : PPI Header PPP : PPP Link Layer PPP_CHAP : PPP Challenge Handshake Authentication Protocol PPP_CHAP_ChallengeResponse : PPP Challenge Handshake Authentication Protocol PPP_ECP : None PPP_ECP_Option : PPP ECP Option PPP_ECP_Option_OUI : PPP ECP Option PPP_IPCP : None PPP_IPCP_Option : PPP IPCP Option PPP_IPCP_Option_DNS1 : PPP IPCP Option: DNS1 Address PPP_IPCP_Option_DNS2 : PPP IPCP Option: DNS2 Address PPP_IPCP_Option_IPAddress : PPP IPCP Option: IP Address PPP_IPCP_Option_NBNS1 : PPP IPCP Option: NBNS1 Address PPP_IPCP_Option_NBNS2 : PPP IPCP Option: NBNS2 Address PPP_LCP : PPP Link Control Protocol PPP_LCP_ACCM_Option : PPP LCP Option PPP_LCP_Auth_Protocol_Option : PPP LCP Option PPP_LCP_Callback_Option : PPP LCP Option PPP_LCP_Code_Reject : PPP Link Control Protocol PPP_LCP_Configure : PPP Link Control Protocol PPP_LCP_Discard_Request : PPP Link Control Protocol PPP_LCP_Echo : PPP Link Control Protocol PPP_LCP_MRU_Option : PPP LCP Option PPP_LCP_Magic_Number_Option : PPP LCP Option PPP_LCP_Option : PPP LCP Option PPP_LCP_Protocol_Reject : PPP Link Control Protocol PPP_LCP_Quality_Protocol_Option : PPP LCP Option PPP_LCP_Terminate : PPP Link Control Protocol PPP_PAP : PPP Password Authentication Protocol PPP_PAP_Request : PPP Password Authentication Protocol PPP_PAP_Response : PPP Password Authentication Protocol PPPoE : PPP over Ethernet PPPoED : PPP over Ethernet Discovery PPPoED_Tags : PPPoE Tag List PPPoETag : PPPoE Tag PPTP : PPTP PPTPCallClearRequest : PPTP Call Clear Request PPTPCallDisconnectNotify : PPTP Call Disconnect Notify PPTPEchoReply : PPTP Echo Reply PPTPEchoRequest : PPTP Echo Request PPTPIncomingCallConnected : PPTP Incoming Call Connected PPTPIncomingCallReply : PPTP Incoming Call Reply PPTPIncomingCallRequest : PPTP Incoming Call Request PPTPOutgoingCallReply : PPTP Outgoing Call Reply PPTPOutgoingCallRequest : PPTP Outgoing Call Request PPTPSetLinkInfo : PPTP Set Link Info PPTPStartControlConnectionReply : PPTP Start Control Connection Reply PPTPStartControlConnectionRequest : PPTP Start Control Connection Request PPTPStopControlConnectionReply : PPTP Stop Control Connection Reply PPTPStopControlConnectionRequest : PPTP Stop Control Connection Request PPTPWANErrorNotify : PPTP WAN Error Notify PUNICODE_STRING : None Packet : None Pad1 : Pad1 PadN : PadN Padding : Padding ParameterListPacket : PID list ParticipantMessageDataPacket : Participant Message Data PayloadPacket : None PrincipalName : None PrismHeader : Prism header ProductVersionPacket : Product Version ProtocolVersionPacket : RTPS Protocol Version PseudoIPv6 : Pseudo IPv6 Header RIP : RIP header RIPAuth : RIP authentication RIPEntry : RIP entry RPC_IF_ID : None RSAOtherPrimeInfo : None RSAPrivateKey : None RSAPrivateKey_OpenSSL : None RSAPublicKey : None RSNCipherSuite : Cipher suite RTP : RTP RTPExtension : RTP extension RTPS : RTPS Header RTPSMessage : RTPS Message RTPSSubMessage_ACKNACK : RTPS ACKNACK (0x06) RTPSSubMessage_DATA : RTPS DATA (0x15) RTPSSubMessage_DATA_FRAG : RTPS DATA_FRAG (0x16) RTPSSubMessage_GAP : RTPS GAP (0x08) RTPSSubMessage_HEARTBEAT : RTPS HEARTBEAT (0x07) RTPSSubMessage_INFO_DST : RTPS INFO_DTS (0x0e) RTPSSubMessage_INFO_TS : RTPS INFO_TS (0x09) RTPSSubMessage_PAD : RTPS PAD (0x01) RTPSSubMessage_SEC_BODY : RTPS SEC_BODY (0x30) RTPSSubMessage_SEC_POSTFIX : RTPS SEC_POSTFIX (0x32) RTPSSubMessage_SEC_PREFIX : RTPS SEC_PREFIX (0x31) RTPSSubMessage_SRTPS_POSTFIX : RTPS SRPTS_POSTFIX (0x34) RTPSSubMessage_SRTPS_PREFIX : RTPS SRPTS_PREFIX (0x33) RadioTap : RadioTap RadioTapExtendedPresenceMask : RadioTap Extended presence mask RadioTapTLV : None Radius : RADIUS RadiusAttr_ARAP_Security : Radius Attribute RadiusAttr_Acct_Authentic : Radius Attribute RadiusAttr_Acct_Delay_Time : Radius Attribute RadiusAttr_Acct_Input_Gigawords : Radius Attribute RadiusAttr_Acct_Input_Octets : Radius Attribute RadiusAttr_Acct_Input_Packets : Radius Attribute RadiusAttr_Acct_Interim_Interval : Radius Attribute RadiusAttr_Acct_Link_Count : Radius Attribute RadiusAttr_Acct_Output_Gigawords : Radius Attribute RadiusAttr_Acct_Output_Octets : Radius Attribute RadiusAttr_Acct_Output_Packets : Radius Attribute RadiusAttr_Acct_Session_Time : Radius Attribute RadiusAttr_Acct_Status_Type : Radius Attribute RadiusAttr_Acct_Terminate_Cause : Radius Attribute RadiusAttr_Acct_Tunnel_Packets_Lost : Radius Attribute RadiusAttr_EAP_Message : EAP-Message RadiusAttr_Egress_VLANID : Radius Attribute RadiusAttr_Event_Timestamp : Radius Attribute RadiusAttr_Framed_AppleTalk_Link : Radius Attribute RadiusAttr_Framed_AppleTalk_Network : Radius Attribute RadiusAttr_Framed_IPX_Network : Radius Attribute RadiusAttr_Framed_IP_Address : Radius Attribute RadiusAttr_Framed_IP_Netmask : Radius Attribute RadiusAttr_Framed_MTU : Radius Attribute RadiusAttr_Framed_Protocol : Radius Attribute RadiusAttr_Idle_Timeout : Radius Attribute RadiusAttr_Login_IP_Host : Radius Attribute RadiusAttr_Login_TCP_Port : Radius Attribute RadiusAttr_Management_Privilege_Level : Radius Attribute RadiusAttr_Message_Authenticator : Radius Attribute RadiusAttr_Mobility_Domain_Id : Radius Attribute RadiusAttr_NAS_IP_Address : Radius Attribute RadiusAttr_NAS_Port : Radius Attribute RadiusAttr_NAS_Port_Type : Radius Attribute RadiusAttr_PMIP6_Home_DHCP4_Server_Address : Radius Attribute RadiusAttr_PMIP6_Home_IPv4_Gateway : Radius Attribute RadiusAttr_PMIP6_Home_LMA_IPv4_Address : Radius Attribute RadiusAttr_PMIP6_Visited_DHCP4_Server_Address : Radius Attribute RadiusAttr_PMIP6_Visited_IPv4_Gateway : Radius Attribute RadiusAttr_PMIP6_Visited_LMA_IPv4_Address : Radius Attribute RadiusAttr_Password_Retry : Radius Attribute RadiusAttr_Port_Limit : Radius Attribute RadiusAttr_Preauth_Timeout : Radius Attribute RadiusAttr_Service_Type : Radius Attribute RadiusAttr_Session_Timeout : Radius Attribute RadiusAttr_State : Radius Attribute RadiusAttr_Tunnel_Preference : Radius Attribute RadiusAttr_User_Name : Radius Attribute RadiusAttr_User_Password : Radius Attribute RadiusAttr_Vendor_Specific : Vendor-Specific RadiusAttr_WLAN_AKM_Suite : Radius Attribute RadiusAttr_WLAN_Group_Cipher : Radius Attribute RadiusAttr_WLAN_Group_Mgmt_Cipher : Radius Attribute RadiusAttr_WLAN_Pairwise_Cipher : Radius Attribute RadiusAttr_WLAN_RF_Band : Radius Attribute RadiusAttr_WLAN_Reason_Code : Radius Attribute RadiusAttr_WLAN_Venue_Info : Radius Attribute RadiusAttribute : Radius Attribute Raw : Raw RouterAlert : Router Alert RplOption : RPL Option S4UUserID : None SCTP : None SCTPChunkAbort : None SCTPChunkAddressConf : None SCTPChunkAddressConfAck : None SCTPChunkAuthentication : None SCTPChunkCookieAck : None SCTPChunkCookieEcho : None SCTPChunkData : None SCTPChunkError : None SCTPChunkForwardTSN : None SCTPChunkHeartbeatAck : None SCTPChunkHeartbeatReq : None SCTPChunkIData : None SCTPChunkIForwardTSN : None SCTPChunkInit : None SCTPChunkInitAck : None SCTPChunkPad : None SCTPChunkParamAdaptationLayer : None SCTPChunkParamAddIPAddr : None SCTPChunkParamAddIncomingStreamReq : None SCTPChunkParamAddOutgoingStreamReq : None SCTPChunkParamChunkList : None SCTPChunkParamCookiePreservative : None SCTPChunkParamDelIPAddr : None SCTPChunkParamECNCapable : None SCTPChunkParamErrorIndication : None SCTPChunkParamFwdTSN : None SCTPChunkParamHeartbeatInfo : None SCTPChunkParamHostname : None SCTPChunkParamIPv4Addr : None SCTPChunkParamIPv6Addr : None SCTPChunkParamInSSNResetReq : None SCTPChunkParamOutSSNResetReq : None SCTPChunkParamRandom : None SCTPChunkParamReConfigRes : None SCTPChunkParamRequestedHMACFunctions : None SCTPChunkParamSSNTSNResetReq : None SCTPChunkParamSetPrimaryAddr : None SCTPChunkParamStateCookie : None SCTPChunkParamSuccessIndication : None SCTPChunkParamSupportedAddrTypes : None SCTPChunkParamSupportedExtensions : None SCTPChunkParamUnrocognizedParam : None SCTPChunkReConfig : None SCTPChunkSACK : None SCTPChunkShutdown : None SCTPChunkShutdownAck : None SCTPChunkShutdownComplete : None SCTPForwardSkip : None SCTPIForwardSkip : None SCTPerror : SCTP in ICMP SECURITY_DESCRIPTOR : None SHARE_INFO_0_CONTAINER : None SHARE_INFO_1_CONTAINER : None SHARE_INFO_2_CONTAINER : None SHARE_INFO_501_CONTAINER : None SHARE_INFO_502_CONTAINER : None SHARE_INFO_503_CONTAINER : None SMB2_CREATE_ALLOCATION_SIZE : None SMB2_CREATE_APP_INSTANCE_ID : None SMB2_CREATE_APP_INSTANCE_VERSION : None SMB2_CREATE_DURABLE_HANDLE_RECONNECT : None SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 : None SMB2_CREATE_DURABLE_HANDLE_REQUEST : None SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 : None SMB2_CREATE_DURABLE_HANDLE_RESPONSE : None SMB2_CREATE_DURABLE_HANDLE_RESPONSE_V2 : None SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST : None SMB2_CREATE_QUERY_MAXIMAL_ACCESS_RESPONSE : None SMB2_CREATE_QUERY_ON_DISK_ID : None SMB2_CREATE_REQUEST_LEASE : None SMB2_CREATE_REQUEST_LEASE_V2 : None SMB2_CREATE_RESPONSE_LEASE : None SMB2_CREATE_RESPONSE_LEASE_V2 : None SMB2_CREATE_TIMEWARP_TOKEN : None SMB2_Cancel_Request : SMB2 CANCEL Request SMB2_Change_Notify_Request : SMB2 CHANGE NOTIFY Request SMB2_Change_Notify_Response : SMB2 CHANGE NOTIFY Response SMB2_Close_Request : SMB2 CLOSE Request SMB2_Close_Response : SMB2 CLOSE Response SMB2_Compression_Capabilities : SMB2 Compression Capabilities SMB2_Compression_Transform_Header : SMB2 Compression Transform Header SMB2_Create_Context : SMB2 CREATE CONTEXT SMB2_Create_Request : SMB2 CREATE Request SMB2_Create_Response : SMB2 CREATE Response SMB2_Echo_Request : SMB2 ECHO Request SMB2_Echo_Response : SMB2 ECHO Response SMB2_Encryption_Capabilities : SMB2 Encryption Capabilities SMB2_Error_ContextResponse : None SMB2_Error_Response : SMB2 Error Response SMB2_Error_Share_Redirect_Context_Response : Share Redirect Error Context Response SMB2_FILEID : None SMB2_Header : SMB2 Header SMB2_IOCTL_Network_Interface_Info : SMB2 IOCTL Network Interface Info response SMB2_IOCTL_OFFLOAD_READ_Request : SMB2 IOCTL OFFLOAD_READ Request SMB2_IOCTL_OFFLOAD_READ_Response : SMB2 IOCTL OFFLOAD_READ Response SMB2_IOCTL_REQ_GET_DFS_Referral : None SMB2_IOCTL_RESP_GET_DFS_Referral : None SMB2_IOCTL_Request : SMB2 IOCTL Request SMB2_IOCTL_Response : SMB2 IOCTL Response SMB2_IOCTL_Validate_Negotiate_Info_Request : SMB2 IOCTL Validate Negotiate Info SMB2_IOCTL_Validate_Negotiate_Info_Response : SMB2 IOCTL Validate Negotiate Info SMB2_Negotiate_Context : SMB2 Negotiate Context SMB2_Negotiate_Protocol_Request : SMB2 Negotiate Protocol Request SMB2_Negotiate_Protocol_Response : SMB2 Negotiate Protocol Response SMB2_Netname_Negotiate_Context_ID : SMB2 Netname Negotiate Context ID SMB2_Preauth_Integrity_Capabilities : SMB2 Preauth Integrity Capabilities SMB2_Query_Directory_Request : SMB2 QUERY DIRECTORY Request SMB2_Query_Directory_Response : SMB2 QUERY DIRECTORY Response SMB2_Query_Info_Request : SMB2 QUERY INFO Request SMB2_Query_Info_Response : SMB2 QUERY INFO Response SMB2_Query_Quota_Info : None SMB2_RDMA_Transform_Capabilities : SMB2 RDMA Transform Capabilities SMB2_Read_Request : SMB2 READ Request SMB2_Read_Response : SMB2 READ Response SMB2_Session_Logoff_Request : SMB2 LOGOFF Request SMB2_Session_Logoff_Response : SMB2 LOGOFF Request SMB2_Session_Setup_Request : SMB2 Session Setup Request SMB2_Session_Setup_Response : SMB2 Session Setup Response SMB2_Set_Info_Request : SMB2 SET INFO Request SMB2_Set_Info_Response : SMB2 SET INFO Request SMB2_Signing_Capabilities : SMB2 Signing Capabilities SMB2_Transform_Header : SMB2 Transform Header SMB2_Transport_Capabilities : SMB2 Transport Capabilities SMB2_Tree_Connect_Request : SMB2 TREE_CONNECT Request SMB2_Tree_Connect_Response : SMB2 TREE_CONNECT Response SMB2_Tree_Disconnect_Request : SMB2 TREE_DISCONNECT Request SMB2_Tree_Disconnect_Response : SMB2 TREE_DISCONNECT Response SMB2_Write_Request : SMB2 WRITE Request SMB2_Write_Response : SMB2 WRITE Response SMBMailslot_Write : SMB COM Transaction Request SMBNegotiate_Request : SMB Negotiate Request SMBNegotiate_Response_Extended_Security : SMB Negotiate Extended Security Response (SMB) SMBNegotiate_Response_NoSecurity : SMB Negotiate No-Security Response (CIFS) SMBNegotiate_Response_Security : SMB Negotiate Non-Extended Security Response (SMB) SMBSession_Null : None SMBSession_Setup_AndX_Request : Session Setup AndX Request (CIFS) SMBSession_Setup_AndX_Request_Extended_Security : Session Setup AndX Extended Security Request (SMB) SMBSession_Setup_AndX_Response : Session Setup AndX Response (CIFS) SMBSession_Setup_AndX_Response_Extended_Security : Session Setup AndX Extended Security Response (SMB) SMBTransaction_Request : SMB COM Transaction Request SMBTransaction_Response : SMB COM Transaction Response SMBTree_Connect_AndX : Session Tree Connect AndX SMB_Dialect : SMB Dialect SMB_Header : SMB 1 Protocol Request Header SM_Confirm : Pairing Confirm SM_DHKey_Check : DHKey Check SM_Encryption_Information : Encryption Information SM_Failed : Pairing Failed SM_Hdr : SM header SM_Identity_Address_Information : Identity Address Information SM_Identity_Information : Identity Information SM_Master_Identification : Master Identification SM_Pairing_Request : Pairing Request SM_Pairing_Response : Pairing Response SM_Public_Key : Public Key SM_Random : Pairing Random SM_Security_Request : Security Request SM_Signing_Information : Signing Information SNAP : SNAP SNMP : None SNMPbulk : None SNMPget : None SNMPinform : None SNMPnext : None SNMPresponse : None SNMPset : None SNMPtrapv1 : None SNMPtrapv2 : None SNMPvarbind : None SOCKADDR_STORAGE : None SPNEGO_MechListMIC : None SPNEGO_MechType : None SPNEGO_MechTypes : None SPNEGO_Token : None SPNEGO_negHints : None SPNEGO_negToken : None SPNEGO_negTokenInit : None SPNEGO_negTokenResp : None STORAGE_OFFLOAD_TOKEN : None STP : Spanning Tree Protocol Single_Host_Data : None SixLoWPAN : SixLoWPAN Dispatcher SixLoWPAN_ESC : SixLoWPAN Dispatcher ESC Skinny : Skinny SubPacket : None SubPacket : None SubelemTLV : None SvcParam : SvcParam SweetPacket : Sweet Celestian Packet TCP : TCP TCPAOValue : None TCPTest : None TCPerror : TCP in ICMP TD_CMS_DIGEST_ALGORITHMS : None TEST_COND : None TEST_COND : None TEST_INNER : None TFTP : TFTP opcode TFTP_ACK : TFTP Ack TFTP_DATA : TFTP Data TFTP_ERROR : TFTP Error TFTP_OACK : TFTP Option Ack TFTP_Option : None TFTP_Options : None TFTP_RRQ : TFTP Read Request TFTP_WRQ : TFTP Write Request Test : None TestAction : TestAction TestBFLenF : None TestBitLenField : None TestFLF : test TestFLFUnaligned : test TestFLenF : None TestFuzzNBytesField : None TestGuess : test guess TestGuessInner : test guess inner TestGuessPLF : test guess TestGuessPLFInner : test guess inner TestNBytesField : None TestNestedPLF : None TestPLF : test TestPLF : test TestPLF : test TestPLF2 : None TestPLF2 : None TestPLFH1 : test1 TestPLFH2 : test2 TestPLFH3 : test3 TestPLFH4 : test4 TestPLFH5 : test5 TestPLFH6 : test6 TestPacket : None TestPacket : None TestPacket2 : None TestPkt : None TestPkt : None TestStrField : None TestStrFieldUtf16 : None TestStrLenFieldUtf16 : None TestThreeBytesField : None TestUTCTimeField : None TransitedEncoding : None TransportInfoPacket : Transport Info TunPacketInfo : None UDP : UDP UDPerror : UDP in ICMP USER_CLASS_DATA : user class data UUID : None VENDOR_CLASS_DATA : vendor class data VENDOR_SPECIFIC_OPTION : vendor specific option data VRRP : None VRRPv3 : None VXLAN : VXLAN VendorIdPacket : RTPS Vendor ID WINNT_ACCESS_ALLOWED_ACE : None WINNT_ACCESS_ALLOWED_CALLBACK_ACE : None WINNT_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE : None WINNT_ACCESS_ALLOWED_OBJECT_ACE : None WINNT_ACCESS_DENIED_ACE : None WINNT_ACCESS_DENIED_CALLBACK_ACE : None WINNT_ACCESS_DENIED_CALLBACK_OBJECT_ACE : None WINNT_ACCESS_DENIED_OBJECT_ACE : None WINNT_ACE_HEADER : None WINNT_ACL : None WINNT_APPLICATION_DATA : None WINNT_APPLICATION_DATA_LITERAL_TOKEN : None WINNT_SID : None WINNT_SID_IDENTIFIER_AUTHORITY : None WINNT_SYSTEM_AUDIT_ACE : None WINNT_SYSTEM_AUDIT_CALLBACK_ACE : None WINNT_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE : None WINNT_SYSTEM_AUDIT_OBJECT_ACE : None WINNT_SYSTEM_MANDATORY_LABEL_ACE : None WINNT_SYSTEM_RESOURCE_ATTRIBUTE_ACE : None WINNT_SYSTEM_SCOPED_POLICY_ID_ACE : None X : None X509_AccessDescription : None X509_AlgorithmIdentifier : None X509_Attribute : None X509_AttributeTypeAndValue : None X509_AttributeValue : None X509_CRL : None X509_Cert : None X509_DNSName : None X509_DirectoryName : None X509_EDIPartyName : None X509_ExtAuthInfoAccess : None X509_ExtAuthorityKeyIdentifier : None X509_ExtBasicConstraints : None X509_ExtCRLDistributionPoints : None X509_ExtCRLNumber : None X509_ExtCertificateIssuer : None X509_ExtCertificatePolicies : None X509_ExtCertificateTemplateName : None X509_ExtComment : None X509_ExtDeltaCRLIndicator : None X509_ExtDistributionPoint : None X509_ExtDistributionPointName : None X509_ExtExtendedKeyUsage : None X509_ExtFreshestCRL : None X509_ExtFullName : None X509_ExtGeneralSubtree : None X509_ExtInhibitAnyPolicy : None X509_ExtInvalidityDate : None X509_ExtIssuerAltName : None X509_ExtIssuingDistributionPoint : None X509_ExtKeyUsage : None X509_ExtNameConstraints : None X509_ExtNameRelativeToCRLIssuer : None X509_ExtNetscapeCertType : None X509_ExtNoticeReference : None X509_ExtOidNTDSCaSecurity : None X509_ExtPolicyConstraints : None X509_ExtPolicyInformation : None X509_ExtPolicyMappings : None X509_ExtPolicyQualifierInfo : None X509_ExtPrivateKeyUsagePeriod : None X509_ExtQcStatement : None X509_ExtQcStatements : None X509_ExtReasonCode : None X509_ExtSubjInfoAccess : None X509_ExtSubjectAltName : None X509_ExtSubjectDirectoryAttributes : None X509_ExtSubjectKeyIdentifier : None X509_ExtUserNotice : None X509_Extension : None X509_Extensions : None X509_GeneralName : None X509_IPAddress : None X509_OtherName : None X509_PolicyMapping : None X509_RDN : None X509_RFC822Name : None X509_RegisteredID : None X509_RevokedCertificate : None X509_SubjectPublicKeyInfo : None X509_TBSCertList : None X509_TBSCertificate : None X509_URI : None X509_Validity : None X509_X400Address : None ZCLAttributeReport : ZCL Attribute Report ZCLConfigureReportingRecord : ZCL Configure Reporting Record ZCLConfigureReportingResponseRecord : ZCL Configure Reporting Response Record ZCLGeneralConfigureReporting : General Domain: Command Frame Payload: configure_reporting ZCLGeneralConfigureReportingResponse : General Domain: Command Frame Payload: configure_reporting_response ZCLGeneralDefaultResponse : General Domain: Command Frame Payload: default_response ZCLGeneralReadAttributes : General Domain: Command Frame Payload: read_attributes ZCLGeneralReadAttributesResponse : General Domain: Command Frame Payload: read_attributes_response ZCLGeneralReportAttributes : General Domain: Command Frame Payload: report_attributes ZCLGeneralWriteAttributes : General Domain: Command Frame Payload: write_attributes ZCLGeneralWriteAttributesResponse : General Domain: Command Frame Payload: write_attributes_response ZCLIASZoneZoneEnrollRequest : IAS Zone Cluster: Zone Enroll Request Command (Server: Generated) ZCLIASZoneZoneEnrollResponse : IAS Zone Cluster: Zone Enroll Response Command (Server: Received) ZCLIASZoneZoneStatusChangeNotification : IAS Zone Cluster: Zone Status Change Notification Command (Server: Generated) ZCLMeteringGetProfile : Metering Cluster: Get Profile Command (Server: Received) ZCLPriceGetCurrentPrice : Price Cluster: Get Current Price Command (Server: Received) ZCLPriceGetScheduledPrices : Price Cluster: Get Scheduled Prices Command (Server: Received) ZCLPricePublishPrice : Price Cluster: Publish Price Command (Server: Generated) ZCLReadAttributeStatusRecord : ZCL Read Attribute Status Record ZCLWriteAttributeRecord : ZCL Write Attribute Record ZCLWriteAttributeStatusRecord : ZCL Write Attribute Status Record ZDPActiveEPReq : ZDP Transaction Data: Active_EP_req ZDPDeviceAnnce : ZDP Transaction Data: Device_annce ZEP1 : Zigbee Encapsulation Protocol (V1) ZEP2 : Zigbee Encapsulation Protocol (V2) ZigBeeBeacon : ZigBee Beacon Payload ZigbeeAppCommandPayload : Zigbee Application Layer Command Payload ZigbeeAppDataPayload : Zigbee Application Layer Data Payload (General APS Frame Format) ZigbeeAppDataPayloadStub : Zigbee Application Layer Data Payload for Inter-PAN Transmission ZigbeeClusterLibrary : Zigbee Cluster Library (ZCL) Frame ZigbeeDeviceProfile : Zigbee Device Profile (ZDP) Frame ZigbeeNWK : Zigbee Network Layer ZigbeeNWKCommandPayload : Zigbee Network Layer Command Payload ZigbeeNWKStub : Zigbee Network Layer for Inter-PAN Transmission ZigbeeSecurityHeader : Zigbee Security Header ept_entry_t : None ept_lookup_Request : None ept_lookup_Response : None ept_map_Request : None ept_map_Response : None ifaddrmsg : None ifaddrmsg_rtattr : None ifinfomsg : None ifinfomsg_rtattr : None ifla_af_spec_inet6_rtattr : None ifla_af_spec_inet_rtattr : None ifla_af_spec_rtattr : None nlmsgerr : None nlmsgerr_rtattr : None octet_string_t : None prot_and_addr_t : None protocol_tower_t : None rtmsg : None rtmsg_rtattr : None rtmsghdr : None rtmsghdrs : None twr_p_t : None ###(005)=[passed] List layers - advanced >>> with ContextManagerCaptureOutput() as cmco: ... ls("IP", case_sensitive=True) ... result_ls = cmco.get_output().split("\n") ... >>> assert all("IP" in x for x in result_ls if x.strip()) >>> assert len(result_ls) >= 3 ###(006)=[passed] List packet fields - ls >>> with ContextManagerCaptureOutput() as cmco: ... ls(ARP(hwsrc="aa:aa:aa:aa:aa:aa", psrc="1.1.1.1")) ... result_ls = cmco.get_output().split("\n") ... >>> result_ls ["hwtype : XShortEnumField = 1 ('1')", "ptype : XShortEnumField = 2048 ('2048')", "hwlen : FieldLenField = None ('None')", "plen : FieldLenField = None ('None')", "op : ShortEnumField = 1 ('1')", "hwsrc : MultipleTypeField (SourceMACField, StrFixedLenField) = 'aa:aa:aa:aa:aa:aa' ('None')", "psrc : MultipleTypeField (SourceIPField, SourceIP6Field, StrFixedLenField) = '1.1.1.1' ('None')", "hwdst : MultipleTypeField (MACField, StrFixedLenField) = '00:00:00:00:00:00' ('None')", "pdst : MultipleTypeField (IPField, IP6Field, StrFixedLenField) = '0.0.0.0' ('None')", ''] >>> assert result_ls[5] == "hwsrc : MultipleTypeField (SourceMACField, StrFixedLenField) = 'aa:aa:aa:aa:aa:aa' ('None')" >>> assert result_ls[6] == "psrc : MultipleTypeField (SourceIPField, SourceIP6Field, StrFixedLenField) = '1.1.1.1' ('None')" ###(007)=[passed] List commands >>> lsc() IPID_count : Identify IP id values classes in a list of packets arp_mitm : ARP MitM: poison 2 target's ARP cache arpcachepoison : Poison targets' ARP cache arping : Send ARP who-has requests to determine which hosts are up:: arpleak : Exploit ARP leak flaws, like NetBSD-SA2017-002. bind_layers : Bind 2 layers on some specific fields' values. bridge_and_sniff : Forward traffic between interfaces if1 and if2, sniff and return chexdump : Build a per byte hexadecimal representation computeNIGroupAddr : Compute the NI group Address. Can take a FQDN as input parameter connect_from_ip : Open a TCP socket to a host:port while spoofing another IP. corrupt_bits : Flip a given percentage (at least one bit) or number of bits corrupt_bytes : Corrupt a given percentage (at least one byte) or number of bytes dclocator : Perform a DC Locator as per [MS-ADTS] sect 6.3.6 or RFC4120. defrag : defrag(plist) -> ([not fragmented], [defragmented], defragment : defragment(plist) -> plist defragmented as much as possible dhcp_request : Send a DHCP discover request and return the answer. dns_resolve : Perform a simple DNS resolution using conf.nameservers with caching dnssd : Performs a DNS-SD (RFC6763) request dyndns_add : Send a DNS add message to a nameserver for "name" to have a new "rdata" dyndns_del : Send a DNS delete message to a nameserver for "name" etherleak : Exploit Etherleak flaw explore : Function used to discover the Scapy layers and protocols. fletcher16_checkbytes : Calculates the Fletcher-16 checkbytes returned as 2 byte binary-string. fletcher16_checksum : Calculates Fletcher-16 checksum of the given buffer. fragleak : -- fragleak2 : -- fragment : Fragment a big IP datagram fuzz : Transform a layer into a fuzzy layer by replacing some default values getmacbyip : Returns the destination MAC address used to reach a given IP address. getmacbyip6 : Returns the MAC address of the next hop used to reach a given IPv6 address. hexdiff : Show differences between 2 binary strings, Packets... hexdump : Build a tcpdump like hexadecimal view hexedit : Run hexedit on a list of packets, then return the edited packets. hexstr : Build a fancy tcpdump like hex from bytes. import_hexcap : Imports a tcpdump like hexadecimal view is_promisc : Try to guess if target is in Promisc mode. The target is provided by its ip. linehexdump : Build an equivalent view of hexdump() on a single line ls : List available layers, or infos on a given layer class or name. neighsol : Sends and receive an ICMPv6 Neighbor Solicitation message nmap_fp : nmap fingerprinting nmap_sig2txt : -- overlap_frag : Build overlapping fragments to bypass NIPS p0f : Passive OS fingerprinting: which OS emitted this TCP packet ? pkt2uptime : Calculate the date the machine which emitted the packet booted using TCP timestamp # noqa: E501 promiscping : Send ARP who-has requests to determine which hosts are in promiscuous mode rderf : Read a ERF file and return a packet list rdpcap : Read a pcap or pcapng file and return a packet list report_ports : portscan a target and output a LaTeX table restart : Restarts scapy rfc : Generate an RFC-like representation of a packet def. send : Send packets at layer 3 sendp : Send packets at layer 2 sendpfast : Send packets at layer 2 using tcpreplay for performance smbclient : A simple smbclient CLI sniff : Sniff packets and return a list of packets. split_layers : Split 2 layers previously bound. sr : Send and receive packets at layer 3 sr1 : Send packets at layer 3 and return only the first answer sr1flood : Flood and receive packets at layer 3 and return only the first answer srbt : send and receive using a bluetooth socket srbt1 : send and receive 1 packet using a bluetooth socket srflood : Flood and receive packets at layer 3 srloop : Send a packet at layer 3 in loop and print the answer each time srp : Send and receive packets at layer 2 srp1 : Send and receive packets at layer 2 and return only the first answer srp1flood : Flood and receive packets at layer 2 and return only the first answer srpflood : Flood and receive packets at layer 2 srploop : Send a packet at layer 2 in loop and print the answer each time tcpdump : Run tcpdump or tshark on a list of packets. tdecode : Run tshark on a list of packets. traceroute : Instant TCP traceroute traceroute6 : Instant TCP traceroute using IPv6 traceroute_map : Util function to call traceroute on multiple targets, then tshark : Sniff packets and print them calling pkt.summary(). wireshark : Runs Wireshark on a list of packets. wrerf : Write a list of packets to a ERF file wrpcap : Write a list of packets to a pcap file wrpcapng : Write a list of packets to a pcapng file ###(008)=[passed] List contribs >>> def test_list_contrib(): ... with ContextManagerCaptureOutput() as cmco: ... list_contrib() ... result_list_contrib = cmco.get_output() ... assert "http2 : HTTP/2 (RFC 7540, RFC 7541) status=loads" in result_list_contrib ... assert len(result_list_contrib.split('\n')) > 40 ... >>> test_list_contrib() ###(009)=[passed] Test packet show() on LatexTheme >>> class SmallPacket(Packet): ... fields_desc = [ByteField("a", 0)] ... >>> conf_color_theme = conf.color_theme >>> conf.color_theme = LatexTheme() \textcolor{blue}{{\tt\char62}{\tt\char62}{\tt\char62} }pkt = SmallPacket() \textcolor{blue}{{\tt\char62}{\tt\char62}{\tt\char62} }with ContextManagerCaptureOutput() as cmco: ... pkt.show() ... result = cmco.get_output().strip() ... \textcolor{blue}{{\tt\char62}{\tt\char62}{\tt\char62} }assert result == '\\#\\#\\#[ \\textcolor{red}{\\bf SmallPacket} ]\\#\\#\\#\n \\textcolor{blue}{a} = \\textcolor{purple}{0}' \textcolor{blue}{{\tt\char62}{\tt\char62}{\tt\char62} }conf.color_theme = conf_color_theme ###(010)=[passed] Test rfc() >>> dat = rfc(IP, ret=True).split("\n") >>> assert dat[0].replace(" ", "").strip() == "0123" >>> assert "0123456789" in dat[1].replace(" ", "") >>> for l in dat: ... # only upper case and +- ... assert re.match(r"[A-Z+-]*", l) ... >>> result = """ ... 0 1 2 3 ... 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... |VERSION| IHL | TOS | LEN | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | ID |FLAGS| FRAG | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | TTL | PROTO | CHKSUM | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | SRC | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | DST | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | OPTIONS | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... ... Fig. IP ... """.strip() >>> result = [x.strip() for x in result.split("\n")] >>> output = [x.strip() for x in rfc(IP, ret=True).strip().split("\n")] >>> assert result == output >>> >>> result = """ ... 0 1 2 3 ... 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | CODE | ID | LEN | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | TYPE |L|M|S|RES|VERSI| MESSAGE LEN | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | | DATA | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... ... Fig. EAP_TTLS ... """.strip() >>> result = [x.strip() for x in result.split("\n")] >>> output = [x.strip() for x in rfc(EAP_TTLS, ret=True).strip().split("\n")] >>> assert result == output >>> >>> >>> result = """ ... 0 1 2 3 ... 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... |VERSION| TC | FL | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | PLEN | NH | HLIM | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | SRC | ... + + ... | | ... + + ... | | ... + + ... | | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | DST | ... + + ... | | ... + + ... | | ... + + ... | | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... ... Fig. IPv6 ... """.strip() >>> result = [x.strip() for x in result.split("\n")] >>> output = [x.strip() for x in rfc(IPv6, ret=True).strip().split("\n")] >>> assert result == output >>> >>> >>> class TestPad(Packet): ... fields_desc = [ShortField("f0", 0), ... ShortField("f1", 0), ... PadField(ByteField("f2", 1), 8), ... PadField(ShortField("f3", 0), 4)] ... >>> >>> result = """ ... 0 1 2 3 ... 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | F0 | F1 | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | F2 | padding | ... +-+-+-+-+-+-+-+-+ + ... | | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | F3 | padding | ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... ... Fig. TestPad ... """.strip() >>> result = [x.strip() for x in result.split("\n")] >>> output = [x.strip() for x in rfc(TestPad, ret=True).strip().split("\n")] >>> assert result == output ###(011)=[passed] Check that all contrib modules are well-configured >>> list_contrib(_debug=True) HICP : HMS Anybus Host IP Control Protocol status=loads altbeacon : AltBeacon BLE proximity beacon status=loads aoe : ATA Over Internet status=loads automotive.autosar.pdu: AUTOSAR PDU packets handling package. status=loads automotive.autosar.secoc: AUTOSAR Secure On-Board Communication status=library automotive.autosar.secoc_canfd: AUTOSAR Secure On-Board Communication PDUs status=loads automotive.autosar.secoc_pdu: AUTOSAR Secure On-Board Communication PDUs status=loads automotive.bmw.definitions: BMW specific definitions for UDS status=loads automotive.bmw.enumerator: BMW specific enumerators status=loads automotive.bmw.hsfz : HSFZ - BMW High-Speed-Fahrzeug-Zugang status=loads automotive.ccp : CAN Calibration Protocol (CCP) status=loads automotive.doip : Diagnostic over IP (DoIP) / ISO 13400 status=loads automotive.ecu : Helper class for tracking Ecu states (Ecu) status=loads automotive.gm.gmlan : General Motors Local Area Network (GMLAN) status=loads automotive.gm.gmlan_ecu_states: GMLAN EcuState modifications status=library automotive.gm.gmlan_logging: GMLAN Ecu logging additions status=library automotive.gm.gmlan_scanner: GMLAN AutomotiveTestCaseExecutor Utilities status=loads automotive.gm.gmlanutils: GMLAN Utilities status=loads automotive.kwp : Keyword Protocol 2000 (KWP2000) / ISO 14230 status=loads automotive.obd.obd : On Board Diagnostic Protocol (OBD-II) status=loads automotive.obd.scanner: OnBoardDiagnosticScanner status=loads automotive.scanner.configuration: AutomotiveTestCaseExecutorConfiguration status=library automotive.scanner.enumerator: ServiceEnumerator definitions status=library automotive.scanner.executor: AutomotiveTestCaseExecutor base class status=library automotive.scanner.graph: Graph library for AutomotiveTestCaseExecutor status=library automotive.scanner.staged_test_case: Staged AutomotiveTestCase base classes status=library automotive.scanner.test_case: TestCase base class definitions status=library automotive.someip : Scalable service-Oriented MiddlewarE/IP (SOME/IP) status=loads automotive.uds : Unified Diagnostic Service (UDS) status=loads automotive.uds_ecu_states: UDS EcuState modifications status=library automotive.uds_logging: UDS Ecu logging additions status=library automotive.uds_scan : UDS AutomotiveTestCaseExecutor status=loads automotive.xcp.scanner: XCPScanner status=loads automotive.xcp.xcp : Universal calibration and measurement protocol (XCP) # noqa: E501 status=loads avs : AVS WLAN Monitor Header status=loads bfd : BFD status=loads bgp : BGP v0.1 status=loads bier : Bit Index Explicit Replication (BIER) status=loads bp : Bundle Protocol (BP) status=loads cansocket : CANSocket Utils status=loads cansocket_native : Native CANSocket status=loads cansocket_python_can: python-can CANSocket status=loads carp : Common Address Redundancy Protocol (CARP) status=loads cdp : Cisco Discovery Protocol (CDP) status=loads chdlc : Cisco HDLC and SLARP status=loads coap : Constrained Application Protocol (CoAP) status=loads concox : Concox CRX1 unit tests status=loads diameter : Diameter status=loads dtp : Dynamic Trunking Protocol (DTP) status=loads eddystone : Eddystone BLE proximity beacon status=loads eigrp : Enhanced Interior Gateway Routing Protocol (EIGRP) status=loads enipTCP : EtherNet/IP status=loads erspan : ERSPAN - Encapsulated Remote SPAN status=loads esmc : Ethernet Synchronization Message Channel (ESMC) status=loads ethercat : EtherCat status=loads etherip : EtherIP status=loads exposure_notification: Apple/Google Exposure Notification System (ENS) status=loads geneve : Generic Network Virtualization Encapsulation (GENEVE) status=loads gtp : GPRS Tunneling Protocol (GTP) status=loads gtp_v2 : GPRS Tunneling Protocol v2 (GTPv2) status=loads gxrp : Generic Attribute Register Protocol (GARP) status=loads homeplugav : HomePlugAV Layer status=loads homepluggp : HomePlugGP Layer status=loads homeplugsg : HomePlugSG Layer status=loads http2 : HTTP/2 (RFC 7540, RFC 7541) status=loads ibeacon : iBeacon BLE proximity beacon status=loads icmp_extensions : ICMP Extensions (deprecated) status=deprecated ife : ForCES Inter-FE LFB type (IFE) status=loads igmp : Internet Group Management Protocol v1/v2 (IGMP/IGMPv2) status=loads igmpv3 : Internet Group Management Protocol v3 (IGMPv3) status=loads ikev2 : Internet Key Exchange Protocol Version 2 (IKEv2), RFC 7296 status=loads isis : Intermediate System to Intermediate System (ISIS) status=loads isotp.__init__ : ISO-TP (ISO 15765-2) status=loads isotp.isotp_native_socket: ISO-TP (ISO 15765-2) Native Socket Library status=library isotp.isotp_packet : ISO-TP (ISO 15765-2) Packet Definitions status=library isotp.isotp_scanner : ISO-TP (ISO 15765-2) Scanner Utility status=library isotp.isotp_soft_socket: ISO-TP (ISO 15765-2) Soft Socket Library status=library isotp.isotp_utils : ISO-TP (ISO 15765-2) Utilities status=library knx : KNX Protocol status=loads lacp : Link Aggregation Control Protocol (LACP) status=loads ldp : Label Distribution Protocol (LDP) status=loads lldp : Link Layer Discovery Protocol (LLDP) status=loads loraphy2wan : LoRa PHY to WAN Layer status=loads ltp : Licklider Transmission Protocol (LTP) status=loads mac_control : MACControl status=loads macsec : 802.1AE - IEEE MAC Security standard (MACsec) status=loads metawatch : Arista Metawatch status=loads modbus : ModBus Protocol status=loads mount : NFS Mount v3 status=loads mpls : Multiprotocol Label Switching (MPLS) status=loads mqtt : Message Queuing Telemetry Transport (MQTT) status=loads mqttsn : MQTT for Sensor Networks (MQTT-SN) status=loads nfs : Network File System (NFS) v3 status=loads nlm : Network Lock Manager (NLM) v4 status=loads nrf_sniffer : nRF sniffer status=works nsh : Network Services Headers (NSH) status=loads oam : Operation, administration and maintenance (OAM) status=loads oncrpc : ONC-RPC v2 status=loads opc_da : OPC Data Access status=loads openflow : Openflow v1.0 status=loads openflow3 : OpenFlow v1.3 status=loads ospf : Open Shortest Path First (OSPF) status=loads pfcp : 3GPP Packet Forwarding Control Protocol status=loads pim : Protocol Independent Multicast (PIM) status=loads pnio : ProfinetIO RTC (+Profisafe) layer status=loads pnio_dcp : Profinet DCP layer status=loads pnio_rpc : ProfinetIO Remote Procedure Call (RPC) status=loads portmap : Portmapper v2 status=loads postgres : Postgres PSQL Binary Protocol status=loads ppi_cace : CACE Per-Packet Information (PPI) status=loads ppi_geotag : CACE Per-Packet Information (PPI) Geolocation status=loads psp : PSP Security Protocol status=loads ripng : Routing Information Protocol next gen (RIPng) status=loads roce : RoCE v2 status=loads rpl : Routing Protocol for LLNs (RPL) status=loads rpl_metrics : Routing Metrics used for Path Calc in LLNs status=loads rsvp : Resource Reservation Protocol (RSVP) status=loads rtcp : Real-Time Transport Control Protocol status=loads rtps.__init__ : Real-Time Publish-Subscribe Protocol (RTPS) status=loads rtps.common_types : RTPS common types status=library rtps.pid_types : RTPS PID type definitions status=library rtps.rtps : RTPS abstractions status=library rtr : The RPKI to Router Protocol status=loads rtsp : Real Time Streaming Protocol (RTSP) status=loads scada.iec104.__init__: IEC-60870-5-104 APCI / APDU layer definitions status=loads scada.iec104.iec104_information_objects: IEC-60870-5-104 ASDU layers / IO definitions status=loads scada.pcom : PCOM Protocol status=loads sdnv : Self-Delimiting Numeric Values (SDNV) status=library sebek : Sebek status=loads send : Secure Neighbor Discovery (SEND) (ICMPv6) status=loads skinny : Skinny Call Control Protocol (SCCP) status=loads slowprot : Slow Protocol status=loads socks : Socket Secure (SOCKS) status=loads stamp : Simple Two-Way Active Measurement Protocol (STAMP) status=loads stun : Session Traversal Utilities for NAT (STUN) status=loads tacacs : Terminal Access Controller Access-Control System+ status=loads tcpao : TCP-AO Signature Calculation status=loads tcpros : TCPROS transport layer for ROS Melodic Morenia status=loads tzsp : TaZmen Sniffer Protocol (TZSP) status=loads vqp : VLAN Query Protocol status=loads vtp : VLAN Trunking Protocol (VTP) status=loads wireguard : WireGuard status=loads ###(012)=[passed] Configuration >>> conf.debug_dissector = True ###(013)=[passed] Configuration conf.use_* LINUX >>> try: ... conf.use_bpf = True ... assert False ... except: ... True ... True >>> assert not conf.use_bpf ###(015)=[passed] Configuration conf.use_pcap >>> if not conf.use_pcap: ... assert not conf.iface.provider.libpcap ... conf.use_pcap = True ... assert conf.iface.provider.libpcap ... for iface in conf.ifaces.values(): ... assert iface.provider.libpcap or iface.is_valid() == False ... conf.use_pcap = False ... assert not conf.iface.provider.libpcap ... ###(016)=[passed] Test layer filtering >>> pkt = NetflowHeader()/NetflowHeaderV5()/NetflowRecordV5() >>> >>> conf.layers.filter([NetflowHeader, NetflowHeaderV5]) >>> assert NetflowRecordV5 not in NetflowHeader(bytes(pkt)) >>> >>> conf.ifaces.reload() >>> >>> conf.layers.unfilter() >>> assert NetflowRecordV5 in NetflowHeader(bytes(pkt)) ###(017)=[passed] UTscapy route check Check that UTscapy has correctly replaced the routes. Many tests won't work otherwise >>> p = IP().src >>> p '127.0.0.1' >>> assert p == "127.0.0.1" ###### ## Scapy functions tests ###### ###(018)=[passed] Interface related functions >>> from unittest import mock >>> >>> conf.iface >>> >>> get_if_addr(conf.iface) '192.168.122.12' >>> get_if_hwaddr(conf.iface) '52:54:00:e1:37:0d' >>> >>> bytes_hex(get_if_raw_addr(conf.iface)) b'c0a87a0c' >>> >>> def get_dummy_interface(): ... """Returns a dummy network interface""" ... conf.ifaces._add_fake_iface("dummy0") ... return "dummy0" ... >>> get_if_raw_addr(get_dummy_interface()) b'\x7f\x00\x00\x01' >>> >>> get_if_list() ['lo', 'eth0', 'eth1', 'dummy0'] >>> >>> get_working_if() >>> >>> get_if_raw_addr6(conf.iface) ###(019)=[passed] More Interfaces related functions >>> old = conf.iface >>> conf.iface = conf.iface.name >>> assert conf.iface == old >>> >>> assert isinstance(conf.iface, NetworkInterface) >>> assert conf.iface.is_valid() >>> >>> from unittest import mock >>> @mock.patch("scapy.interfaces.conf.route.routes", []) ... @mock.patch("scapy.interfaces.conf.ifaces.values") ... def _test_get_working_if(rou): ... rou.side_effect = lambda: [] ... assert get_working_if() is None ... >>> assert conf.iface + "a" # left + >>> assert "hey! are you, ready to go ? %s" % conf.iface # format >>> assert "cuz you know the way to go" + conf.iface # right + >>> >>> _test_get_working_if() ###(020)=[passed] Test conf.ifaces >>> conf.iface >>> conf.ifaces Source Index Name MAC IPv4 IPv6 sys 1 lo 00:00:00:00:00:00 127.0.0.1 ::1 sys 2 eth0 52:54:00:e1:37:0d 192.168.122.12 fe80::cefd:fee5:7d08:b_ sys 3 eth1 52:54:00:cf:60:65 2620:52:3:1:dead:beef:_ fe80::d19b:f18c:c8fa:f_ >>> >>> assert conf.iface in conf.ifaces.values() >>> assert conf.ifaces.dev_from_index(conf.iface.index) == conf.iface >>> assert conf.ifaces.dev_from_networkname(conf.iface.network_name) == conf.iface >>> >>> conf.ifaces.data = {'a': NetworkInterface(InterfaceProvider(), {"name": 'a', "network_name": 'a', "description": 'a', "ips": ["127.0.0.1", "::1", "::2", "127.0.0.2"], "mac": 'aa:aa:aa:aa:aa:aa'})} >>> >>> with ContextManagerCaptureOutput() as cmco: ... conf.ifaces.show() ... output = cmco.get_output() ... >>> data = """ ... Source Index Name MAC IPv4 IPv6 ... Unknown 0 a aa:aa:aa:aa:aa:aa 127.0.0.1 ::1 ... 127.0.0.2 ::2 ... """.strip() >>> >>> output = [x.strip() for x in output.strip().split("\n")] >>> data = [x.strip() for x in data.strip().split("\n")] >>> >>> assert output == data >>> >>> conf.ifaces.reload() ###(021)=[passed] Test extcap detection in conf.ifaces >>> import os >>> from scapy.libs.extcap import load_extcap >>> >>> _bkp_extcap = conf.prog.extcap_folders >>> _bkp_providers = conf.ifaces.providers.copy() >>> >>> conf.ifaces.providers.clear() >>> >>> extcapfld = get_temp_dir() >>> extcapprog = os.path.join(extcapfld, "runner.sh") >>> data = """#!/usr/bin/env python3 ... ... import struct ... import argparse ... parser = argparse.ArgumentParser() ... parser.add_argument('--extcap-interfaces', action='store_true') ... parser.add_argument('--capture', action='store_true') ... parser.add_argument('--extcap-config', action='store_true') ... parser.add_argument('--scan-follow-rsp', action='store_true') ... parser.add_argument('--scan-follow-aux', action='store_true') ... parser.add_argument('--extcap-interface', type=str) ... parser.add_argument('--fifo', type=str) ... ... args = parser.parse_args() ... if args.extcap_interfaces: ... # List interfaces ... print(bytes.fromhex("0a657874636170207b76657273696f6e3d342e312e317d7b646973706c61793d6e524620536e696666657220666f7220426c7565746f6f7468204c457d7b68656c703d68747470733a2f2f7777772e6e6f7264696373656d692e636f6d2f536f6674776172652d616e642d546f6f6c732f446576656c6f706d656e742d546f6f6c732f6e52462d536e69666665722d666f722d426c7565746f6f74682d4c457d0a696e74657266616365207b76616c75653d2f6465762f747479555342352d4e6f6e657d7b646973706c61793d6e524620536e696666657220666f7220426c7565746f6f7468204c457d0a636f6e74726f6c207b6e756d6265723d307d7b747970653d73656c6563746f727d7b646973706c61793d4465766963657d7b746f6f6c7469703d446576696365206c6973747d0a636f6e74726f6c207b6e756d6265723d317d7b747970653d73656c6563746f727d7b646973706c61793d4b65797d7b746f6f6c7469703d7d0a636f6e74726f6c207b6e756d6265723d327d7b747970653d737472696e677d7b646973706c61793d56616c75657d7b746f6f6c7469703d3620646967697420706173736b6579206f72203136206f7220333220627974657320656e6372797074696f6e206b657920696e2068657861646563696d616c207374617274696e67207769746820273078272c2062696720656e6469616e20666f726d61742e49662074686520656e7465726564206b65792069732073686f72746572207468616e203136206f722033322062797465732c2069742077696c6c206265207a65726f2d70616464656420696e2066726f6e74277d7b76616c69646174696f6e3d5c625e28285b302d395d7b367d297c2830785b302d39612d66412d465d7b312c36347d297c285b302d39412d46612d665d7b327d5b3a2d5d297b357d285b302d39412d46612d665d7b327d2920287075626c69637c72616e646f6d2929245c627d0a636f6e74726f6c207b6e756d6265723d337d7b747970653d737472696e677d7b646973706c61793d41647620486f707d7b64656661756c743d33372c33382c33397d7b746f6f6c7469703d4164766572746973696e67206368616e6e656c20686f702073657175656e63652e204368616e676520746865206f7264657220696e2077686963682074686520736e6966666572207377697463686573206164766572746973696e67206368616e6e656c732e2056616c6964206368616e6e656c73206172652033372c20333820616e642033392073657061726174656420627920636f6d6d612e7d7b76616c69646174696f6e3d5e5c732a282833377c33387c3339295c732a2c5c732a297b302c327d2833377c33387c3339297b317d5c732a247d7b72657175697265643d747275657d0a636f6e74726f6c207b6e756d6265723d377d7b747970653d627574746f6e7d7b646973706c61793d436c6561727d7b746f6f6c746f703d436c656172206f722072656d6f7665206465766963652066726f6d20446576696365206c6973747d0a636f6e74726f6c207b6e756d6265723d347d7b747970653d627574746f6e7d7b726f6c653d68656c707d7b646973706c61793d48656c707d7b746f6f6c7469703d416363657373207573657220677569646520286c61756e636865732062726f77736572297d0a636f6e74726f6c207b6e756d6265723d357d7b747970653d627574746f6e7d7b726f6c653d726573746f72657d7b646973706c61793d44656661756c74737d7b746f6f6c7469703d52657365747320746865207573657220696e7465726661636520616e6420636c6561727320746865206c6f672066696c657d0a636f6e74726f6c207b6e756d6265723d367d7b747970653d627574746f6e7d7b726f6c653d6c6f676765727d7b646973706c61793d4c6f677d7b746f6f6c7469703d4c6f672070657220696e746572666163657d0a76616c7565207b636f6e74726f6c3d307d7b76616c75653d207d7b646973706c61793d416c6c206164766572746973696e6720646576696365737d7b64656661756c743d747275657d0a76616c7565207b636f6e74726f6c3d307d7b76616c75653d5b30302c30302c30302c30302c30302c30302c305d7d7b646973706c61793d466f6c6c6f772049524b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d307d7b646973706c61793d4c656761637920506173736b65797d7b64656661756c743d747275657d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d317d7b646973706c61793d4c6567616379204f4f4220646174617d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d327d7b646973706c61793d4c6567616379204c544b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d337d7b646973706c61793d5343204c544b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d347d7b646973706c61793d53432050726976617465204b65797d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d357d7b646973706c61793d49524b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d367d7b646973706c61793d416464204c4520616464726573737d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d377d7b646973706c61793d466f6c6c6f77204c4520616464726573737d").decode()) ... elif args.extcap_interface and args.extcap_config: ... # List config ... print(bytes.fromhex("617267207b6e756d6265723d307d7b63616c6c3d2d2d6f6e6c792d6164766572746973696e677d7b646973706c61793d4f6e6c79206164766572746973696e67207061636b6574737d7b746f6f6c7469703d54686520736e69666665722077696c6c206f6e6c792063617074757265206164766572746973696e67207061636b6574732066726f6d207468652073656c6563746564206465766963657d7b747970653d626f6f6c666c61677d7b736176653d747275657d0a617267207b6e756d6265723d317d7b63616c6c3d2d2d6f6e6c792d6c65676163792d6164766572746973696e677d7b646973706c61793d4f6e6c79206c6567616379206164766572746973696e67207061636b6574737d7b746f6f6c7469703d54686520736e69666665722077696c6c206f6e6c792063617074757265206c6567616379206164766572746973696e67207061636b6574732066726f6d207468652073656c6563746564206465766963657d7b747970653d626f6f6c666c61677d7b736176653d747275657d0a617267207b6e756d6265723d327d7b63616c6c3d2d2d7363616e2d666f6c6c6f772d7273707d7b646973706c61793d46696e64207363616e20726573706f6e736520646174617d7b746f6f6c7469703d54686520736e69666665722077696c6c20666f6c6c6f77207363616e20726571756573747320616e64207363616e20726573706f6e73657320696e207363616e206d6f64657d7b747970653d626f6f6c666c61677d7b64656661756c743d747275657d7b736176653d747275657d0a617267207b6e756d6265723d337d7b63616c6c3d2d2d7363616e2d666f6c6c6f772d6175787d7b646973706c61793d46696e6420617578696c6961727920706f696e74657220646174617d7b746f6f6c7469703d54686520736e69666665722077696c6c20666f6c6c6f772061757820706f696e7465727320696e207363616e206d6f64657d7b747970653d626f6f6c666c61677d7b64656661756c743d747275657d7b736176653d747275657d0a617267207b6e756d6265723d337d7b63616c6c3d2d2d636f6465647d7b646973706c61793d5363616e20616e6420666f6c6c6f772064657669636573206f6e204c4520436f646564205048597d7b746f6f6c7469703d5363616e20666f72206465766963657320616e6420666f6c6c6f772061647665727469736572206f6e204c4520436f646564205048597d7b747970653d626f6f6c666c61677d7b64656661756c743d66616c73657d7b736176653d747275657d").decode()) ... elif args.capture and args.extcap_interface and args.fifo: ... # Capture ... pkts = [ ... bytes.fromhex("ffffffffffff00000000000008004500001c0001000040117cce7f0000017f0000010035003500080172") ... ] ... with open(args.fifo, "wb", 0) as fd: ... # header ... fd.write( ... struct.pack( ... "IHHIIII", ... 0xa1b2c3d4, ... 2, 4, 0, 0, 65535, 1 ... ) ... ) ... for pkt in pkts: ... fd.write(struct.pack("IIII", 0, 0, len(pkt), len(pkt))) ... fd.write(bytes(pkt)) ... else: ... raise ValueError("Bad arguments") ... """.strip() >>> with open(extcapprog, "w") as fd: ... fd.write(data) ... 7105 >>> print(data) #!/usr/bin/env python3 import struct import argparse parser = argparse.ArgumentParser() parser.add_argument('--extcap-interfaces', action='store_true') parser.add_argument('--capture', action='store_true') parser.add_argument('--extcap-config', action='store_true') parser.add_argument('--scan-follow-rsp', action='store_true') parser.add_argument('--scan-follow-aux', action='store_true') parser.add_argument('--extcap-interface', type=str) parser.add_argument('--fifo', type=str) args = parser.parse_args() if args.extcap_interfaces: # List interfaces print(bytes.fromhex("0a657874636170207b76657273696f6e3d342e312e317d7b646973706c61793d6e524620536e696666657220666f7220426c7565746f6f7468204c457d7b68656c703d68747470733a2f2f7777772e6e6f7264696373656d692e636f6d2f536f6674776172652d616e642d546f6f6c732f446576656c6f706d656e742d546f6f6c732f6e52462d536e69666665722d666f722d426c7565746f6f74682d4c457d0a696e74657266616365207b76616c75653d2f6465762f747479555342352d4e6f6e657d7b646973706c61793d6e524620536e696666657220666f7220426c7565746f6f7468204c457d0a636f6e74726f6c207b6e756d6265723d307d7b747970653d73656c6563746f727d7b646973706c61793d4465766963657d7b746f6f6c7469703d446576696365206c6973747d0a636f6e74726f6c207b6e756d6265723d317d7b747970653d73656c6563746f727d7b646973706c61793d4b65797d7b746f6f6c7469703d7d0a636f6e74726f6c207b6e756d6265723d327d7b747970653d737472696e677d7b646973706c61793d56616c75657d7b746f6f6c7469703d3620646967697420706173736b6579206f72203136206f7220333220627974657320656e6372797074696f6e206b657920696e2068657861646563696d616c207374617274696e67207769746820273078272c2062696720656e6469616e20666f726d61742e49662074686520656e7465726564206b65792069732073686f72746572207468616e203136206f722033322062797465732c2069742077696c6c206265207a65726f2d70616464656420696e2066726f6e74277d7b76616c69646174696f6e3d5c625e28285b302d395d7b367d297c2830785b302d39612d66412d465d7b312c36347d297c285b302d39412d46612d665d7b327d5b3a2d5d297b357d285b302d39412d46612d665d7b327d2920287075626c69637c72616e646f6d2929245c627d0a636f6e74726f6c207b6e756d6265723d337d7b747970653d737472696e677d7b646973706c61793d41647620486f707d7b64656661756c743d33372c33382c33397d7b746f6f6c7469703d4164766572746973696e67206368616e6e656c20686f702073657175656e63652e204368616e676520746865206f7264657220696e2077686963682074686520736e6966666572207377697463686573206164766572746973696e67206368616e6e656c732e2056616c6964206368616e6e656c73206172652033372c20333820616e642033392073657061726174656420627920636f6d6d612e7d7b76616c69646174696f6e3d5e5c732a282833377c33387c3339295c732a2c5c732a297b302c327d2833377c33387c3339297b317d5c732a247d7b72657175697265643d747275657d0a636f6e74726f6c207b6e756d6265723d377d7b747970653d627574746f6e7d7b646973706c61793d436c6561727d7b746f6f6c746f703d436c656172206f722072656d6f7665206465766963652066726f6d20446576696365206c6973747d0a636f6e74726f6c207b6e756d6265723d347d7b747970653d627574746f6e7d7b726f6c653d68656c707d7b646973706c61793d48656c707d7b746f6f6c7469703d416363657373207573657220677569646520286c61756e636865732062726f77736572297d0a636f6e74726f6c207b6e756d6265723d357d7b747970653d627574746f6e7d7b726f6c653d726573746f72657d7b646973706c61793d44656661756c74737d7b746f6f6c7469703d52657365747320746865207573657220696e7465726661636520616e6420636c6561727320746865206c6f672066696c657d0a636f6e74726f6c207b6e756d6265723d367d7b747970653d627574746f6e7d7b726f6c653d6c6f676765727d7b646973706c61793d4c6f677d7b746f6f6c7469703d4c6f672070657220696e746572666163657d0a76616c7565207b636f6e74726f6c3d307d7b76616c75653d207d7b646973706c61793d416c6c206164766572746973696e6720646576696365737d7b64656661756c743d747275657d0a76616c7565207b636f6e74726f6c3d307d7b76616c75653d5b30302c30302c30302c30302c30302c30302c305d7d7b646973706c61793d466f6c6c6f772049524b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d307d7b646973706c61793d4c656761637920506173736b65797d7b64656661756c743d747275657d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d317d7b646973706c61793d4c6567616379204f4f4220646174617d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d327d7b646973706c61793d4c6567616379204c544b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d337d7b646973706c61793d5343204c544b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d347d7b646973706c61793d53432050726976617465204b65797d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d357d7b646973706c61793d49524b7d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d367d7b646973706c61793d416464204c4520616464726573737d0a76616c7565207b636f6e74726f6c3d317d7b76616c75653d377d7b646973706c61793d466f6c6c6f77204c4520616464726573737d").decode()) elif args.extcap_interface and args.extcap_config: # List config print(bytes.fromhex("617267207b6e756d6265723d307d7b63616c6c3d2d2d6f6e6c792d6164766572746973696e677d7b646973706c61793d4f6e6c79206164766572746973696e67207061636b6574737d7b746f6f6c7469703d54686520736e69666665722077696c6c206f6e6c792063617074757265206164766572746973696e67207061636b6574732066726f6d207468652073656c6563746564206465766963657d7b747970653d626f6f6c666c61677d7b736176653d747275657d0a617267207b6e756d6265723d317d7b63616c6c3d2d2d6f6e6c792d6c65676163792d6164766572746973696e677d7b646973706c61793d4f6e6c79206c6567616379206164766572746973696e67207061636b6574737d7b746f6f6c7469703d54686520736e69666665722077696c6c206f6e6c792063617074757265206c6567616379206164766572746973696e67207061636b6574732066726f6d207468652073656c6563746564206465766963657d7b747970653d626f6f6c666c61677d7b736176653d747275657d0a617267207b6e756d6265723d327d7b63616c6c3d2d2d7363616e2d666f6c6c6f772d7273707d7b646973706c61793d46696e64207363616e20726573706f6e736520646174617d7b746f6f6c7469703d54686520736e69666665722077696c6c20666f6c6c6f77207363616e20726571756573747320616e64207363616e20726573706f6e73657320696e207363616e206d6f64657d7b747970653d626f6f6c666c61677d7b64656661756c743d747275657d7b736176653d747275657d0a617267207b6e756d6265723d337d7b63616c6c3d2d2d7363616e2d666f6c6c6f772d6175787d7b646973706c61793d46696e6420617578696c6961727920706f696e74657220646174617d7b746f6f6c7469703d54686520736e69666665722077696c6c20666f6c6c6f772061757820706f696e7465727320696e207363616e206d6f64657d7b747970653d626f6f6c666c61677d7b64656661756c743d747275657d7b736176653d747275657d0a617267207b6e756d6265723d337d7b63616c6c3d2d2d636f6465647d7b646973706c61793d5363616e20616e6420666f6c6c6f772064657669636573206f6e204c4520436f646564205048597d7b746f6f6c7469703d5363616e20666f72206465766963657320616e6420666f6c6c6f772061647665727469736572206f6e204c4520436f646564205048597d7b747970653d626f6f6c666c61677d7b64656661756c743d66616c73657d7b736176653d747275657d").decode()) elif args.capture and args.extcap_interface and args.fifo: # Capture pkts = [ bytes.fromhex("ffffffffffff00000000000008004500001c0001000040117cce7f0000017f0000010035003500080172") ] with open(args.fifo, "wb", 0) as fd: # header fd.write( struct.pack( "IHHIIII", 0xa1b2c3d4, 2, 4, 0, 0, 65535, 1 ) ) for pkt in pkts: fd.write(struct.pack("IIII", 0, 0, len(pkt), len(pkt))) fd.write(bytes(pkt)) else: raise ValueError("Bad arguments") >>> >>> os.chmod(extcapprog, 0o777) >>> >>> conf.prog.extcap_folders = [extcapfld] >>> load_extcap() >>> print(conf.ifaces.providers) {functools.partial(._prov'>, cmdprog='/tmp/scapyxpkt8i80/runner.sh'): } >>> conf.ifaces.reload() >>> >>> iface = conf.ifaces.dev_from_networkname('/dev/ttyUSB5-None') >>> assert iface.name == "nRF Sniffer for Bluetooth LE" >>> sock = iface.l2listen()(iface=iface) >>> pkts = sock.sniff(timeout=2) >>> sock.close() >>> assert UDP in pkts[0] >>> >>> config = iface.get_extcap_config() >>> assert config["arg"] == [ ... ('0', '--only-advertising', 'Only advertising packets', '', ''), ... ('1', '--only-legacy-advertising', 'Only legacy advertising packets', '', ''), ... ('2', '--scan-follow-rsp', 'Find scan response data', 'true', ''), ... ('3', '--scan-follow-aux', 'Find auxiliary pointer data', 'true', ''), ... ('3', '--coded', 'Scan and follow devices on LE Coded PHY', 'false', '') ... ] >>> >>> conf.prog.extcap_folders = _bkp_extcap >>> conf.ifaces.providers = _bkp_providers >>> conf.ifaces.reload() ###(022)=[passed] Test read_routes6() - default output >>> routes6 = read_routes6() >>> if WINDOWS: ... from scapy.arch.windows import _route_add_loopback ... _route_add_loopback(routes6, True) ... >>> routes6 [('::1', 128, '::', 'lo', ['::1'], 0), ('2620:52:3:1:dead:beef:cafe:c157', 128, '::', 'eth1', ['2620:52:3:1:dead:beef:cafe:c157'], 0), ('fe80::cefd:fee5:7d08:b5ac', 128, '::', 'eth0', ['fe80::cefd:fee5:7d08:b5ac'], 0), ('fe80::d19b:f18c:c8fa:f316', 128, '::', 'eth1', ['fe80::d19b:f18c:c8fa:f316'], 0), ('2620:52:3:1:dead:beef:cafe:c157', 128, '::', 'eth1', ['2620:52:3:1:dead:beef:cafe:c157'], 101), ('2620:52:3:1:ffff:ffff:ffff:fffe', 128, '::', 'eth1', ['2620:52:3:1:dead:beef:cafe:c157'], 101), ('fe80::', 64, '::', 'eth0', ['fe80::cefd:fee5:7d08:b5ac'], 1024), ('fe80::', 64, '::', 'eth1', ['fe80::d19b:f18c:c8fa:f316'], 1024), ('::', 0, '2620:52:3:1:ffff:ffff:ffff:fffe', 'eth1', ['2620:52:3:1:dead:beef:cafe:c157'], 101), ('ff00::', 8, '::', 'eth0', ['fe80::cefd:fee5:7d08:b5ac'], 250), ('ff00::', 8, '::', 'eth1', ['2620:52:3:1:dead:beef:cafe:c157', 'fe80::d19b:f18c:c8fa:f316'], 250)] >>> >>> >>> if routes6: ... iflist = get_if_list() ... if WINDOWS: ... from scapy.arch.windows import _route_add_loopback ... _route_add_loopback(ipv6=True, iflist=iflist) ... if OPENBSD: ... len(routes6) >= 2 ... elif iflist == [conf.loopback_name]: ... len(routes6) == 1 ... elif len(iflist) >= 2: ... len(routes6) >= 1 ... else: ... False ... else: ... # IPv6 seems disabled. Force a route to ::1 ... conf.route6.routes.append(("::1", 128, "::", conf.loopback_name, ["::1"], 1)) ... conf.route6.ipv6_ifaces = set([conf.loopback_name]) ... True ... True ###(025)=[passed] Test read_routes6() - check mandatory routes >>> import re >>> ll_route = re.compile(r"fe80:\d{0,2}:") >>> >>> conf.route6 Destination Next Hop Iface Src candidates Metric ::/0 2620:52:3:1:ffff:ff_ eth1 2620:52:3:1:dead:be_ 101 ::1/128 :: lo ::1 0 2620:52:3:1:dead:be_ :: eth1 2620:52:3:1:dead:be_ 0 fe80::cefd:fee5:7d0_ :: eth0 fe80::cefd:fee5:7d0_ 0 fe80::d19b:f18c:c8f_ :: eth1 fe80::d19b:f18c:c8f_ 0 2620:52:3:1:dead:be_ :: eth1 2620:52:3:1:dead:be_ 101 2620:52:3:1:ffff:ff_ :: eth1 2620:52:3:1:dead:be_ 101 fe80::/64 :: eth0 fe80::cefd:fee5:7d0_ 1024 fe80::/64 :: eth1 fe80::d19b:f18c:c8f_ 1024 ff00::/8 :: eth0 fe80::cefd:fee5:7d0_ 250 ff00::/8 :: eth1 2620:52:3:1:dead:be_ 250 fe80::d19b:f18c:c8f_ >>> >>> if len(routes6) > 2 and not WINDOWS: ... # Identify routes to fe80::/64 ... assert sum(1 for r in routes6 if r[0] == "::1" and r[4] == ["::1"]) >= 1 ... if len(iflist) >= 2: ... assert sum(1 for r in routes6 if ll_route.match(r[0]) and r[1] == 64) >= 1 ... try: ... # Identify a route to a node IPv6 link-local address ... assert sum(1 for r in routes6 if in6_islladdr(r[0]) and r[1] == 128) >= 1 ... except: ... # IPv6 is not available, but we still check the loopback ... assert conf.route6.route("::/0") == (conf.loopback_name, "::", "::") ... assert sum(1 for r in routes6 if r[1] == 128 and r[4] == ["::1"]) >= 1 ... else: ... True ... ###(026)=[passed] Test ifchange() >>> conf.route6.ifchange(conf.loopback_name, "::1/128") >>> if WINDOWS: ... conf.netcache.in6_neighbor["::1"] = "ff:ff:ff:ff:ff:ff" # Restore fake cache ... >>> True True ###(027)=[passed] Packet.route() >>> assert (Ether() / ARP()).route()[0] is not None >>> assert (Ether() / ARP()).payload.route()[0] is not None >>> assert (ARP(ptype=0, pdst="hello. this isn't a valid IP")).route()[0] is None ###(028)=[passed] utils/in4_is* >>> assert in4_ismaddr("224.0.0.1") >>> assert not in4_ismaddr("192.168.0.1") >>> assert in4_ismaddr("239.0.0.255") >>> >>> assert in4_ismlladdr("224.0.0.1") >>> assert in4_ismlladdr("224.0.0.255") >>> assert not in4_ismlladdr("224.0.1.255") >>> >>> assert in4_ismgladdr("235.0.0.1") >>> assert not in4_ismgladdr("224.0.0.1") >>> assert not in4_ismgladdr("239.0.0.1") >>> >>> assert in4_ismlsaddr("239.0.0.1") >>> assert not in4_ismlsaddr("224.0.0.1") >>> >>> assert in4_isaddrllallnodes("224.0.0.1") >>> assert not in4_isaddrllallnodes("224.0.0.3") >>> >>> assert in4_getnsmac(b'\xe0\x00\x00\x01') == '01:00:5e:00:00:01' >>> assert getmacbyip("224.0.0.1") == '01:00:5e:00:00:01' ###(029)=[passed] plain_str test >>> data = b"\xffsweet\xef celestia\xab" >>> assert plain_str(data) == "\\xffsweet\\xef celestia\\xab" ###### ## compat.py ###### ###(030)=[passed] test bytes_hex/hex_bytes >>> monty_data = b"Stop! Who approaches the Bridge of Death must answer me these questions three, 'ere the other side he see." >>> hex_data = bytes_hex(monty_data) >>> assert hex_data == b'53746f70212057686f20617070726f61636865732074686520427269646765206f66204465617468206d75737420616e73776572206d65207468657365207175657374696f6e732074687265652c202765726520746865206f746865722073696465206865207365652e' >>> assert hex_bytes(hex_data) == monty_data ###(031)=[passed] orb/chb >>> assert orb(b"\x01"[0]) == 1 >>> assert chb(1) == b"\x01" ###### ## Main.py tests ###### ###(032)=[passed] Pickle and unpickle a packet >>> import pickle >>> >>> a = IP(dst="192.168.0.1")/UDP() >>> >>> b = pickle.dumps(a) >>> c = pickle.loads(b) >>> >>> assert c[IP].dst == "192.168.0.1" >>> assert raw(c) == raw(a) ###(033)=[passed] Usage test >>> from scapy.main import _usage >>> try: ... _usage() ... assert False ... except SystemExit: ... assert True ... Usage: scapy.py [-s sessionfile] [-c new_startup_file] [-p new_prestart_file] [-C] [-P] [-H] Args: -H: header-less start -C: do not read startup file -P: do not read pre-startup file ###(034)=[passed] Session test >>> import builtins >>> >>> def get_var(var): ... return builtins.__dict__["scapy_session"][var] ... >>> def set_var(var, value): ... builtins.__dict__["scapy_session"][var] = value ... >>> def del_var(var): ... del builtins.__dict__["scapy_session"][var] ... >>> init_session(None, {"init_value": 123}) >>> set_var("test_value", "8.8.8.8") # test_value = "8.8.8.8" >>> save_session() Saving session into [/tmp/scapyn6n8v77u] >>> del_var("test_value") >>> load_session() >>> update_session() >>> assert get_var("test_value") == "8.8.8.8" #test_value == "8.8.8.8" >>> assert get_var("init_value") == 123 ###(035)=[passed] Session test with fname >>> session_name = tempfile.mktemp() >>> init_session(session_name) >>> set_var("test_value", IP(dst="192.168.0.1")) # test_value = IP(dst="192.168.0.1") >>> save_session(fname="%s.dat" % session_name) Saving session into [/tmp/tmpt1fa72mu.dat] >>> del_var("test_value") >>> >>> set_var("z", True) #z = True >>> load_session(fname="%s.dat" % session_name) >>> try: ... get_var("z") ... assert False ... except: ... pass ... >>> set_var("z", False) #z = False >>> update_session(fname="%s.dat" % session_name) >>> assert get_var("test_value").dst == "192.168.0.1" #test_value.dst == "192.168.0.1" >>> assert not get_var("z") ###(036)=[passed] Clear session files >>> os.remove("%s.dat" % session_name) ###(038)=[passed] Emulate interact() >>> import sys >>> from unittest import mock >>> from scapy.main import interact >>> >>> from scapy.main import DEFAULT_PRESTART_FILE, DEFAULT_PRESTART, _read_config_file >>> _read_config_file(DEFAULT_PRESTART_FILE, _locals=globals(), default=DEFAULT_PRESTART) >>> with open(DEFAULT_PRESTART_FILE, "r") as fd: ... OLD_DEFAULT_PRESTART = fd.read() ... >>> with open(DEFAULT_PRESTART_FILE, "w+") as fd: ... fd.write("conf.interactive_shell = 'ipython'") ... 34 >>> try: ... import IPython ... except: ... code_interact_import = "scapy.main.code.interact" ... else: ... code_interact_import = "IPython.embed" ... >>> @mock.patch(code_interact_import) ... def interact_emulator(code_int, extra_args=[]): ... try: ... code_int.side_effect = lambda *args, **kwargs: lambda *args, **kwargs: None ... interact(argv=["-s scapy1"] + extra_args, mybanner="What a test") ... finally: ... sys.ps1 = ">>> " ... >>> interact_emulator() # Default Saving session into [/tmp/tmpt1fa72mu] >>> >>> try: ... interact_emulator(extra_args=["-?"]) # Failing ... assert False ... except: ... pass ... option -? not recognized >>> interact_emulator(extra_args=["-d"]) # Extended option -d requires argument ###(039)=[passed] Emulate interact() and test startup.py with ptpython >>> import sys >>> from unittest import mock >>> >>> from scapy.main import DEFAULT_PRESTART_FILE, DEFAULT_PRESTART, _read_config_file >>> _read_config_file(DEFAULT_PRESTART_FILE, _locals=globals(), default=DEFAULT_PRESTART) >>> with open(DEFAULT_PRESTART_FILE, "w+") as fd: ... fd.write("conf.interactive_shell = 'ptpython'") ... 35 >>> called = [] >>> def checker(*args, **kwargs): ... locals = kwargs.pop("locals") ... assert locals["IP"] ... history_filename = kwargs.pop("history_filename") ... assert history_filename == conf.histfile ... called.append(True) ... >>> ptpython_mocked_module = Bunch( ... repl=Bunch( ... embed=checker ... ) ... ) >>> >>> modules_patched = { ... "ptpython": ptpython_mocked_module, ... "ptpython.repl": ptpython_mocked_module.repl, ... "ptpython.repl.embed": ptpython_mocked_module.repl.embed, ... } >>> >>> with mock.patch.dict("sys.modules", modules_patched): ... try: ... interact() ... finally: ... sys.ps1 = ">>> " ... ptpython support is currently partially broken aSPY//YASa apyyyyCY//////////YCa | sY//////YSpcs scpCY//Pp | Welcome to Scapy ayp ayyyyyyySCP//Pp syY//C | Version 2.5.0.dev586 AYAsAYYYYYYYY///Ps cY//S | pCCCCY//p cSSps y//Y | https://github.com/secdev/scapy SPPPP///a pP///AC//Y | A//A cyP////C | Have fun! p///Ac sC///a | P////YCpc A//A | Wanna support scapy? Star us on scccccp///pSP///p p//Y | GitHub! sY/////////y caa S//P | -- Satoshi Nakamoto cayCyayP//Ya pY/Ya | sY/PsY////YCc aC//Yp sc sccaCY//PCypaapyCP//YSs spCPY//////YPSps ccaacs using ptpython Saving session into [/tmp/tmpt1fa72mu] >>> with open(DEFAULT_PRESTART_FILE, "w") as fd: ... print(OLD_DEFAULT_PRESTART) ... r = fd.write(OLD_DEFAULT_PRESTART) ... # Scapy CLI 'pre-start' config file # see https://scapy.readthedocs.io/en/latest/api/scapy.config.html#scapy.config.Conf # for all available options # default interpreter conf.interactive_shell = "auto" # color theme (DefaultTheme, BrightTheme, ColorOnBlackTheme, BlackAndWhite, ...) conf.color_theme = DefaultTheme() # disable INFO: tags related to dependencies missing # log_loading.setLevel(logging.WARNING) # force-use libpcap # conf.use_pcap = True >>> assert called ###(040)=[passed] Test explore() with GUI mode >>> from unittest import mock >>> >>> def test_explore_gui(is_layer, layer): ... prompt_toolkit_mocked_module = Bunch( ... shortcuts=Bunch( ... dialogs=Bunch( ... radiolist_dialog=(lambda *args, **kargs: layer), ... button_dialog=(lambda *args, **kargs: "layers" if is_layer else "contribs") ... ) ... ), ... formatted_text=Bunch(HTML=lambda x: x), ... __version__="2.0.0" ... ) ... # a mock.patch isn't enough to mock a module. Let's roll sys.modules ... modules_patched = { ... "prompt_toolkit": prompt_toolkit_mocked_module, ... "prompt_toolkit.shortcuts": prompt_toolkit_mocked_module.shortcuts, ... "prompt_toolkit.shortcuts.dialogs": prompt_toolkit_mocked_module.shortcuts.dialogs, ... "prompt_toolkit.formatted_text": prompt_toolkit_mocked_module.formatted_text, ... } ... with mock.patch.dict("sys.modules", modules_patched): ... with ContextManagerCaptureOutput() as cmco: ... explore() ... result_explore = cmco.get_output() ... return result_explore ... >>> conf.interactive = True >>> explore_dns = test_explore_gui(True, "scapy.layers.dns") >>> assert "DNS" in explore_dns >>> assert "DNS Question Record" in explore_dns >>> assert "DNSRRNSEC3" in explore_dns >>> assert "DNS TSIG Resource Record" in explore_dns >>> >>> explore_avs = test_explore_gui(False, "avs") >>> assert "AVSWLANHeader" in explore_avs >>> assert "AVS WLAN Monitor Header" in explore_avs ###(041)=[passed] Test explore() with non-GUI mode >>> def test_explore_non_gui(layer): ... with ContextManagerCaptureOutput() as cmco: ... explore(layer) ... result_explore = cmco.get_output() ... return result_explore ... >>> explore_dns = test_explore_non_gui("scapy.layers.dns") >>> assert "DNS" in explore_dns >>> assert "DNS Question Record" in explore_dns >>> assert "DNSRRNSEC3" in explore_dns >>> assert "DNS TSIG Resource Record" in explore_dns >>> >>> explore_avs = test_explore_non_gui("avs") >>> assert "AVSWLANHeader" in explore_avs >>> assert "AVS WLAN Monitor Header" in explore_avs >>> >>> assert test_explore_non_gui("scapy.layers.dns") == test_explore_non_gui("dns") >>> assert test_explore_non_gui("scapy.contrib.avs") == test_explore_non_gui("avs") >>> >>> try: ... explore("unknown_module") ... assert False # The previous should have raised an exception ... except Scapy_Exception: ... pass ... Loading module scapy.layers.unknown_module Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/main.py", line 305, in load_contrib importlib.import_module("scapy.contrib." + name) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 1398, in _gcd_import File "", line 1371, in _find_and_load File "", line 1335, in _find_and_load_unlocked ModuleNotFoundError: No module named 'scapy.contrib.unknown_module' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/main.py", line 257, in _load mod = importlib.import_module(module) File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 1398, in _gcd_import File "", line 1371, in _find_and_load File "", line 1335, in _find_and_load_unlocked ModuleNotFoundError: No module named 'scapy.layers.unknown_module' ###(042)=[passed] Test load_contrib overwrite >>> load_contrib("gtp") >>> assert GTPHeader.__module__ == "scapy.contrib.gtp" >>> >>> load_contrib("gtp_v2") >>> assert GTPHeader.__module__ == "scapy.contrib.gtp_v2" >>> >>> load_contrib("gtp") >>> assert GTPHeader.__module__ == "scapy.contrib.gtp" ###(043)=[passed] Test load_contrib failure >>> try: ... load_contrib("doesnotexist") ... assert False ... except: ... pass ... Loading module scapy.layers.doesnotexist Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/main.py", line 305, in load_contrib importlib.import_module("scapy.contrib." + name) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 1398, in _gcd_import File "", line 1371, in _find_and_load File "", line 1335, in _find_and_load_unlocked ModuleNotFoundError: No module named 'scapy.contrib.doesnotexist' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/main.py", line 257, in _load mod = importlib.import_module(module) File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 1398, in _gcd_import File "", line 1371, in _find_and_load File "", line 1335, in _find_and_load_unlocked ModuleNotFoundError: No module named 'scapy.layers.doesnotexist' ###(044)=[passed] Test sane function >>> sane("A\x00\xFFB") == "A..B" True ###(045)=[passed] Test lhex function >>> assert lhex(42) == "0x2a" >>> assert lhex((28,7)) == "(0x1c, 0x7)" >>> assert lhex([28,7]) == "[0x1c, 0x7]" ###(046)=[passed] Test restart function >>> from unittest import mock >>> conf.interactive = True >>> >>> try: ... from scapy.utils import restart ... import os ... @mock.patch("os.execv") ... @mock.patch("subprocess.call") ... @mock.patch("os._exit") ... def _test(e, m, m2): ... def check(x, y=[]): ... z = [x] + y if not isinstance(x, list) else x + y ... assert os.path.isfile(z[0]) ... assert os.path.isfile(z[1]) ... return 0 ... m2.side_effect = check ... m.side_effect = check ... e.side_effect = lambda x: None ... restart() ... _test() ... finally: ... conf.interactive = False ... ###(047)=[passed] Test linehexdump function >>> conf_color_theme = conf.color_theme >>> conf.color_theme = BlackAndWhite() >>> assert linehexdump(Ether(src="00:01:02:03:04:05"), dump=True) == 'FF FF FF FF FF FF 00 01 02 03 04 05 90 00 ..............' MAC address to reach destination not found. Using broadcast. >>> conf.color_theme = conf_color_theme ###(048)=[passed] Test chexdump function >>> chexdump(Ether(src="00:01:02:02:04:05"), dump=True) == "0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x02, 0x04, 0x05, 0x90, 0x00" MAC address to reach destination not found. Using broadcast. True ###(049)=[passed] Test repr_hex function >>> repr_hex("scapy") == "7363617079" True ###(050)=[passed] Test hexstr function >>> hexstr(b"A\x00\xFFB") == "41 00 FF 42 A..B" True ###(051)=[passed] Test fletcher16 functions >>> assert fletcher16_checksum(b"\x28\x07") == 22319 >>> assert fletcher16_checkbytes(b"\x28\x07", 1) == b"\xaf(" ###(052)=[passed] Test hexdiff function >>> def test_hexdiff(a, b, algo=None, autojunk=False): ... conf_color_theme = conf.color_theme ... conf.color_theme = BlackAndWhite() ... with ContextManagerCaptureOutput() as cmco: ... hexdiff(a, b, algo=algo, autojunk=autojunk) ... result_hexdiff = cmco.get_output() ... conf.interactive = True ... conf.color_theme = conf_color_theme ... return result_hexdiff ... >>> >>> result_hexdiff = test_hexdiff("abcde", "abCde") >>> expected = "0000 61 62 63 64 65 abcde\n" >>> expected += " 0000 61 62 43 64 65 abCde\n" >>> assert result_hexdiff == expected >>> >>> >>> result_hexdiff = test_hexdiff("add_common_", "_common_removed") >>> expected = "0000 61 64 64 5F 63 6F 6D 6D 6F 6E 5F add_common_ \n" >>> expected += " -003 5F 63 6F 6D 6D 6F 6E 5F 72 65 6D 6F 76 _common_remov\n" >>> expected += " 000d 65 64 ed\n" >>> assert result_hexdiff == expected >>> >>> >>> result_hexdiff = test_hexdiff(IP(dst="127.0.0.1", src="127.0.0.1"), IP(dst="127.0.0.2", src="127.0.0.1")) >>> expected = "0000 45 00 00 14 00 01 00 00 40 00 7C E7 7F 00 00 01 E.......@.|.....\n" >>> expected += " 0000 45 00 00 14 00 01 00 00 40 00 7C E6 7F 00 00 01 E.......@.|.....\n" >>> expected += "0010 7F 00 00 01 ....\n" >>> expected += " 0010 7F 00 00 02 ....\n" >>> assert result_hexdiff == expected >>> >>> >>> a = "A" * 1000 + "findme" + "B" * 1000 >>> b = "A" * 1000 + "B" * 1000 >>> ret1 = test_hexdiff(a, b, algo="difflib") >>> ret2 = test_hexdiff(a, b, algo="difflib", autojunk=True) >>> >>> expected_ret1 = """ ... 03d0 03d0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA ... 03e0 41 41 41 41 41 41 41 41 66 69 6E 64 6D 65 42 42 AAAAAAAAfindmeBB ... 03e0 41 41 41 41 41 41 41 41 42 42 AAAAAAAA BB ... 03ea 03ea 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB ... """ >>> expected_ret2 = """ ... 03d0 03d0 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA ... 03e0 41 41 41 41 41 41 41 41 66 69 6E 64 6D 65 42 42 AAAAAAAAfindmeBB ... 03e0 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 AAAAAAAABBBBBBBB ... 03f0 03f0 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB ... """ >>> >>> assert ret1 != ret2 >>> assert expected_ret1 in ret1 >>> assert expected_ret2 in ret2 >>> >>> >>> hexdiff(b"abc", IP() / TCP()) 0000 61 62 63 abc 0000 45 00 00 28 00 01 00 00 40 06 7C CD 7F 00 00 01 E..(....@.|..... 0010 7F 00 00 01 00 14 00 50 00 00 00 00 00 00 00 00 .......P........ 0020 50 02 20 00 91 7C 00 00 P. ..|.. >>> hexdiff(IP() / TCP(), b"abc") 0000 45 00 00 28 00 01 00 00 40 06 7C CD 7F 00 00 01 E..(....@.|..... 0000 61 62 ab 0002 7F 00 00 01 00 14 00 50 00 00 00 00 00 00 00 00 .......P........ 0002 50 02 20 00 91 7C 00 00 P. ..|.. -005 63 c ###(053)=[passed] Test mysummary functions - Ether >>> p = Ether(dst="ff:ff:ff:ff:ff:ff", src="ff:ff:ff:ff:ff:ff", type=0x9000) >>> p >>> assert p.mysummary() in ['ff:ff:ff:ff:ff:ff > ff:ff:ff:ff:ff:ff (%s)' % loop ... for loop in ['0x9000', 'LOOP']] ###(054)=[passed] Test zerofree_randstring function >>> random.seed(0x2807) >>> zerofree_randstring(4) in [b"\xd2\x12\xe4\x5b", b'\xd3\x8b\x13\x12'] True ###(055)=[passed] Test strand function >>> assert strand(b"AC", b"BC") == b'@C' ###(056)=[passed] Test export_object and import_object functions >>> from unittest import mock >>> def test_export_import_object(): ... with ContextManagerCaptureOutput() as cmco: ... export_object(2807) ... result_export_object = cmco.get_output(eval_bytes=True) ... assert result_export_object.startswith("eNprYPL9zqUHAAdrAf8=") ... assert import_object(result_export_object) == 2807 ... >>> test_export_import_object() ###(057)=[passed] Test tex_escape function >>> tex_escape("$#_") == "\\$\\#\\_" True ###(058)=[passed] Test colgen function >>> f = colgen(range(3)) >>> assert len([next(f) for i in range(2)]) == 2 ###(059)=[passed] Test incremental_label function >>> f = incremental_label() >>> assert [next(f) for i in range(2)] == ["tag00000", "tag00001"] ###(060)=[passed] Test corrupt_* functions >>> import random >>> random.seed(0x2807) >>> assert corrupt_bytes("ABCDE") in [b"ABCDW", b"ABCDX"] >>> assert sane(corrupt_bytes("ABCDE", n=3)) in ["A.8D4", ".2.DE"] >>> >>> assert corrupt_bits("ABCDE") in [b"EBCDE", b"ABCDG"] >>> assert sane(corrupt_bits("ABCDE", n=3)) in ["AF.EE", "QB.TE"] ###(061)=[passed] Test save_object and load_object functions >>> import tempfile >>> fd, fname = tempfile.mkstemp() >>> save_object(fname, 2807) >>> assert load_object(fname) == 2807 ###(062)=[passed] Test whois function >>> if not WINDOWS: ... result = whois("193.0.6.139") ... assert b"inetnum" in result and b"Amsterdam" in result ... ###(063)=[passed] Test manuf DB methods >>> assert conf.manufdb._resolve_MAC("00:00:0F:01:02:03") == "Next:01:02:03" >>> assert conf.manufdb._get_short_manuf("00:00:0F:01:02:03") == "Next" >>> assert in6_addrtovendor("fe80::0200:0fff:fe01:0203").lower().startswith("next") >>> >>> assert conf.manufdb.lookup("00:00:0F:01:02:03") == ('Next', 'Next, Inc.') >>> assert "00:00:0F" in conf.manufdb.reverse_lookup("Next") ###(064)=[passed] Test multiple wireshark's manuf formats >>> new_format = """ ... 00:00:00 JokyIsland Joky Insland Corp SA ... 00:01:12 SecdevCorp Secdev Corporation SA LLC ... EE:05:01 Scapy Scapy CO LTD & CIE ... FF:00:11 NoName ... """ >>> old_format = """ ... 00:00:00 JokyIsland # Joky Insland Corp SA ... 00:01:12 SecdevCorp # Secdev Corporation SA LLC ... EE:05:01 Scapy # Scapy CO LTD & CIE ... FF:00:11 NoName ... """ >>> >>> manuf1 = get_temp_file() >>> manuf2 = get_temp_file() >>> >>> with open(manuf1, "w") as w: ... w.write(old_format) ... 167 >>> with open(manuf2, "w") as w: ... w.write(new_format) ... 164 >>> a = load_manuf(manuf1) >>> b = load_manuf(manuf2) >>> >>> assert a.lookup("00:00:00") == ('JokyIsland', 'Joky Insland Corp SA') >>> assert a.lookup("FF:00:11:00:00:00") == ('NoName', 'NoName') >>> assert a.reverse_lookup("Scapy") == {'EE:05:01': ('Scapy', 'Scapy CO LTD & CIE')} >>> assert a.reverse_lookup("Secdevcorp") == {'00:01:12': ('SecdevCorp', 'Secdev Corporation SA LLC')} >>> >>> >>> assert b.lookup("00:00:00") == ('JokyIsland', 'Joky Insland Corp SA') >>> assert b.lookup("FF:00:11:00:00:00") == ('NoName', 'NoName') >>> assert b.reverse_lookup("Scapy") == {'EE:05:01': ('Scapy', 'Scapy CO LTD & CIE')} >>> assert b.reverse_lookup("Secdevcorp") == {'00:01:12': ('SecdevCorp', 'Secdev Corporation SA LLC')} >>> >>> scapy_delete_temp_files() ###(065)=[passed] Test load_services >>> data_services = """ ... itu-bicc-stc 3097/sctp ... cvsup 5999/udp # CVSup ... x11 6000-6063/tcp # X Window System ... x11 6000-6063/udp # X Window System ... ndl-ahp-svc 6064/tcp # NDL-AHP-SVC ... """ >>> >>> services = get_temp_file() >>> with open(services, "w") as w: ... w.write(data_services) ... 165 >>> tcp, udp, sctp = load_services(services) >>> assert tcp[6002] == "x11" >>> assert tcp.ndl_ahp_svc == 6064 >>> assert tcp.x11 in range(6000, 6093) >>> assert udp[6002] == "x11" >>> assert udp.x11 in range(6000, 6093) >>> assert udp.cvsup == 5999 >>> assert sctp[3097] == "itu_bicc_stc" >>> assert sctp.itu_bicc_stc == 3097 >>> >>> scapy_delete_temp_files() ###(066)=[passed] Test utility functions - network related >>> assert atol("1.1.1.1") == 0x1010101 >>> assert atol("192.168.0.1") == 0xc0a80001 ###(067)=[passed] Test autorun functions >>> ret = autorun_get_text_interactive_session("IP().src") >>> ret (">>> IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> assert ret == (">>> IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> >>> ret = autorun_get_html_interactive_session("IP().src") >>> ret (">>> IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> assert ret == (">>> IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> >>> ret = autorun_get_latex_interactive_session("IP().src") >>> ret ("\\textcolor{blue}{{\\tt\\char62}{\\tt\\char62}{\\tt\\char62} }IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> assert ret == ("\\textcolor{blue}{{\\tt\\char62}{\\tt\\char62}{\\tt\\char62} }IP().src\n'127.0.0.1'\n", '127.0.0.1') >>> >>> ret = autorun_get_text_interactive_session("scapy_undefined") >>> assert "NameError" in ret[0] ###(068)=[passed] Test autorun with logging >>> cmds = """log_runtime.info(hex_bytes("446166742050756e6b"))\n""" >>> ret = autorun_get_text_interactive_session(cmds) b'Daft Punk' >>> ret ('>>> log_runtime.info(hex_bytes("446166742050756e6b"))\nb\'Daft Punk\'\n', ("\\textcolor{blue}{{\\tt\\char62}{\\tt\\char62}{\\tt\\char62} }IP().src\n'127.0.0.1'\n", '127.0.0.1')) >>> assert "Daft Punk" in ret[0] ###(069)=[passed] Test utility TEX functions >>> assert tex_escape("{scapy}\\^$~#_&%|><") == "{\\tt\\char123}scapy{\\tt\\char125}{\\tt\\char92}\\^{}\\${\\tt\\char126}\\#\\_\\&\\%{\\tt\\char124}{\\tt\\char62}{\\tt\\char60}" >>> >>> a = colgen(1, 2, 3) >>> assert next(a) == (1, 2, 2) >>> assert next(a) == (1, 3, 3) >>> assert next(a) == (2, 2, 1) >>> assert next(a) == (2, 3, 2) >>> assert next(a) == (2, 1, 3) >>> assert next(a) == (3, 3, 1) >>> assert next(a) == (3, 1, 2) >>> assert next(a) == (3, 2, 3) ###(070)=[passed] Test config file functions >>> saved_conf_verb = conf.verb >>> fd, fname = tempfile.mkstemp() >>> os.write(fd, b"conf.verb = 42\n") 15 >>> os.close(fd) >>> from scapy.main import _read_config_file >>> _read_config_file(fname, globals(), locals()) >>> assert conf.verb == 42 >>> conf.verb = saved_conf_verb ###(071)=[passed] Test config file functions failures >>> from scapy.main import _read_config_file, _probe_config_folder >>> assert _read_config_file(_probe_config_folder("filethatdoesnotexistnorwillever.tsppajfsrdrr")) is None ###(072)=[passed] Test CacheInstance repr >>> conf.netcache arp_cache: 0 valid items. Timeout=120s in6_neighbor: 0 valid items. Timeout=120s dns_cache: 0 valid items. Timeout=300s dclocator: 0 valid items. Timeout=600s ###(073)=[passed] Test pyx detection functions >>> from unittest.mock import patch >>> >>> def _r(*args, **kwargs): ... raise OSError ... >>> with patch("scapy.libs.test_pyx.subprocess.check_call", _r): ... from scapy.libs.test_pyx import _test_pyx ... assert _test_pyx() == False ... ###(074)=[passed] Test matplotlib detection functions >>> from unittest.mock import MagicMock, patch >>> >>> bck_scapy_libs_matplot = sys.modules.get("scapy.libs.matplot", None) >>> if bck_scapy_libs_matplot: ... del sys.modules["scapy.libs.matplot"] ... >>> mock_matplotlib = MagicMock() >>> mock_matplotlib.get_backend.return_value = "inline" >>> mock_matplotlib.pyplot = MagicMock() >>> mock_matplotlib.pyplot.plt = None >>> with patch.dict("sys.modules", **{ "matplotlib": mock_matplotlib, "matplotlib.lines": mock_matplotlib}): ... from scapy.libs.matplot import MATPLOTLIB, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS, Line2D ... assert MATPLOTLIB == 1 ... assert MATPLOTLIB_INLINED == 1 ... assert "marker" in MATPLOTLIB_DEFAULT_PLOT_KARGS ... >>> mock_matplotlib.get_backend.return_value = "ko" >>> with patch.dict("sys.modules", **{ "matplotlib": mock_matplotlib, "matplotlib.lines": mock_matplotlib}): ... from scapy.libs.matplot import MATPLOTLIB, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS ... assert MATPLOTLIB == 1 ... assert MATPLOTLIB_INLINED == 0 ... assert "marker" in MATPLOTLIB_DEFAULT_PLOT_KARGS ... >>> if bck_scapy_libs_matplot: ... sys.modules["scapy.libs.matplot"] = bck_scapy_libs_matplot ... ###### ## Basic tests ###### Those test are here mainly to check nothing has been broken and to catch Exceptions ###(075)=[passed] Packet class methods >>> p = IP()/ICMP() >>> ret = p.do_build_ps() >>> assert ret[0] == b"@\x00\x00\x00\x00\x01\x00\x00@\x01\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\x00\x00\x00\x00\x00\x00" >>> assert len(ret[1]) == 2 >>> >>> assert p[ICMP].firstlayer() == p >>> >>> assert p.command() == "IP()/ICMP()" >>> >>> p.decode_payload_as(UDP) >>> assert p.sport == 2048 and p.dport == 63487 ###(076)=[passed] hide_defaults >>> conf_color_theme = conf.color_theme >>> conf.color_theme = BlackAndWhite() >>> p = IP(ttl=64)/ICMP() >>> assert repr(p) in [">", ">"] >>> p.hide_defaults() >>> assert repr(p) in [">", ">"] >>> conf.color_theme = conf_color_theme ###(077)=[passed] split_layers >>> p = IP()/ICMP() >>> s = raw(p) >>> split_layers(IP, ICMP, proto=1) >>> assert Raw in IP(s) >>> bind_layers(IP, ICMP, frag=0, proto=1) ###(078)=[passed] fuzz >>> r = fuzz(IP(tos=2)/ICMP()) >>> assert r.tos == 2 >>> z = r.ttl >>> assert r.ttl != z >>> assert r.ttl != z ###(079)=[passed] fuzz a Packet with MultipleTypeField >>> fuzz(ARP(pdst="127.0.0.1")) >>> fuzz(IP()/ARP(pdst='10.0.0.254')) > ###(080)=[passed] fuzz on packets with advanced RandNum >>> x = IP(dst="8.8.8.8")/fuzz(UDP()/NTP(version=4)) >>> x.show2() ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 76 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x2fdc src = 192.168.122.12 dst = 8.8.8.8 \options \ ###[ UDP ]### sport = ntp dport = ntp len = 56 chksum = 0xfe8c ###[ NTPHeader ]### leap = last minute of the day has 59 seconds version = 4 mode = client stratum = 23 poll = 39 precision = -31 delay = 57838.5561 dispersion= 16251.1583 id = 49.102.55.165 ref = 38044154.444068995 orig = Thu, 17 Jul 2025 04:11:07 +0000 recv = Sat, 08 Feb 2031 00:51:46 +0000 sent = Thu, 17 Jul 2025 04:11:07 +0000 >>> x = IP(raw(x)) >>> assert NTP in x ###(081)=[passed] fuzz on packets with FlagsField >>> assert isinstance(fuzz(TCP()).flags, VolatileValue) ###(082)=[passed] Building some packets >>> IP()/TCP() > >>> Ether()/IP()/UDP()/NTP() >>> >>> Dot11()/LLC()/SNAP()/IP()/TCP()/"XXX" >>>>> >>> IP(ttl=25)/TCP(sport=12, dport=42) > >>> IP().summary() '127.0.0.1 > 127.0.0.1 hopopt' ###(083)=[passed] Manipulating some packets >>> a=IP(ttl=4)/TCP() >>> a.ttl 4 >>> a.ttl=10 >>> del a.ttl >>> a.ttl 64 >>> TCP in a True >>> a[TCP] >>> a[TCP].dport=[80,443] >>> a > >>> assert a.copy().time == a.time >>> a=3 ###(084)=[passed] Bind string array as payload >>> assert bytes(Raw("sca")/"py") == b"scapy" >>> assert bytes(Raw("sca")/b"py") == b"scapy" >>> assert bytes(Raw("sca")/bytearray(b"py")) == b"scapy" >>> assert bytes("sca"/Raw("py")) == b"scapy" >>> assert bytes(b"sca"/Raw("py")) == b"scapy" >>> assert bytes(bytearray(b"sca")/Raw("py")) == b"scapy" >>> a=Raw("sca") >>> a.add_payload("py") >>> assert bytes(a) == b"scapy" >>> a=Raw("sca") >>> a.add_payload(b"py") >>> assert bytes(a) == b"scapy" >>> a=Raw("sca") >>> a.add_payload(bytearray(b"py")) >>> assert bytes(a) == b"scapy" ###(085)=[passed] Checking overloads >>> a=Ether()/IP()/TCP() >>> r = a.proto >>> r 6 >>> r == 6 True ###(086)=[passed] sprintf() function >>> a=Ether()/IP()/IP(ttl=4)/UDP()/NTP() >>> r = a.sprintf("%type% %IP.ttl% %#05xr,UDP.sport% %IP:2.ttl%") >>> r 'IPv4 64 0x07b 4' >>> r in ['0x800 64 0x07b 4', 'IPv4 64 0x07b 4'] True ###(087)=[passed] sprintf() function This test is on the conditional substring feature of sprintf() >>> a=Dot11()/LLC()/SNAP()/IP()/TCP() >>> r = a.sprintf("{IP:{TCP:flags=%TCP.flags%}{UDP:port=%UDP.ports%} %IP.src%}") >>> r 'flags=S 127.0.0.1' >>> r == 'flags=S 127.0.0.1' True ###(088)=[passed] haslayer function >>> x=IP(id=1)/ISAKMP_payload_SA(prop=ISAKMP_payload_SA(prop=IP()/ICMP()))/TCP() >>> r = (TCP in x, ICMP in x, IP in x, UDP in x) >>> r (True, True, True, False) >>> r == (True,True,True,False) True ###(089)=[passed] getlayer function >>> x=IP(id=1)/ISAKMP_payload_SA(prop=IP(id=2)/UDP(dport=1))/IP(id=3)/UDP(dport=2) >>> x[IP] > |>>> >>> x[IP:2] > >>> x[IP:3] > >>> x.getlayer(IP,3) > >>> x.getlayer(IP,4) >>> x[UDP] >>> x[UDP:1] >>> x[UDP:2] >>> assert(x[IP].id == 1 and x[IP:2].id == 2 and x[IP:3].id == 3 and ... x.getlayer(IP).id == 1 and x.getlayer(IP,3).id == 3 and ... x.getlayer(IP,4) == None and ... x[UDP].dport == 1 and x[UDP:2].dport == 2) >>> try: ... x[IP:4] ... except IndexError: ... True ... else: ... False ... True ###(090)=[passed] getlayer / haslayer with name >>> x = IP() / ICMP() / IPerror() >>> assert x.getlayer(ICMP) is not None >>> assert x.getlayer(IPerror) is not None >>> assert x.getlayer("IP in ICMP") is not None >>> assert x.getlayer(TCPerror) is None >>> assert x.getlayer("TCP in ICMP") is None >>> assert x.haslayer(ICMP) >>> assert x.haslayer(IPerror) >>> assert x.haslayer("IP in ICMP") >>> assert not x.haslayer(TCPerror) >>> assert not x.haslayer("TCP in ICMP") ###(091)=[passed] getlayer with a filter >>> pkt = IP() / IP(ttl=3) / IP() >>> assert pkt[IP::{"ttl":3}].ttl == 3 >>> assert pkt.getlayer(IP, ttl=3).ttl == 3 >>> assert IPv6ExtHdrHopByHop(options=[HBHOptUnknown()]).getlayer(HBHOptUnknown, otype=42) is None ###(092)=[passed] specific haslayer and getlayer implementations for EAP >>> pkt = Ether() / EAPOL() / EAP_MD5() >>> assert EAP in pkt >>> assert pkt.haslayer(EAP) >>> assert isinstance(pkt[EAP], EAP_MD5) >>> assert isinstance(pkt.getlayer(EAP), EAP_MD5) ###(093)=[passed] specific haslayer and getlayer implementations for RadiusAttribute >>> pkt = RadiusAttr_EAP_Message() >>> assert RadiusAttribute in pkt >>> assert pkt.haslayer(RadiusAttribute) >>> assert isinstance(pkt[RadiusAttribute], RadiusAttr_EAP_Message) >>> assert isinstance(pkt.getlayer(RadiusAttribute), RadiusAttr_EAP_Message) ###(094)=[passed] equality >>> w=Ether()/IP()/UDP(dport=53) >>> x=Ether()/IP(version=4)/UDP() >>> y=Ether()/IP()/UDP(dport=4) >>> z=Ether()/IP()/UDP()/NTP() >>> t=Ether()/IP()/TCP() >>> assert x != y and x != z and x != t and y != z and y != t and z != t and w == x ###(095)=[passed] answers >>> a1, a2 = "1.2.3.4", "5.6.7.8" >>> p1 = IP(src=a1, dst=a2)/ICMP(type=8) >>> p2 = IP(src=a2, dst=a1)/ICMP(type=0) >>> assert p1.hashret() == p2.hashret() >>> assert not p1.answers(p2) >>> assert p2.answers(p1) >>> assert p1 > p2 >>> assert p2 < p1 >>> assert p1 == p1 >>> conf_back = conf.checkIPinIP >>> conf.checkIPinIP = True >>> px = [IP()/p1, IPv6()/p1] >>> assert not any(p.hashret() == p2.hashret() for p in px) >>> assert not any(p.answers(p2) for p in px) >>> assert not any(p2.answers(p) for p in px) >>> conf.checkIPinIP = False >>> assert all(p.hashret() == p2.hashret() for p in px) >>> assert not any(p.answers(p2) for p in px) >>> assert all(p2.answers(p) for p in px) >>> conf.checkIPinIP = conf_back ###(096)=[passed] answers - Net >>> a1, a2 = Net("www.google.com"), Net("www.secdev.org") >>> prt1, prt2 = 12345, 54321 >>> s1, s2 = 2767216324, 3845532842 >>> p1 = IP(src=a1, dst=a2)/TCP(flags='SA', seq=s1, ack=s2, sport=prt1, dport=prt2) >>> p2 = IP(src=a2, dst=a1)/TCP(flags='R', seq=s2, ack=0, sport=prt2, dport=prt1) >>> assert p2.answers(p1) >>> assert not p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='S', seq=s1, ack=0, sport=prt1, dport=prt2) >>> p2 = IP(src=a2, dst=a1)/TCP(flags='RA', seq=0, ack=s1+1, sport=prt2, dport=prt1) >>> assert p2.answers(p1) >>> assert not p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='S', seq=s1, ack=0, sport=prt1, dport=prt2) >>> p2 = IP(src=a2, dst=a1)/TCP(flags='SA', seq=s2, ack=s1+1, sport=prt2, dport=prt1) >>> assert p2.answers(p1) >>> assert not p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='A', seq=s1, ack=s2+1, sport=prt1, dport=prt2) >>> assert not p2.answers(p1) >>> assert p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='S', seq=s1, ack=0, sport=prt1, dport=prt2) >>> p2 = IP(src=a2, dst=a1)/TCP(flags='SA', seq=s2, ack=s1+10, sport=prt2, dport=prt1) >>> assert not p2.answers(p1) >>> assert not p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='A', seq=s1, ack=s2+1, sport=prt1, dport=prt2) >>> assert not p2.answers(p1) >>> assert not p1.answers(p2) >>> p1 = IP(src=a1, dst=a2)/TCP(flags='A', seq=s1+9, ack=s2+10, sport=prt1, dport=prt2) >>> assert not p2.answers(p1) >>> assert not p1.answers(p2) ###(097)=[passed] conf.checkIPsrc >>> conf_checkIPsrc = conf.checkIPsrc >>> conf.checkIPsrc = 0 >>> query = IP(id=42676, src='10.128.0.7', dst='192.168.0.1')/ICMP(id=26) >>> answer = IP(src='192.168.48.19', dst='10.128.0.7')/ICMP(type=11)/IPerror(id=42676, src='192.168.51.23', dst='192.168.0.1')/ICMPerror(id=26) >>> assert answer.answers(query) >>> conf.checkIPsrc = conf_checkIPsrc ###### ## command() / json() tests ###### ###(098)=[passed] Test command() with normal packet >>> pkt = IP(dst="127.0.0.1", src="127.0.0.1") / UDP(dport=12345, sport=654) >>> assert pkt.command() == "IP(src='127.0.0.1', dst='127.0.0.1')/UDP(sport=654, dport=12345)" ###(099)=[passed] Test json() with normal packet >>> assert pkt.json() == '{"version": 4, "ihl": null, "tos": 0, "len": null, "id": 1, "flags": 0, "frag": 0, "ttl": 64, "proto": 17, "chksum": null, "src": "127.0.0.1", "dst": "127.0.0.1", "payload": {"sport": 654, "dport": 12345, "len": null, "chksum": null}}' ###(100)=[passed] Test command() with nested packet >>> pkt = DNS(qd=[DNSQR(qtype="A", qname="google.com")]) >>> assert pkt.command() == "DNS(qd=[DNSQR(qname=b'google.com.', qtype=1)])" ###(101)=[passed] Test json() with nested packet >>> assert pkt.json() == '{"length": null, "id": 0, "qr": 0, "opcode": 0, "aa": 0, "tc": 0, "rd": 1, "ra": 0, "z": 0, "ad": 0, "cd": 0, "rcode": 0, "qdcount": null, "ancount": null, "nscount": null, "arcount": null, "qd": [{"qname": "google.com.", "qtype": 1, "unicastresponse": 0, "qclass": 1}]}' ###(102)=[passed] Test command() with ASN.1 packet >>> pkt = KRB_AP_REP(bytes(KRB_AP_REP(encPart=EncryptedData()))) >>> assert pkt.command() == "KRB_AP_REP(pvno=ASN1_INTEGER(5), msgType=ASN1_INTEGER(15), encPart=EncryptedData(etype=ASN1_INTEGER(23), kvno=None, cipher=ASN1_STRING(b'')))" ###(103)=[passed] Test json(à with ASN.1 packet >>> assert pkt.json() == '{"pvno": {"type": "ASN1_INTEGER", "value": "5"}, "msgType": {"type": "ASN1_INTEGER", "value": "15"}, "encPart": {"etype": {"type": "ASN1_INTEGER", "value": "23"}, "kvno": null, "cipher": {"type": "ASN1_STRING", "value": ""}}}' ###(104)=[passed] Test command() with meaningless payload >>> pkt = PPTPStartControlConnectionReply() / IP(dst="127.0.0.1", src="127.0.0.1") >>> assert pkt.command() == "PPTPStartControlConnectionReply()/IP(src='127.0.0.1', dst='127.0.0.1')" ###(105)=[passed] Test json() with meaningless payload >>> assert pkt.json() == '{"len": 156, "type": 1, "magic_cookie": 439041101, "ctrl_msg_type": 2, "reserved_0": 0, "protocol_version": 256, "result_code": 1, "error_code": 0, "framing_capabilities": 0, "bearer_capabilities": 0, "maximum_channels": 65535, "firmware_revision": 256, "host_name": "linux", "vendor_string": "", "payload": {"version": 4, "ihl": null, "tos": 0, "len": null, "id": 1, "flags": 0, "frag": 0, "ttl": 64, "proto": 0, "chksum": null, "src": "127.0.0.1", "dst": "127.0.0.1"}}' ###### ## Tests on padding ###### ###(106)=[passed] Padding assembly >>> r = raw(Padding("abc")) >>> r b'abc' >>> assert r == b"abc" >>> r = raw(Padding("abc")/Padding("def")) >>> r b'abcdef' >>> assert r == b"abcdef" >>> r = raw(Raw("ABC")/Padding("abc")/Padding("def")) >>> r b'ABCabcdef' >>> assert r == b"ABCabcdef" >>> r = raw(Raw("ABC")/Padding("abc")/Raw("DEF")/Padding("def")) >>> r b'ABCDEFabcdef' >>> assert r == b"ABCDEFabcdef" ###(107)=[passed] Padding and length computation >>> p = IP(raw(IP()/Padding("abc"))) >>> p > >>> assert p.len == 20 and len(p) == 23 >>> p = IP(raw(IP()/Raw("ABC")/Padding("abc"))) >>> p >> >>> assert p.len == 23 and len(p) == 26 >>> p = IP(raw(IP()/Raw("ABC")/Padding("abc")/Padding("def"))) >>> p >> >>> assert p.len == 23 and len(p) == 29 ###(108)=[passed] PadField test >>> class TestPad(Packet): ... fields_desc = [ PadField(StrNullField("st", b""), 6, padwith=b"\xff"), StrField("id", b"")] ... >>> assert TestPad() == TestPad(raw(TestPad())) >>> assert raw(TestPad(st=b"st", id=b"id")) == b'st\x00\xff\xff\xffid' ###(109)=[passed] ReversePadField >>> class TestReversePad(Packet): ... fields_desc = [ ByteField("a", 0), ... ReversePadField(IntField("b", 0), 4)] ... >>> assert raw(TestReversePad(a=1, b=0xffffffff)) == b'\x01\x00\x00\x00\xff\xff\xff\xff' >>> assert TestReversePad(raw(TestReversePad(a=1, b=0xffffffff))).b == 0xffffffff ###### ## Tests on default value changes mechanism ###### ###(110)=[passed] Creation of an IPv3 class from IP class with different default values >>> class IPv3(IP): ... version = 3 ... ttl = 32 ... ###(111)=[passed] Test of IPv3 class >>> a = IPv3() >>> v,t = a.version, a.ttl >>> v,t (3, 32) >>> assert (v,t) == (3,32) >>> r = raw(a) >>> r b'5\x00\x00\x14\x00\x01\x00\x00 \x00\xac\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01' >>> assert r == b'5\x00\x00\x14\x00\x01\x00\x00 \x00\xac\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01' ###### ## ASN.1 tests ###### ###(112)=[passed] ASN1 - ASN1_Object >>> assert ASN1_Object(1) == ASN1_Object(1) >>> assert ASN1_Object(1) > ASN1_Object(0) >>> assert ASN1_Object(1) >= ASN1_Object(1) >>> assert ASN1_Object(0) < ASN1_Object(1) >>> assert ASN1_Object(1) <= ASN1_Object(2) >>> assert ASN1_Object(1) != ASN1_Object(2) >>> ASN1_Object(2).show() ###(113)=[passed] ASN1 - RandASN1Object >>> a = RandASN1Object() >>> random.seed(0x2807) >>> o = bytes(a) >>> o b'F\x02\xfe\x92' >>> assert o in [ ... b'\x1e\x023V', # PyPy 2.7 ... b'A\x02\x07q', # Python 2.7 ... b'F\x02\xfe\x92', # python 3.7-3.9 ... ] ###(114)=[passed] ASN1 - ASN1_BIT_STRING >>> a = ASN1_BIT_STRING("test", readable=True) >>> a >>> assert a.val == '01110100011001010111001101110100' >>> assert raw(a) == b'\x03\x05\x00test' >>> >>> a = ASN1_BIT_STRING(b"\xff"*16, readable=True) >>> a >>> assert a.val == "1" * 128 >>> assert raw(a) == b'\x03\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ###(115)=[passed] ASN1 - ASN1_SEQUENCE >>> a = ASN1_SEQUENCE([ASN1_Object(1), ASN1_Object(0)]) >>> assert a.strshow() == '# ASN1_SEQUENCE:\n \n \n' ###(116)=[passed] ASN1 - ASN1_DECODING_ERROR >>> a = ASN1_DECODING_ERROR("error", exc=OSError(1)) >>> assert repr(a) == "" >>> b = ASN1_DECODING_ERROR("error", exc=OSError(ASN1_BIT_STRING("0"))) >>> assert repr(b) in ["}}>", ... "}}>"] ###(117)=[passed] ASN1 - ASN1_INTEGER >>> a = ASN1_INTEGER(int("1"*23)) >>> assert repr(a) in ["0x25a55a46e5da99c71c7 ", ... "0x25a55a46e5da99c71c7 "] ###(118)=[passed] ASN1 - ASN1_OID >>> assert raw(ASN1_OID("")) == b"\x06\x00" ###(119)=[passed] RandASN1Object(), specific crashes >>> import random >>> >>> random.seed(1514315682) >>> raw(RandASN1Object()) b"@\x04\x85'\xa3\xae" >>> >>> random.seed(1240186058) >>> raw(RandASN1Object()) b'\x13\x14xUafcbZJKIMaAdaVV3ma' >>> >>> random.seed(1873503288) >>> raw(RandASN1Object()) b'\x17\x0f20250717041108Z' ###(120)=[passed] SSID is parsed properly even with the presence of RSN Information >>> filename = scapy_path("/test/pcaps/bad_rsn_parsing_overrides_ssid.pcap") >>> frame = rdpcap(filename)[0] >>> beacon = frame.getlayer(5) >>> ssid = beacon.network_stats()['ssid'] >>> assert ssid == "ROUTE-821E295" ###(121)=[passed] SSID is parsed properly even when the Country Information Tag Element has an odd length (not complying with the standard) and a missing pad byte >>> from io import BytesIO >>> pcapfile = BytesIO(b'\n\r\r\n\x80\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x10\x00Linux 6.1.21-v8+\x04\x00E\x00Dumpcap (Wireshark) 3.4.10 (Git v3.4.10 packaged as 3.4.10-0+deb11u1)\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x01\x00\x00\x00@\x00\x00\x00\x7f\x00\x00\x00\x00\x04\x00\x00\x02\x00\x05\x00wifi2\x00\x00\x00\t\x00\x01\x00\t\x00\x00\x00\x0c\x00\x10\x00Linux 6.1.21-v8+\x00\x00\x00\x00@\x00\x00\x00\x06\x00\x00\x00\xb0\x01\x00\x00\x00\x00\x00\x00c\xd3\x87\x17\xe3c5\x82\x90\x01\x00\x00\x90\x01\x00\x00\x00\x00 \x00\xae@\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x10\x0cd\x14@\x01\xa9\x00\x0c\x00\x00\x00\xa6\x00\xa8\x01\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x02\xbf\xaf\x9f\xf8\x07\x02\xbf\xaf\x9f\xf8\x070\x96[p\xdcM\x06\x00\x00\x00d\x00\x11\x00\x00\x00\x01\x08\x8c\x12\x98$\xb0H`l\x03\x01,\x05\x04\x00\x01\x00\x00\x07QUS \x01\r\x80$\x01\x80(\x01\x80,\x01\x800\x01\x804\x01\x808\x01\x80<\x01\x80@\x01\x80d\x01\x80h\x01\x80l\x01\x80p\x01\x80t\x01\x80x\x01\x80|\x01\x80\x80\x01\x80\x84\x01\x80\x88\x01\x80\x8c\x01\x80\x90\x01\x80\x95\x01\x80\x99\x01\x80\x9d\x01\x80\xa1\x01\x80\xa5\x01\x800\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x02\x0c\x00;\x02s\x00-\x1a,\t\x13\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00,\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x18\x00P\xf2\x02\x01\x01\x81\x00\x03\xa4\x00\x00\'\xa4\x00\x00BC]\x00a\x11.\x00\xdd;\x00P\xf2\x04\x10J\x00\x01\x10\x10D\x00\x01\x02\x10I\x00\x06\x007*\x00\x01 \x10\x11\x00\x1358" Hisense Roku TV\x10T\x00\x08\x00\x07\x00P\xf2\x04\x00\x01\xdd\x16\xc8:k\x01\x01\x1048<@dhlptx|\x80\x84\x88\x8c\x90\xdd\x12Po\x9a\t\x02\x02\x00!\x0b\x03\x06\x00\x02\xbf\xaf\x9f\xf8\x07\xdd\rPo\x9a\n\x00\x00\x06\x01\x11\x1cD\x002\xf5N\xfbh\xb0\x01\x00\x00') >>> pktpcap = rdpcap(pcapfile) >>> frame = pktpcap[0] >>> beacon = frame.getlayer(4) >>> stats = beacon.network_stats() >>> ssid = stats['ssid'] >>> assert ssid == "" >>> country = stats['country'] >>> assert country == 'US' ###### ## Network tests ###### Those tests need network access ###(126)=[passed] Test sniffing with AsyncSniffer on failed >>> try: ... sniffer = AsyncSniffer(iface="this_interface_does_not_exists") ... sniffer.start() ... sniffer.join() ... assert False, "Should have errored by now" ... except ValueError: ... assert True ... ###(129)=[passed] test chainEX >>> import socket >>> sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> ssck = StreamSocket(sck) >>> >>> try: ... r = ssck.sr1(ICMP(type='echo-request'), timeout=0.1, chainEX=True, threaded=False) ... assert False ... except Exception: ... assert True ... finally: ... sck.close() ... ###(131)=[passed] Whois request This test retries on failure because it often fails >>> def _test(): ... IP(src="8.8.8.8").whois() ... >>> retry_test(_test) % The RIPE Database is subject to Terms and Conditions. % See https://docs.db.ripe.net/terms-conditions.html % Note: this output has been filtered. % To receive output for a database update, use the "-B" flag. % Information related to '6.0.0.0 - 9.128.255.255' % No abuse contact registered for 6.0.0.0 - 9.128.255.255 inetnum: 6.0.0.0 - 9.128.255.255 netname: NON-RIPE-NCC-MANAGED-ADDRESS-BLOCK descr: IPv4 address block not managed by the RIPE NCC country: EU # Country is really world wide admin-c: IANA1-RIPE tech-c: IANA1-RIPE status: ALLOCATED UNSPECIFIED mnt-by: RIPE-NCC-HM-MNT created: 2024-12-09T14:26:02Z last-modified: 2024-12-09T14:26:02Z source: RIPE role: Internet Assigned Numbers Authority address: see http://www.iana.org. admin-c: IANA1-RIPE tech-c: IANA1-RIPE nic-hdl: IANA1-RIPE mnt-by: RIPE-NCC-MNT created: 1970-01-01T00:00:00Z last-modified: 2001-09-22T09:31:27Z source: RIPE # Filtered % This query was served by the RIPE Database Query Service version 1.117 (ABERDEEN) ###(132)=[passed] AS resolvers This test retries on failure because it often fails >>> def _test(): ... ret = conf.AS_resolver.resolve("8.8.8.8", "8.8.4.4") ... assert (len(ret) == 2) ... assert any(x[1] == "AS15169" for x in ret) ... >>> retry_test(_test) >>> >>> riswhois_data = b"route: 8.8.8.0/24\ndescr: Google\norigin: AS15169\nnotify: radb-contact@google.com\nmnt-by: MAINT-AS15169\nchanged: radb-contact@google.com 20150728\nsource: RADB\n\nroute: 8.0.0.0/9\ndescr: Proxy-registered route object\norigin: AS3356\nremarks: auto-generated route object\nremarks: this next line gives the robot something to recognize\nremarks: L'enfer, c'est les autres\nremarks: \nremarks: This route object is for a Level 3 customer route\nremarks: which is being exported under this origin AS.\nremarks: \nremarks: This route object was created because no existing\nremarks: route object with the same origin was found, and\nremarks: since some Level 3 peers filter based on these objects\nremarks: this route may be rejected if this object is not created.\nremarks: \nremarks: Please contact routing@Level3.net if you have any\nremarks: questions regarding this object.\nmnt-by: LEVEL3-MNT\nchanged: roy@Level3.net 20060203\nsource: LEVEL3\n\n\n" >>> >>> ret = AS_resolver_riswhois()._parse_whois(riswhois_data) >>> assert ret == ('AS15169', 'Google') >>> >>> retry_test(_test) >>> >>> >>> cymru_bulk_data = """ ... Bulk mode; whois.cymru.com [2017-10-03 08:38:08 +0000] ... 24776 | 217.25.178.5 | INFOCLIP-AS, FR ... 36459 | 192.30.253.112 | GITHUB - GitHub, Inc., US ... 26496 | 68.178.213.61 | AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US ... """ >>> tmp = AS_resolver_cymru().parse(cymru_bulk_data) >>> assert len(tmp) == 3 >>> assert [l[1] for l in tmp] == ['AS24776', 'AS36459', 'AS26496'] ###(133)=[passed] AS resolver - IPv6 This test retries on failure because it often fails >>> def _test(): ... as_resolver6 = AS_resolver6() ... ret = as_resolver6.resolve("2001:4860:4860::8888", "2001:4860:4860::4444") ... assert (len(ret) == 2) ... assert any(x[1] == 15169 for x in ret) ... >>> retry_test(_test) ###(134)=[passed] AS resolver - socket error This test checks that a failing resolver will not crash a script >>> class MockAS_resolver(object): ... def resolve(self, *ips): ... raise socket.error ... >>> asrm = AS_resolver_multi(MockAS_resolver()) >>> assert len(asrm.resolve(["8.8.8.8", "8.8.4.4"])) == 0 ###(135)=[passed] sendpfast >>> old_interactive = conf.interactive >>> conf.interactive = False >>> try: ... sendpfast([]) ... assert False ... except Exception: ... assert True ... PcapWriter: unknown LL type for NoneType. Using type 1 (Ethernet) tcpreplay: execution failed (type) Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/sendrecv.py", line 586, in sendpfast cmd = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE) File "/usr/lib/python3.14/subprocess.py", line 1038, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass_fds, cwd, env, ^^^^^^^^^^^^^^^^^^^ ...<5 lines>... gid, gids, uid, umask, ^^^^^^^^^^^^^^^^^^^^^^ start_new_session, process_group) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/subprocess.py", line 1970, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'tcpreplay' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/sendrecv.py", line 597, in sendpfast stdout, stderr = cmd.communicate() ^^^ UnboundLocalError: cannot access local variable 'cmd' where it is not associated with a value >>> conf.interactive = old_interactive >>> assert True ###### ## Generator tests ###### ###(136)=[passed] Implicit logic 1 >>> a = Ether() / IP(ttl=(5, 10)) / TCP(dport=[80, 443]) >>> ls(a) dst : DestMACField = None ('None') src : SourceMACField = '00:00:00:00:00:00' ('None') type : XShortEnumField = 2048 ('36864') -- version : BitField (4 bits) = 4 ('4') ihl : BitField (4 bits) = None ('None') tos : XByteField = 0 ('0') len : ShortField = None ('None') id : ShortField = 1 ('1') flags : FlagsField = ('') frag : BitField (13 bits) = 0 ('0') ttl : ByteField = (5, 10) ('64') proto : ByteEnumField = 6 ('0') chksum : XShortField = None ('None') src : SourceIPField = '127.0.0.1' ('None') dst : DestIPField = '127.0.0.1' ('None') options : PacketListField = [] ('[]') -- sport : ShortEnumField = 20 ('20') dport : ShortEnumField = [80, 443] ('80') seq : IntField = 0 ('0') ack : IntField = 0 ('0') dataofs : BitField (4 bits) = None ('None') reserved : BitField (3 bits) = 0 ('0') flags : FlagsField = ('') window : ShortField = 8192 ('8192') chksum : XShortField = None ('None') urgptr : ShortField = 0 ('0') options : TCPOptionsField = [] ("b''") >>> ls(a, verbose=True) dst : DestMACField = None ('None') src : SourceMACField = '00:00:00:00:00:00' ('None') type : XShortEnumField = 2048 ('36864') IPv4: 2048 X25: 2053 ARP: 2054 FR_ARP: 2056 BPQ: 2303 DEC: 24576 DNA_DL: 24577 DNA_RC: 24578 DNA_RT: 24579 LAT: 24580 DIAG: 24581 CUST: 24582 SCA: 24583 TEB: 25944 RAW_FR: 25945 RARP: 32821 ATALK: 32923 AARP: 33011 n_802_1Q: 33024 IPX: 33079 NetBEUI: 33169 IPv6: 34525 PPP: 34827 ATMMPOA: 34892 PPP_DISC: 34915 PPP_SES: 34916 ATMFATE: 34948 802_1AD: 34984 802_1AE: 35045 802_1AH: 35047 LOOP: 36864 -- version : BitField (4 bits) = 4 ('4') ihl : BitField (4 bits) = None ('None') tos : XByteField = 0 ('0') len : ShortField = None ('None') id : ShortField = 1 ('1') flags : FlagsField = ('') frag : BitField (13 bits) = 0 ('0') ttl : ByteField = (5, 10) ('64') proto : ByteEnumField = 6 ('0') chksum : XShortField = None ('None') src : SourceIPField = '127.0.0.1' ('None') dst : DestIPField = '127.0.0.1' ('None') options : PacketListField = [] ('[]') -- sport : ShortEnumField = 20 ('20') dport : ShortEnumField = [80, 443] ('80') seq : IntField = 0 ('0') ack : IntField = 0 ('0') dataofs : BitField (4 bits) = None ('None') reserved : BitField (3 bits) = 0 ('0') flags : FlagsField = ('') window : ShortField = 8192 ('8192') chksum : XShortField = None ('None') urgptr : ShortField = 0 ('0') options : TCPOptionsField = [] ("b''") >>> l = [p for p in a] >>> len(l) == 12 True ###(137)=[passed] Implicit logic 2 >>> a = IP(ttl=[1,2,(5,9)]) >>> ls(a) version : BitField (4 bits) = 4 ('4') ihl : BitField (4 bits) = None ('None') tos : XByteField = 0 ('0') len : ShortField = None ('None') id : ShortField = 1 ('1') flags : FlagsField = ('') frag : BitField (13 bits) = 0 ('0') ttl : ByteField = [1, 2, (5, 9)] ('64') proto : ByteEnumField = 0 ('0') chksum : XShortField = None ('None') src : SourceIPField = '127.0.0.1' ('None') dst : DestIPField = '127.0.0.1' ('None') options : PacketListField = [] ('[]') >>> ls(a, verbose=True) version : BitField (4 bits) = 4 ('4') ihl : BitField (4 bits) = None ('None') tos : XByteField = 0 ('0') len : ShortField = None ('None') id : ShortField = 1 ('1') flags : FlagsField = ('') MF, DF, evil frag : BitField (13 bits) = 0 ('0') ttl : ByteField = [1, 2, (5, 9)] ('64') proto : ByteEnumField = 0 ('0') chksum : XShortField = None ('None') src : SourceIPField = '127.0.0.1' ('None') dst : DestIPField = '127.0.0.1' ('None') options : PacketListField = [] ('[]') >>> l = [p for p in a] >>> len(l) == 7 True ###(138)=[passed] Implicit logic 3 >>> a = Ether()/IP(src="127.0.0.1", dst="127.0.0.1")/ICMP() >>> for i in a: ... i.sent_time = 1 ... >>> assert a.sent_time is None >>> >>> a = Ether()/IP(src="127.0.0.1", dst="127.0.0.1")/ICMP(seq=(0, 5)) >>> for i in a: ... i.sent_time = 1 ... >>> assert a.sent_time is None ###### ## Real usages ###### ###(145)=[passed] sniff() with socket failure GH issue 3631 >>> REFPACKET = Ether()/IP()/UDP() >>> >>> class OOPipe(ObjectPipe): ... def recv(self, x=MTU): ... self.i = getattr(self, "i", 0) + 1 ... if self.i == 11: ... self.close() ... raise OSError("Giant failure") ... pkt = super(OOPipe, self).recv(x) ... self.send(REFPACKET) ... return pkt ... >>> o = OOPipe() >>> o.send(REFPACKET) 1 >>> >>> pkts = sniff(opened_socket=[o], timeout=3) Socket failed with 'Giant failure'. It was closed. >>> assert len(pkts) == 10 ###(147)=[passed] Test SuperSocket.select >>> from unittest import mock >>> >>> @mock.patch("scapy.supersocket.select") ... def _test_select(select): ... def f(a, b, c, d): ... raise IOError(0) ... select.side_effect = f ... try: ... SuperSocket.select([]) ... return False ... except: ... return True ... >>> assert _test_select() ###(148)=[passed] Test L2ListenTcpdump socket >>> True True ###### ## ManuFDB tests ###### ###(153)=[passed] __repr__ >>> if conf.manufdb: ... len(conf.manufdb) ... else: ... True ... 50825 ###(154)=[passed] check _resolve_MAC >>> if conf.manufdb: ... assert conf.manufdb._resolve_MAC("00:00:17") == "Oracle" ... else: ... True ... ###### ## pcap / pcapng format support ###### ###(156)=[passed] Variable creations >>> from io import BytesIO >>> pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00') >>> pcapngfile = BytesIO(b'\n\r\r\n\\\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00,\x00File created by merging: \nFile1: test.pcap \n\x04\x00\x08\x00mergecap\x00\x00\x00\x00\\\x00\x00\x00\x01\x00\x00\x00\\\x00\x00\x00e\x00\x00\x00\xff\xff\x00\x00\x02\x006\x00Unknown/not available in original file format(libpcap)\x00\x00\t\x00\x01\x00\x06\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00\x06\x00\x00\x00H\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00/\xfc[\xcd(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00H\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\x1f\xff[\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r<\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\xb9\x02\\\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00<\x00\x00\x00') >>> pcapnanofile = BytesIO(b"M<\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacV\xc9\xc1\xb5'(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV-;\xc1'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\x9aL\xcf'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00") >>> pcapwirelenfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x00}\x87pZ.\xa2\x08\x00\x0f\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\xff\xff GG\xee\xdd\xa8\x90\x00a') >>> pcapngdefaults = BytesIO(base64.b64decode(b'Cg0NChwAAABNPCsaAQAAAP//////////HAAAAAEAAAAgAAAAEgEAAP//AAAJAAEACUeZiQAAAAAgAAAAAQAAACAAAAASAQAA//8AAAkAAQAJAAAAAAAAACAAAAABAAAAIAAAABIBAAD//wAACQABAAkAAAAAAAAAIAAAAAEAAAAgAAAAEgEAAP//AAAJAAEACQAAAAAAAAAgAAAABgAAAIQBAAADAAAApO/bFdgJaeBiAQAAYgEAAFVVVVVVVVXV////////IMbr4D7PCABFAAFIlQkAAEAR5JwAAAAA/////wBEAEMBNJDsAQEGAFSpVwIACoAAAAAAAAAAAAAAAAAAAAAAACDG6+A+zwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjglNjNQEB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsOs+bAAAhAEAAAYAAACAAQAAAwAAAKTv2xXIDYznYAEAAGABAABVVVVVVVVV1QEAXn//+iDG6+A+zwgARQABRgGPAAAEEal3qf5wqO////rhbgdsATJi0U5PVElGWSAqIEhUVFAvMS4xDQpIT1NUOiAyMzkuMjU1LjI1NS4yNTA6MTkwMA0KQ0FDSEUtQ09OVFJPTDogbWF4LWFnZT0xODAwDQpMT0NBVElPTjogaHR0cDovLzE2OS4yNTQuMTEyLjE2ODo1NTAwMC9ucmMvZGRkLnhtbA0KTlQ6IHV1aWQ6NEQ0NTQ5MzAtMDIwMC0xMDAwLTgwMDEtMjBDNkVCRTAzRUNGDQpOVFM6IHNzZHA6YWxpdmUNClNFUlZFUjogRnJlZUJTRC84LjAgVVBuUC8xLjAgUGFuYXNvbmljLU1JTC1ETE5BLVNWLzEuMA0KVVNOOiB1dWlkOjRENDU0OTMwLTAyMDAtMTAwMC04MDAxLTIwQzZFQkUwM0VDRg0KDQpcQcvWgAEAAAYAAAC4AQAAAwAAAKTv2xV4Ao3nlQEAAJUBAABVVVVVVVVV1QEAXn//+iDG6+A+zwgARQABewGQAAAEEalBqf5wqO////rhbgdsAWfu+k5PVElGWSAqIEhUVFAvMS4xDQpIT1NUOiAyMzkuMjU1LjI1NS4yNTA6MTkwMA0KQ0FDSEUtQ09OVFJPTDogbWF4LWFnZT0xODAwDQpMT0NBVElPTjogaHR0cDovLzE2OS4yNTQuMTEyLjE2ODo1NTAwMC9ucmMvZGRkLnhtbA0KTlQ6IHVybjpwYW5hc29uaWMtY29tOmRldmljZTpwMDBSZW1vdGVDb250cm9sbGVyOjENCk5UUzogc3NkcDphbGl2ZQ0KU0VSVkVSOiBGcmVlQlNELzguMCBVUG5QLzEuMCBQYW5hc29uaWMtTUlMLURMTkEtU1YvMS4wDQpVU046IHV1aWQ6NEQ0NTQ5MzAtMDIwMC0xMDAwLTgwMDEtMjBDNkVCRTAzRUNGOjp1cm46cGFuYXNvbmljLWNvbTpkZXZpY2U6cDAwUmVtb3RlQ29udHJvbGxlcjoxDQoNCrLVKmoAAAC4AQAABgAAAHgBAAADAAAApO/bFVjbjedXAQAAVwEAAFVVVVVVVVXVAQBef//6IMbr4D7PCABFAAE9AZEAAAQRqX6p/nCo7///+uFuB2wBKaZATk9USUZZICogSFRUUC8xLjENCkhPU1Q6IDIzOS4yNTUuMjU1LjI1MDoxOTAwDQpDQUNIRS1DT05UUk9MOiBtYXgtYWdlPTE4MDANCkxPQ0FUSU9OOiBodHRwOi8vMTY5LjI1NC4xMTIuMTY4OjU1MDAwL25yYy9kZGQueG1sDQpOVDogdXBucDpyb290ZGV2aWNlDQpOVFM6IHNzZHA6YWxpdmUNClNFUlZFUjogRnJlZUJTRC84LjAgVVBuUC8xLjAgUGFuYXNvbmljLU1JTC1ETE5BLVNWLzEuMA0KVVNOOiB1dWlkOjRENDU0OTMwLTAyMDAtMTAwMC04MDAxLTIwQzZFQkUwM0VDRjo6dXBucDpyb290ZGV2aWNlDQoNCjagXoUAeAEAAAYAAAC0AQAAAwAAAKTv2xXYw47nkwEAAJMBAABVVVVVVVVV1QEAXn//+iDG6+A+zwgARQABeQGSAAAEEalBqf5wqO////rhbgdsAWWV4E5PVElGWSAqIEhUVFAvMS4xDQpIT1NUOiAyMzkuMjU1LjI1NS4yNTA6MTkwMA0KQ0FDSEUtQ09OVFJPTDogbWF4LWFnZT0xODAwDQpMT0NBVElPTjogaHR0cDovLzE2OS4yNTQuMTEyLjE2ODo1NTAwMC9ucmMvZGRkLnhtbA0KTlQ6IHVybjpwYW5hc29uaWMtY29tOnNlcnZpY2U6cDAwTmV0d29ya0NvbnRyb2w6MQ0KTlRTOiBzc2RwOmFsaXZlDQpTRVJWRVI6IEZyZWVCU0QvOC4wIFVQblAvMS4wIFBhbmFzb25pYy1NSUwtRExOQS1TVi8xLjANClVTTjogdXVpZDo0RDQ1NDkzMC0wMjAwLTEwMDAtODAwMS0yMEM2RUJFMDNFQ0Y6OnVybjpwYW5hc29uaWMtY29tOnNlcnZpY2U6cDAwTmV0d29ya0NvbnRyb2w6MQ0KDQovXKFrALQBAAAGAAAAqAEAAAMAAACk79sVuJKP54cBAACHAQAAVVVVVVVVVdUBAF5///ogxuvgPs8IAEUAAW0BkwAABBGpTKn+cKjv///64W4HbAFZRNJOT1RJRlkgKiBIVFRQLzEuMQ0KSE9TVDogMjM5LjI1NS4yNTUuMjUwOjE5MDANCkNBQ0hFLUNPTlRST0w6IG1heC1hZ2U9MTgwMA0KTE9DQVRJT046IGh0dHA6Ly8xNjkuMjU0LjExMi4xNjg6NTUwMDAvbnJjL2RkZC54bWwNCk5UOiB1cm46ZGlhbC1tdWx0aXNjcmVlbi1vcmc6c2VydmljZTpkaWFsOjENCk5UUzogc3NkcDphbGl2ZQ0KU0VSVkVSOiBGcmVlQlNELzguMCBVUG5QLzEuMCBQYW5hc29uaWMtTUlMLURMTkEtU1YvMS4wDQpVU046IHV1aWQ6NEQ0NTQ5MzAtMDIwMC0xMDAwLTgwMDEtMjBDNkVCRTAzRUNGOjp1cm46ZGlhbC1tdWx0aXNjcmVlbi1vcmc6c2VydmljZTpkaWFsOjENCg0KLn5A6QCoAQAA')) ###(157)=[passed] Read a pcap file >>> pktpcap = rdpcap(pcapfile) ###(158)=[passed] Read a pcapng file >>> pktpcapng = rdpcap(pcapngfile) >>> assert pktpcapng[0].time == 1454163407.666223 ###(159)=[passed] Read a pcap file with nanosecond precision >>> pktpcapnano = rdpcap(pcapnanofile) >>> assert pktpcapnano[0].time == 1454163407.666223049 ###(160)=[passed] Read a pcapng file with nanosecond precision and default tsresol >>> pktpcapngdefaults = rdpcap(pcapngdefaults) >>> assert pktpcapngdefaults[0].time == 1575115986.114775512 >>> assert Ether in pktpcapngdefaults[0] ###(161)=[passed] Read a pcapng with little-endian SHB >>> pktcapng = sniff(offline=scapy_path("/test/pcaps/macos.pcapng.gz")) >>> assert len(pktcapng) != 0 ###(162)=[passed] Write a pcapng >>> tmpfile = get_temp_file(autoext=".pcapng") >>> r = RawPcapNgWriter(tmpfile) >>> r._write_block_shb() >>> r._write_block_idb(linktype=DLT_EN10MB) >>> ts = 1632568366.384185 >>> r._write_block_epb(raw(Ether()/"Hello Scapy!!!"), ifid=0, timestamp=ts) MAC address to reach destination not found. Using broadcast. >>> r.f.close() >>> >>> assert os.stat(tmpfile).st_size == 108 >>> >>> l = rdpcap(tmpfile) >>> assert b"Scapy" in l[0][Raw].load >>> assert l[0].time == ts ###(163)=[passed] Check wrpcapng() >>> tmpfile = get_temp_file(autoext=".pcapng") >>> p = Ether()/"Hello Scapy!!!" >>> p.time = 1632568366.384185 >>> wrpcapng(tmpfile, p) MAC address to reach destination not found. Using broadcast. >>> >>> assert os.stat(tmpfile).st_size == 108 >>> >>> l = rdpcap(tmpfile) >>> assert b"Scapy" in l[0][Raw].load >>> assert l[0].time == ts >>> >>> p = Ether() / IPv6() / TCP() >>> p.comment = b"Hello Scapy!" >>> wrpcapng(tmpfile, p) >>> l = rdpcap(tmpfile) >>> assert l[0].comment == p.comment ###(164)=[passed] rdpcap on fifo >>> f = get_temp_file() >>> os.unlink(f) >>> os.mkfifo(f) >>> p = Ether(bytes(Ether(dst="ff:ff:ff:ff:ff:ff")/"Hello Scapy!!!")) >>> s = AsyncSniffer(offline=f) >>> s.start() >>> wrpcap(f, p) >>> s.join(timeout=1) >>> assert s.results[0] == p ###(165)=[passed] Check multiple packets with different combination of linktype,comment,direction,sniffed_on fields. test both wrpcap() and wrpcapng() >>> import random,string >>> random.seed(0x2807) >>> plist = [] >>> ptypes = [] >>> ptypes.append(Ether((Ether() / IPv6() / TCP()).build())) >>> ptypes.append(IP((IP() / IPv6() / TCP()).build())) >>> ifaces=[None,'','i','int0',''.join(random.choices(string.printable,k=20))] >>> comments=[None,'','a','abcd',''.join(random.choices(string.printable,k=20))] >>> directions=[None,0,1,2,3] >>> >>> for iface in ifaces: ... for comment in comments: ... if comment is not None: ... comment=comment.encode('utf-8') ... for direction in directions: ... for p in ptypes: ... if iface is not None and type(ptypes[ifaces.index(iface) % len(ptypes)]) != type(p): ... continue ... pnew = p.copy() ... pnew.time = 1632568366.384185 ... pnew.sniffed_on = iface ... pnew.direction = direction ... pnew.comment = comment ... plist.append(pnew) ... >>> random.shuffle(plist) >>> tmpfile = get_temp_file(autoext=".pcapng") >>> wrpcapng(tmpfile, plist) Inconsistent linktypes detected! The resulting file might contain invalid packets. Inconsistent linktypes detected! The resulting file might contain invalid packets. more Inconsistent linktypes detected! The resulting file might contain invalid packets. >>> plist_check = rdpcap(tmpfile) >>> assert len(plist_check) == len(plist) >>> for i in range(len(plist)): ... assert plist_check[i].comment == plist[i].comment ... assert plist_check[i].direction == plist[i].direction ... assert plist_check[i].sniffed_on == plist[i].sniffed_on ... assert plist_check[i].time == plist[i].time ... #if interface is unknown, verify pkt bytes integrity and that linktype was set to first packet ... if plist[i].sniffed_on is None: ... assert bytes(plist_check[i]) == bytes(plist[i]) ... assert type(plist_check[i]) == type(plist[0]) ... else: ... assert plist_check[i] == plist[i] ... >>> tmpfile = get_temp_file(autoext=".pcap") >>> wrpcap(tmpfile, plist) >>> plist_check = rdpcap(tmpfile) >>> for i in range(len(plist)): ... assert plist_check[i].time == plist[i].time ... assert type(plist_check[i]) == type(plist[0]) ... assert bytes(plist_check[i]) == bytes(plist[i]) ... ###(166)=[passed] PcapNg - Process Information Block >>> pib_pcapng_file = BytesIO(b'\n\r\r\n\xbc\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x02\x00\x05\x00arm64\x00\x00\x00\x03\x00f\x00Darwin Kernel Version 23.3.0: Thu Dec 21 02:29:41 PST 2023; root:xnu-10002.81.5~11/RELEASE_ARM64_T8122\x00\x00\x04\x00 \x00tcpdump (libpcap version 1.10.1)\x00\x00\x00\x00\xbc\x00\x00\x00\x01\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x08\x00\x02\x00\x03\x00en0\x00\x00\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x80 \x00\x00\x00$\'\x00\x00\x02\x00\x06\x00trustd\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x80$\x00\x00\x00")\x00\x00\x02\x00\x0c\x00mobileassetd\x00\x00\x00\x00$\x00\x00\x00\x06\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\xfb\x18\x06\x00EcqdB\x00\x00\x00B\x00\x00\x00\xe8\x9f\x80\xfa\x8c\xc6P\xa6\xd8\xd5\x83v\x08\x00E\x00\x004\x00\x00@\x00@\x06\x90T\nh\x01\xc3\xc0\xe5\xdd_\xf4\xb8\x00P\x95\xc3\xcb\x01\xcb\xeb\x11\xe8\x80\x11\x08\x00\x0c\xe6\x00\x00\x01\x01\x08\n\xbe\xb8\xd4\xb3\xbb\x9b4\xbc\x00\x00\x01\x80\x04\x00\x00\x00\x00\x00\x03\x80\x04\x00\x01\x00\x00\x00\x02\x00\x04\x00\x02\x00\x00\x00\x02\x80\x04\x00\x00\x00\x00\x00\x04\x80\x04\x00\x10\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00') >>> >>> l = rdpcap(pib_pcapng_file) >>> assert(len(l) == 1) >>> assert(TCP in l[0]) >>> assert(len(l[0].process_information) == 2) >>> assert(l[0].process_information["proc"]["name"] == "trustd") ###(167)=[passed] OSS-Fuzz Findings >>> from io import BytesIO >>> file = BytesIO(b"\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x04\x00\x14\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x04\x00\x02\x00\t\x00b'ens16\xb0'\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x00\x00\x004\x00\x00\x00\x01\x00\x00\x00}\x17\x06\x00\xb5t\x1d\x85\x14\x00\x00\x00\x14\x00\x00\x00E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x014\x00\x00\x00") >>> rdpcap(file) >>> >>> file = BytesIO(b'\n\r\r\n\xff\xfe\xfe\xffM<+\x1a') >>> try: ... rdpcap(file) ... except Scapy_Exception: ... pass ... PcapNg: Could not read major value >>> file = BytesIO(b"\n\r\r\n\x00\x00\x008\x1a+>> l = rdpcap(file) PcapNg: invalid option length 12 for end-of-option PcapNg: EPB invalid proc index(expected 4 bytes, got 0) ! >>> >>> file = BytesIO(b"\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x00\x04{\xdcf\xc2\xa5\x07\x008\x00\x00\x008\x00\x00\x00A]+\xdb]\x04\x8e(6\n\x99\xcb\x08\x00E\x00\x00*\x00\x01\x00\x00@\x06\xe3V\x07\x87\xa5m\x17\x15\xd3m\x01\x85\x01\x85\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xc5_\x00\x000\x00") >>> l = rdpcap(file) >>> assert l[0][LDAP].summary() == "LDAP" >>> >>> file = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x00%\xa8\xddfK\x1b\x05\x00\xca\xca\xca\xca*\x00\x00\x00\xff\xff\xff\xff\xff\xff\x86"\x11&\xab3\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01]\x80\x0f\x13*r\n\x00\x02\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> l = rdpcap(file) Pcap: cannot fit 'int' into an index-sized integer >>> assert len(l) == 0 or ARP in l[0] >>> >>> file = BytesIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x00\x00\x04\x00\x14\x00\x00\x00\x06\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00Helloooo,\x00\x00\x00') >>> l = rdpcap(file) >>> assert len(l) == 1 and l[0].comment == b'Helloooo' ###(168)=[passed] Read a pcap file with wirelen != captured len >>> pktpcapwirelen = rdpcap(pcapwirelenfile) ###(169)=[passed] Check all packet lists are the same >>> assert list(pktpcap) == list(pktpcapng) == list(pktpcapnano) >>> assert [float(p.time) for p in pktpcap] == [float(p.time) for p in pktpcapng] == [float(p.time) for p in pktpcapnano] ###(170)=[passed] Check packets from pcap file >>> assert all(IP in pkt for pkt in pktpcap) >>> assert all(any(proto in pkt for pkt in pktpcap) for proto in [ICMP, UDP, TCP]) ###(171)=[passed] Check wirelen value from pcap file >>> assert len(pktpcapwirelen) == 1 >>> assert pktpcapwirelen[0].wirelen is not None >>> assert len(pktpcapwirelen[0]) < pktpcapwirelen[0].wirelen ###(172)=[passed] Check wrpcap() then rdpcap() with wirelen >>> import os, tempfile >>> fdesc, filename = tempfile.mkstemp() >>> fdesc = os.fdopen(fdesc, "wb") >>> wrpcap(fdesc, pktpcapwirelen) >>> fdesc.close() >>> newpktpcapwirelen = rdpcap(filename) >>> assert len(newpktpcapwirelen) == 1 >>> assert newpktpcapwirelen[0].wirelen is not None >>> assert len(newpktpcapwirelen[0]) < newpktpcapwirelen[0].wirelen >>> assert newpktpcapwirelen[0].wirelen == pktpcapwirelen[0].wirelen ###(173)=[passed] Check wrpcap() then rdpcap() with sent_time on SndRcvList >>> f = get_temp_file() >>> s = Ether()/IP() >>> r = Ether()/IP() >>> s.sent_time = 1 >>> r.time = 2 >>> wrpcap(f, SndRcvList([(s, r)])) >>> pcap = rdpcap(f) >>> assert pcap[0].time == 1 >>> assert pcap[1].time == 2 ###(174)=[passed] Check wrpcap() >>> fdesc, filename = tempfile.mkstemp() >>> fdesc = os.fdopen(fdesc, "wb") >>> wrpcap(fdesc, pktpcap) >>> fdesc.close() ###(175)=[passed] Check offline sniff() (by PacketList) >>> l=sniff(offline=PacketList([IP()/TCP(),IP()/TCP()])) >>> assert len(l) == 2 >>> assert all(TCP in p for p in l) ###(176)=[passed] Check offline sniff() (by filename) >>> assert list(pktpcap) == list(sniff(offline=filename)) ###(177)=[passed] Check offline sniff() (by file object) >>> fdesc = open(filename, "rb") >>> assert list(pktpcap) == list(sniff(offline=fdesc)) >>> fdesc.close() ###(178)=[passed] Check offline sniff() with a filter (by filename) >>> pktpcap_flt = [(proto, sniff(offline=filename, filter=proto.__name__.lower())) ... for proto in [ICMP, UDP, TCP]] /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6386 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6387 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6388 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert all(list(pktpcap[proto]) == list(packets) for proto, packets in pktpcap_flt) ###(179)=[passed] Check offline sniff() with a filter (by file object) >>> fdesc = open(filename, "rb") >>> pktpcap_tcp = sniff(offline=fdesc, filter="tcp") /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6390 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> fdesc.close() >>> assert list(pktpcap[TCP]) == list(pktpcap_tcp) >>> os.unlink(filename) ###(180)=[passed] Check offline sniff() with a PcapNg file and a filter (by file object) >>> pcapng_data = b'\n\r\r\n`\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x04\x009\x00TShark (Wireshark) 3.2.3 (Git v3.2.3 packaged as 3.2.3-1)\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\xe4\x00\x00\x00\xff\xff\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x98\xcd\x05\x00\x19\x83\xf7\x9e\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r<\x00\x00\x00' >>> >>> if OPENBSD: ... # Note: OpenBSD tcpdump does not support PcapNg ... assert True ... else: ... fdesc, filename = tempfile.mkstemp() ... os.close(fdesc) ... fd = open(filename, "wb") ... fd.write(pcapng_data) ... fd.close() ... packets = sniff(offline=filename, filter="udp") ... os.unlink(filename) ... assert UDP in packets[0] ... 176 /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6392 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback ###(181)=[passed] Check offline sniff() with Packets and tcpdump with a filter >>> l = sniff(offline=IP()/UDP(sport=(10000, 10001)), filter="udp") /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6394 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert len(l) == 2 >>> assert all(UDP in p for p in l) >>> >>> l = sniff(offline=[p for p in IP()/UDP(sport=(10000, 10001))], filter="udp") /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6395 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert len(l) == 2 >>> assert all(UDP in p for p in l) >>> >>> l = sniff(offline=IP()/UDP(sport=(10000, 10001)), filter="tcp") /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6396 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert len(l) == 0 ###(182)=[passed] Check offline sniff() with Packets, tcpdump and a bad filter >>> try: ... sniff(offline=IP()/UDP(), filter="bad filter") ... except Scapy_Exception: ... pass ... else: ... assert False ... ###(184)=[passed] Check offline sniff with lfilter >>> assert len(sniff(offline=[IP()/UDP(), IP()/TCP()], lfilter=lambda x: TCP in x)) == 1 ###(185)=[passed] Check offline sniff() without a tcpdump binary >>> from unittest import mock >>> >>> conf_prog_tcpdump = conf.prog.tcpdump >>> conf.prog.tcpdump = "tcpdump_fake" >>> >>> def _test_sniff_notcpdump(): ... try: ... sniff(offline="fake.pcap", filter="tcp") ... assert False ... except: ... assert True ... >>> _test_sniff_notcpdump() >>> conf.prog.tcpdump = conf_prog_tcpdump ###(186)=[passed] Check wrpcap(nano=True) >>> fdesc, filename = tempfile.mkstemp() >>> fdesc = os.fdopen(fdesc, "wb") >>> pktpcapnano[0].time += Decimal('1E-9') >>> wrpcap(fdesc, pktpcapnano, nano=True) >>> fdesc.close() >>> pktpcapnanoread = rdpcap(filename) >>> assert pktpcapnanoread[0].time == pktpcapnano[0].time >>> os.unlink(filename) ###(187)=[passed] Check PcapNg with nanosecond precision using obsolete packet block first packet from capture file icmp2.ntar -- https://wiki.wireshark.org/Development/PcapNg?action=AttachFile&do=view&target=icmp2.ntar >>> pcapngfile = BytesIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x02\x00\x00\x00n\x00\x00\x00\x00\x00\x00\x00e\x14\x00\x00)4\'ON\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00n\x00\x00\x00') >>> pktpcapng = rdpcap(pcapngfile) PcapNg: bad blocklen 110 (MUST be a multiple of 4. Ignored padding b'\x00\x00' ICMP.guess_payload_class() returned [None] >>> assert len(pktpcapng) == 1 >>> pkt = pktpcapng[0] >>> assert pkt.time == 22425.352221737 >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) >>> pkt = pkt.payload >>> assert isinstance(pkt, ICMP) >>> pkt = pkt.payload >>> assert isinstance(pkt, Raw) and pkt.load == b'abcdefghijklmnopqrstuvwabcdefghi' >>> pkt = pkt.payload >>> assert isinstance(pkt, Padding) and pkt.load == b'\xeay$\xf6' >>> pkt = pkt.payload >>> assert isinstance(pkt, NoPayload) ###(188)=[passed] Check PcapNg using Simple Packet Block previous file with the (obsolete) packet block replaced by a Simple Packet Block >>> pcapngfile = BytesIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x03\x00\x00\x00`\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00`\x00\x00\x00') >>> pktpcapng = rdpcap(pcapngfile) more ICMP.guess_payload_class() returned [None] >>> assert len(pktpcapng) == 1 >>> pkt = pktpcapng[0] >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) >>> pkt = pkt.payload >>> assert isinstance(pkt, ICMP) >>> pkt = pkt.payload >>> assert isinstance(pkt, Raw) and pkt.load == b'abcdefghijklmnopqrstuvwabcdefghi' >>> pkt = pkt.payload >>> assert isinstance(pkt, Padding) and pkt.load == b'\xeay$\xf6' >>> pkt = pkt.payload >>> assert isinstance(pkt, NoPayload) ###(189)=[passed] Invalid pcapng files >>> from io import BytesIO >>> >>> try: ... invalid_pcapngfile_1 = BytesIO(b'\n\r\r\n\r\x00\x00\x00M<+\x1a\xb2<\xb2\xa1\x01\x00\x00\x00\r\x00\x00\x00M<+\x1a\x80\xaa\xb2\x02') ... rdpcap(invalid_pcapngfile_1) ... assert False ... except Scapy_Exception: ... pass ... PcapNg: Invalid Section Header Block length (13)! >>> invalid_pcapngfile_2 = BytesIO(b'\n\r\r\n\x00\x00\x00\x1c\x1a+>> assert len(rdpcap(invalid_pcapngfile_2)) == 0 PcapNg: IDB is too small 4/8 ! >>> >>> try: ... invalid_pcapngfile_3 = BytesIO(b'\n\n\n\x14\x00\x00\x00M<+\x1a \x14\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00 \x14\x00\x00\x00') ... rdpcap(invalid_pcapngfile_3) ... assert False ... except Scapy_Exception: ... pass ... >>> try: ... invalid_pcapngfile_4 = BytesIO(b'\n\n\n\x14\x00\x00\x00M<+\x1a \x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00 \x14\x00\x00\x00\x03\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00') ... rdpcap(invalid_pcapngfile_4) ... assert False ... except Scapy_Exception: ... pass ... ###(190)=[passed] Check PcapWriter on null write >>> f = BytesIO() >>> w = PcapWriter(f) >>> w.write([]) >>> assert len(f.getvalue()) == 0 >>> >>> with mock.patch.object(f, 'close') as cf: ... w.close() ... PcapWriter: unknown LL type for NoneType. Using type 1 (Ethernet) >>> cf.assert_called_once_with() >>> assert len(f.getvalue()) != 0 ###(191)=[passed] Check PcapWriter sets correct linktype after null write >>> f = BytesIO() >>> w = PcapWriter(f) >>> w.write([]) >>> assert len(f.getvalue()) == 0 >>> w.write(Ether()/IP()/ICMP()) >>> assert len(f.getvalue()) != 0 >>> >>> with mock.patch.object(f, 'close') as cf: ... w.close() ... >>> cf.assert_called_once_with() >>> f.seek(0) or None >>> assert len(f.getvalue()) != 0 >>> >>> r = PcapReader(f) >>> f.seek(0) or None >>> assert r.LLcls is Ether >>> assert r.linktype == DLT_EN10MB >>> >>> l = [ p for p in RawPcapReader(f) ] >>> assert len(l) == 1 ###(192)=[passed] Check RawPcapReader on pcap >>> fd = get_temp_file() >>> wrpcap(fd, [Ether()/IP()/ICMP()]) >>> assert len([p for p in RawPcapReader(fd)]) == 1 :2: ResourceWarning: unclosed file <_io.BufferedReader name='/tmp/scapy00e1r7q0'> ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> >>> for (x, y) in RawPcapReader(fd): ... pass ... :2: ResourceWarning: unclosed file <_io.BufferedReader name='/tmp/scapy00e1r7q0'> ResourceWarning: Enable tracemalloc to get the object allocation traceback ###(193)=[passed] Check RawPcapReader with a Context Manager >>> filename = get_temp_file(fd=False) >>> wrpcap(filename, [IP()/TCP(), IP()/UDP()]) >>> >>> try: ... with RawPcapReader(filename) as reader: ... packet = next(reader, None) ... assert True ... except TypeError: ... assert False ... ###(194)=[passed] Check RawPcapWriter >>> fd = get_temp_file() >>> with RawPcapWriter(fd, linktype=1) as w: ... w.write(b"test") ... >>> fd = get_temp_file() >>> with RawPcapWriter(fd) as w: ... w.write(b"test") ... assert w.linktype == 1 ... more RawPcapWriter: unknown LL type for bytes. Using type 1 (Ethernet) ###(195)=[passed] Check tcpdump() No very specific tests because we do not want to depend on tcpdump output Non existing tcpdump binary >>> from io import BytesIO >>> pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x000}$]\xff\\\t\x006\x00\x00\x006\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x000}$]\x87i\t\x00*\x00\x00\x00*\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r0}$]\xfbp\t\x00*\x00\x00\x00*\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00') >>> >>> data = tcpdump(pcapfile, dump=True, args=['-nn']).split(b'\n') /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6410 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback :2: ResourceWarning: unclosed file <_io.BufferedReader name=8> ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> print(data) [b'11:40:32.613631 IP 127.0.0.1.20 > 127.0.0.1.80: Flags [S], seq 0, win 8192, length 0', b'11:40:32.616839 IP 127.0.0.1.53 > 127.0.0.1.53: domain [length 0 < 12] (invalid)', b'11:40:32.618747 IP 127.0.0.1 > 127.0.0.1: ICMP echo request, id 0, seq 0, length 8', b''] >>> assert b'127.0.0.1.20 > 127.0.0.1.80:' in data[0] >>> assert b'127.0.0.1.53 > 127.0.0.1.53:' in data[1] >>> assert b'127.0.0.1 > 127.0.0.1:' in data[2] >>> >>> >>> from unittest import mock >>> >>> conf_prog_tcpdump = conf.prog.tcpdump >>> conf.prog.tcpdump = "tcpdump_fake" >>> >>> def _test_tcpdump_notcpdump(): ... try: ... tcpdump(IP()/TCP()) ... assert False ... except: ... assert True ... >>> _test_tcpdump_notcpdump() >>> conf.prog.tcpdump = conf_prog_tcpdump >>> >>> pcapfile.seek(0) or None >>> tempfile_count = len(conf.temp_files) >>> data = tcpdump(pcapfile, dump=True, args=['-nn'], use_tempfile=True).split(b'\n') :2: ResourceWarning: unclosed file <_io.BufferedReader name=6> ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> print(data) [b'11:40:32.613631 IP 127.0.0.1.20 > 127.0.0.1.80: Flags [S], seq 0, win 8192, length 0', b'11:40:32.616839 IP 127.0.0.1.53 > 127.0.0.1.53: domain [length 0 < 12] (invalid)', b'11:40:32.618747 IP 127.0.0.1 > 127.0.0.1: ICMP echo request, id 0, seq 0, length 8', b''] >>> assert b'127.0.0.1.20 > 127.0.0.1.80:' in data[0] >>> assert b'127.0.0.1.53 > 127.0.0.1.53:' in data[1] >>> assert b'127.0.0.1 > 127.0.0.1:' in data[2] >>> assert len(conf.temp_files) > tempfile_count >>> >>> data = tcpdump([Ether()/IP()/ICMP()], dump=True, args=['-nn']).split(b'\n') :2: ResourceWarning: unclosed file <_io.BufferedReader name=8> ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> print(data) [b'04:11:16.287953 IP 127.0.0.1 > 127.0.0.1: ICMP echo request, id 0, seq 0, length 8', b''] >>> assert b'127.0.0.1 > 127.0.0.1: ICMP' in data[0].upper() ###(196)=[passed] Check tcpdump() command with linktype >>> f = BytesIO() >>> pkt = Ether()/IP()/ICMP() >>> >>> with mock.patch('subprocess.Popen', return_value=Bunch( ... stdin=f, wait=lambda: None)) as popen: ... # Prevent closing the BytesIO ... with mock.patch.object(f, 'close'): ... tcpdump([pkt], linktype="DLT_EN10MB", use_tempfile=False) ... >>> expected_command = [conf.prog.tcpdump, '-y', 'EN10MB', '-U', '-r', '-'] >>> if OPENBSD: ... expected_command = [conf.prog.tcpdump, '-y', 'EN10MB', '-r', '-'] ... >>> popen.assert_called_once_with( ... expected_command, ... stdin=subprocess.PIPE, stdout=None, stderr=None) >>> >>> print(bytes_hex(f.getvalue())) b'd4c3b2a1020004000000000000000000ffff000001000000e47778685c8504002a0000002a000000ffffffffffff00000000000008004500001c0001000040017cde7f0000017f0000010800f7ff00000000' >>> assert raw(pkt) in f.getvalue() >>> f.close() >>> del f, pkt ###(197)=[passed] Check tcpdump() command with linktype and args >>> f = BytesIO() >>> pkt = Ether()/IP()/ICMP() >>> >>> with mock.patch('subprocess.Popen', return_value=Bunch( ... stdin=f, wait=lambda: None)) as popen: ... # Prevent closing the BytesIO ... with mock.patch.object(f, 'close'): ... tcpdump([pkt], linktype=scapy.data.DLT_EN10MB, use_tempfile=False) ... >>> expected_command = [conf.prog.tcpdump, '-y', 'EN10MB', '-U', '-r', '-'] >>> if OPENBSD: ... expected_command = [conf.prog.tcpdump, '-y', 'EN10MB', '-r', '-'] ... >>> popen.assert_called_once_with( ... expected_command, ... stdin=subprocess.PIPE, stdout=None, stderr=None) >>> >>> print(bytes_hex(f.getvalue())) b'd4c3b2a1020004000000000000000000ffff000001000000e47778688bc904002a0000002a000000ffffffffffff00000000000008004500001c0001000040017cde7f0000017f0000010800f7ff00000000' >>> assert raw(pkt) in f.getvalue() >>> f.close() >>> del f, pkt ###(198)=[passed] Check sniff() offline with linktype & 802.11 filter >>> fd = get_temp_file() >>> wrpcap(fd, [RadioTap()/Dot11()/Dot11ProbeReq(), RadioTap()/Dot11()]) >>> lst = sniff(offline=fd, filter="subtype probe-req") /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6417 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert len(lst) == 1 ###(199)=[passed] Check tcpdump() command rejects non-string input for prog >>> pkt = Ether()/IP()/ICMP() >>> >>> try: ... tcpdump([pkt], prog=+17607067425, args=['-nn']) ... except ValueError as e: ... if hasattr(e, 'args'): ... assert 'prog' in e.args[0] ... else: ... assert 'prog' in e.message ... else: ... assert False, 'expected exception' ... ###(200)=[passed] Check tcpdump() command with tshark >>> pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00') >>> tempfile_count = len(conf.temp_files) >>> values = [tuple(int(val) for val in line[:-1].split(b'\t')) for line in tcpdump(pcapfile, prog=conf.prog.tshark, getfd=True, args=['-T', 'fields', '-e', 'ip.ttl', '-e', 'ip.proto'])] /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6420 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert values == [(64, 6), (64, 17), (64, 1)] >>> assert len(conf.temp_files) == tempfile_count ###(201)=[passed] Check tdecode command directly for tshark >>> pkts = [ ... Ether()/IP(src='192.0.2.1', dst='192.0.2.2')/ICMP(type='echo-request')/Raw(b'X'*100), ... Ether()/IP(src='192.0.2.2', dst='192.0.2.1')/ICMP(type='echo-reply')/Raw(b'X'*100), ... ] >>> >>> tempfile_count = len(conf.temp_files) >>> >>> r = tdecode(pkts, dump=True) /usr/lib/python3.14/subprocess.py:831: ResourceWarning: unclosed file <_io.BufferedReader name=8> _cleanup() ResourceWarning: Enable tracemalloc to get the object allocation traceback getmacbyip failed on [Errno 1] Operation not permitted more MAC address to reach destination not found. Using broadcast. getmacbyip failed on [Errno 1] Operation not permitted /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6424 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> r b"Frame 1: 142 bytes on wire (1136 bits), 142 bytes captured (1136 bits)\n Encapsulation type: Ethernet (1)\n Arrival Time: Jul 17, 2025 04:11:16.534052000 UTC\n UTC Arrival Time: Jul 17, 2025 04:11:16.534052000 UTC\n Epoch Arrival Time: 1752725476.534052000\n [Time shift for this packet: 0.000000000 seconds]\n [Time delta from previous captured frame: 0.000000000 seconds]\n [Time delta from previous displayed frame: 0.000000000 seconds]\n [Time since reference or first frame: 0.000000000 seconds]\n Frame Number: 1\n Frame Length: 142 bytes (1136 bits)\n Capture Length: 142 bytes (1136 bits)\n [Frame is marked: False]\n [Frame is ignored: False]\n [Protocols in frame: eth:ethertype:ip:icmp:data]\nEthernet II, Src: 52:54:00:e1:37:0d (52:54:00:e1:37:0d), Dst: Broadcast (ff:ff:ff:ff:ff:ff)\n Destination: Broadcast (ff:ff:ff:ff:ff:ff)\n .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)\n .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)\n Source: 52:54:00:e1:37:0d (52:54:00:e1:37:0d)\n .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)\n .... ...0 .... .... .... .... = IG bit: Individual address (unicast)\n Type: IPv4 (0x0800)\n [Stream index: 0]\nInternet Protocol Version 4, Src: 192.0.2.1, Dst: 192.0.2.2\n 0100 .... = Version: 4\n .... 0101 = Header Length: 20 bytes (5)\n Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)\n 0000 00.. = Differentiated Services Codepoint: Default (0)\n .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)\n Total Length: 128\n Identification: 0x0001 (1)\n 000. .... = Flags: 0x0\n 0... .... = Reserved bit: Not set\n .0.. .... = Don't fragment: Not set\n ..0. .... = More fragments: Not set\n ...0 0000 0000 0000 = Fragment Offset: 0\n Time to Live: 64\n Protocol: ICMP (1)\n Header Checksum: 0xf678 [validation disabled]\n [Header checksum status: Unverified]\n Source Address: 192.0.2.1\n Destination Address: 192.0.2.2\n [Stream index: 0]\nInternet Control Message Protocol\n Type: 8 (Echo (ping) request)\n Code: 0\n Checksum: 0xb6be [correct]\n [Checksum Status: Good]\n Identifier (BE): 0 (0x0000)\n Identifier (LE): 0 (0x0000)\n Sequence Number (BE): 0 (0x0000)\n Sequence Number (LE): 0 (0x0000)\n Data (100 bytes)\n\n0000 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0010 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0020 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0030 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0040 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0050 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0060 58 58 58 58 XXXX\n Data: 58585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858\n [Length: 100]\n\nFrame 2: 142 bytes on wire (1136 bits), 142 bytes captured (1136 bits)\n Encapsulation type: Ethernet (1)\n Arrival Time: Jul 17, 2025 04:11:16.537968000 UTC\n UTC Arrival Time: Jul 17, 2025 04:11:16.537968000 UTC\n Epoch Arrival Time: 1752725476.537968000\n [Time shift for this packet: 0.000000000 seconds]\n [Time delta from previous captured frame: 0.003916000 seconds]\n [Time delta from previous displayed frame: 0.003916000 seconds]\n [Time since reference or first frame: 0.003916000 seconds]\n Frame Number: 2\n Frame Length: 142 bytes (1136 bits)\n Capture Length: 142 bytes (1136 bits)\n [Frame is marked: False]\n [Frame is ignored: False]\n [Protocols in frame: eth:ethertype:ip:icmp:data]\nEthernet II, Src: 52:54:00:e1:37:0d (52:54:00:e1:37:0d), Dst: Broadcast (ff:ff:ff:ff:ff:ff)\n Destination: Broadcast (ff:ff:ff:ff:ff:ff)\n .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)\n .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)\n Source: 52:54:00:e1:37:0d (52:54:00:e1:37:0d)\n .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)\n .... ...0 .... .... .... .... = IG bit: Individual address (unicast)\n Type: IPv4 (0x0800)\n [Stream index: 0]\nInternet Protocol Version 4, Src: 192.0.2.2, Dst: 192.0.2.1\n 0100 .... = Version: 4\n .... 0101 = Header Length: 20 bytes (5)\n Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)\n 0000 00.. = Differentiated Services Codepoint: Default (0)\n .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)\n Total Length: 128\n Identification: 0x0001 (1)\n 000. .... = Flags: 0x0\n 0... .... = Reserved bit: Not set\n .0.. .... = Don't fragment: Not set\n ..0. .... = More fragments: Not set\n ...0 0000 0000 0000 = Fragment Offset: 0\n Time to Live: 64\n Protocol: ICMP (1)\n Header Checksum: 0xf678 [validation disabled]\n [Header checksum status: Unverified]\n Source Address: 192.0.2.2\n Destination Address: 192.0.2.1\n [Stream index: 0]\nInternet Control Message Protocol\n Type: 0 (Echo (ping) reply)\n Code: 0\n Checksum: 0xbebe [correct]\n [Checksum Status: Good]\n Identifier (BE): 0 (0x0000)\n Identifier (LE): 0 (0x0000)\n Sequence Number (BE): 0 (0x0000)\n Sequence Number (LE): 0 (0x0000)\n [Request frame: 1]\n [Response time: 3.916 ms]\n Data (100 bytes)\n\n0000 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0010 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0020 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0030 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0040 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0050 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 XXXXXXXXXXXXXXXX\n0060 58 58 58 58 XXXX\n Data: 58585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858\n [Length: 100]\n\n" >>> assert b'Src: 192.0.2.1' in r >>> assert b'Src: 192.0.2.2' in r >>> assert b'Dst: 192.0.2.2' in r >>> assert b'Dst: 192.0.2.1' in r >>> assert b'Echo (ping) request' in r >>> assert b'Echo (ping) reply' in r >>> assert b'ICMP' in r >>> assert len(conf.temp_files) == tempfile_count ###(202)=[passed] Check tdecode with linktype >>> pkts = [ ... b'\xff\xff\xff\xff\xff\xff\xac"\x0b\xc5j\xdb\x08\x00E\x00\x00\x80\x00\x01\x00\x00@\x01\xf6x\xc0\x00\x02\x01\xc0\x00\x02\x02\x08\x00\xb6\xbe\x00\x00\x00\x00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', ... b'\xff\xff\xff\xff\xff\xff\xac"\x0b\xc5j\xdb\x08\x00E\x00\x00\x80\x00\x01\x00\x00@\x01\xf6x\xc0\x00\x02\x02\xc0\x00\x02\x01\x00\x00\xbe\xbe\x00\x00\x00\x00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', ... ] >>> >>> tempfile_count = len(conf.temp_files) >>> >>> r = tdecode(pkts, dump=True, linktype=DLT_EN10MB) /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6428 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> assert b'Src: 192.0.2.1' in r >>> assert b'Src: 192.0.2.2' in r >>> assert b'Dst: 192.0.2.2' in r >>> assert b'Dst: 192.0.2.1' in r >>> assert b'Echo (ping) request' in r >>> assert b'Echo (ping) reply' in r >>> assert b'ICMP' in r >>> assert len(conf.temp_files) == tempfile_count ###(204)=[passed] Check wireshark() >>> f = BytesIO() >>> pkt = Ether()/IP()/ICMP() >>> >>> with mock.patch('subprocess.Popen', return_value=Bunch(stdin=f)) as popen: ... # Prevent closing the BytesIO ... with mock.patch.object(f, 'close'): ... wireshark([pkt]) ... >>> popen.assert_called_once_with( ... [conf.prog.wireshark, '-ki', '-'], ... stdin=subprocess.PIPE, stdout=None, stderr=None) >>> >>> print(bytes_hex(f.getvalue())) b'd4c3b2a1020004000000000000000000ffff000001000000e4777868ca290d002a0000002a000000ffffffffffff00000000000008004500001c0001000040017cde7f0000017f0000010800f7ff00000000' >>> assert raw(pkt) in f.getvalue() >>> f.close() >>> del f, pkt ###(205)=[passed] Check Raw IP pcap files >>> import tempfile >>> filename = tempfile.mktemp(suffix=".pcap") >>> wrpcap(filename, [IP()/UDP(), IPv6()/UDP()], linktype=DLT_RAW) >>> packets = rdpcap(filename) >>> assert isinstance(packets[0], IP) and isinstance(packets[1], IPv6) ###(206)=[passed] Check wrpcap() with no packet >>> import tempfile >>> filename = tempfile.mktemp(suffix=".pcap") >>> wrpcap(filename, []) >>> fstat = os.stat(filename) >>> assert fstat.st_size != 0 >>> os.remove(filename) ###(207)=[passed] Check wrpcap() with SndRcvList >>> import tempfile >>> filename = tempfile.mktemp(suffix=".pcap") >>> wrpcap(filename, SndRcvList(res=[(Ether()/IP(), Ether()/IP())])) >>> assert len(rdpcap(filename)) == 2 >>> os.remove(filename) ###(208)=[passed] Check wrpcap() with different packets types >>> from unittest import mock >>> import os >>> import tempfile >>> >>> with mock.patch("scapy.utils.warning") as warning: ... filename = tempfile.mktemp() ... wrpcap(filename, [IP(), Ether(), IP(), IP()]) ... os.remove(filename) ... assert any("Inconsistent" in arg for arg in warning.call_args[0]) ... ###(209)=[passed] Check wrpcap() with the Loopback layer >>> for cls in [Loopback, LoopbackOpenBSD]: ... filename = tempfile.mktemp(suffix=".pcap") ... wrpcap(filename, [cls()/IP()/ICMP()]) ... return_value = b"".join(line for line in tcpdump(filename, prog=conf.prog.tshark, getfd=True)) ... assert b"Echo (ping) request" in return_value ... /usr/lib/python3.14/subprocess.py:277: ResourceWarning: unclosed file <_io.BufferedReader name=8> for inst in _active[:]: ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:831: ResourceWarning: unclosed file <_io.BufferedReader name=17> _cleanup() ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6437 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:1138: ResourceWarning: subprocess 6440 is still running _warn("subprocess %s is still running" % self.pid, ResourceWarning: Enable tracemalloc to get the object allocation traceback ###### ## ERF Ethernet format support ###### ###(210)=[passed] Variable creations >>> erffile = BytesIO(b'3;!E_9\x92_\x02\x04\x00p\x00\x00\x00P\x00\x00\x00\x0fS?\xca\xc0\x1cjz\x18\x90\xed\x81\x00\x01:\x08\x00E\x00\x00(\xdf\xab@\x00;\x06\xb3s\n\x01]\xdb\n\xfb9\xda\xc3v\x84\xecD\x16\xb9\xab\xda\xa1b\xf9P\x10f\x98\x18\xcb\x00\x00\x00\x00\x90\x9e\xd7\xd2_\x929_\x0f\x9e\xcd\x1f\x01\x88\xb9\x15[/s<\x01\x88\xb9\x15[/\xcd\x1f\x01\x88\xb9\x15[/0\xcd"E_9\x92_\x02\x04\x00p\x00\x00\x00P\x00\x00\x1cjz\x18\x90\xed\x00\x0fS?\xca\xc0\x08\x00E\x00\x00(\xa2\xdd@\x00@\x06\xebA\n\xfb9\xda\n\x01]\xdb\x84\xec\xc3v\xda\xa1b\xf9D\x16\xb9\xacP\x10\x9a\xf0\xe4q\x00\x00\x00\x00\x00\x00\x00\x00o\xbc\xe2{_\x929_\x0f\x9f+3\x01\x88\xb9\x15u\x1e(^\x01\x88\xb9\x15u\x1e+3\x01\x88\xb9\x15u\x1e') >>> erffilewithheader = BytesIO(b'4;!E_9\x92_\x82\x00\x00x\x00\x00\x00P\x00\x00\x1a+>> pkterf = rderf(erffile) >>> assert pkterf[0].time == 1603418463.270038318 >>> assert pkterf[0][IP].src == "10.1.93.219" >>> assert pkterf[0][IP].dst == "10.251.57.218" >>> assert pkterf[0][Ether].src == "1c:6a:7a:18:90:ed" >>> assert pkterf[0][Ether].dst == "00:0f:53:3f:ca:c0" ###(212)=[passed] Check writing of ERF Ethernet file >>> import os, tempfile >>> fdesc, filename = tempfile.mkstemp() >>> fdesc = os.fdopen(fdesc, "wb") >>> wrerf(fdesc, pkterf) >>> fdesc.close() >>> newpkterf = rderf(filename) >>> >>> assert pkterf[1][Ether].src == newpkterf[1][Ether].src >>> >>> assert len(pkterf) == len(newpkterf) >>> assert newpkterf[0].time is not None >>> assert newpkterf[0].wirelen is not None >>> assert newpkterf[0].time == pkterf[0].time >>> assert newpkterf[0].wirelen == pkterf[0].wirelen >>> assert newpkterf[1].time is not None >>> assert newpkterf[1].wirelen is not None >>> assert newpkterf[1].time == pkterf[1].time >>> assert newpkterf[1].wirelen == pkterf[1].wirelen >>> >>> _, filename = tempfile.mkstemp() >>> wrerf(filename, pkterf, append=True) >>> wrerf(filename, pkterf, append=True) >>> newdoublepkterf = rderf(filename) >>> >>> assert len(newpkterf) * 2 == len(newdoublepkterf) ###(213)=[passed] Check rderf >>> pkterf = rderf(erffilewithheader) >>> assert pkterf[1].time == 1603418463.270062279 >>> assert pkterf[1][Ether].src == "00:0f:53:3f:ca:c0" ###### ## Mocked read_routes() and read_routes6() calls ###### ###(214)=[passed] Create patcher util >>> from unittest import mock >>> >>> from scapy.pton_ntop import inet_pton >>> import scapy.arch.bpf.pfroute >>> >>> og_afinet6 = socket.AF_INET6 >>> og_inet_pton = socket.inet_pton >>> def mock_inet_pton(af, data): ... if af in [24, 28, 30]: ... return og_inet_pton(og_afinet6, data) ... return og_inet_pton(af, data) ... >>> >>> og_inet_ntop = socket.inet_ntop >>> def mock_inet_ntop(af, data): ... if af in [24, 28, 30]: ... return og_inet_ntop(og_afinet6, data) ... return og_inet_ntop(af, data) ... >>> >>> class BSDLoader: ... def __init__(self, OPENBSD=False, FREEBSD=False, NETBSD=False, DARWIN=False, sysctldata=None, ifaces={}, AF_INET6=socket.AF_INET6, IS_64BITS=True): ... self.sysctldata = sysctldata ... self.ifaces = ifaces ... socket.AF_LINK = 18 ... self.loadpatches = [ ... mock.patch('socket.AF_INET6', AF_INET6), ... mock.patch('socket.inet_pton', side_effect=mock_inet_pton), ... mock.patch('socket.inet_ntop', side_effect=mock_inet_ntop), ... mock.patch('scapy.consts.OPENBSD', OPENBSD), ... # mock.patch('scapy.consts.FREEBSD', FREEBSD), ... mock.patch('scapy.consts.NETBSD', NETBSD), ... mock.patch('scapy.consts.DARWIN', DARWIN), ... mock.patch('scapy.consts.IS_64BITS', IS_64BITS), ... ] ... def __enter__(self): ... # Apply patches that only occur when loading ... for p in self.loadpatches: ... p.start() ... # Reload module ... pfroute = importlib.reload(scapy.arch.bpf.pfroute) ... # Now apply post-load patches ... self.patches = [ ... mock.patch.object( ... pfroute, ... '_sr1_bsdsysctl', ... return_value=pfroute.pfmsghdrs(self.sysctldata) ... ), ... mock.patch.object( ... pfroute, ... '_get_if_list', ... return_value=self.ifaces, ... ), ... ] ... for p in self.patches: ... p.start() ... return pfroute ... def __exit__(self, *args, **kwargs): ... for p in self.loadpatches: ... p.stop() ... for p in self.patches: ... p.stop() ... ###(215)=[passed] OpenBSD 7.5 amd64 - read_routes() >>> import zlib >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789c7bc1c0ca92c0c0c8c0c0c0c160cec2c0e0ccc10006de0f1850003f0376c08a431c06049830f96bc40f30e2925710626460636163c828cb3360108d6548e5c4aabf0bc6576248c9482ec8494d2c4e4dc1e78e03607f323380fd09243d71f853109be6067c2623dcf5008d5fcfc080e2cf0f48f20a42cc0c1240e7e4e41be0340f593fbafbbd71b81f2b20d2fdf504dcff9f2aee6704bbdf151873d8dc8f961ce0ee67c4264ec0bd18ee0702cadc0fe2b280ddefc8d880d5fdb80031ee07a66b747e1732ffff7f440a22359f5c80bb9f1912fe2ccc58ddcf03a5cd675f494316c71a2f98f6c1bd09761f1002dd26f4b900bb7ad4f820d73fd0f4c4a280d53f5c04dc4dc03f70fb88711f25fe3980ee1f0607acfe61a7c83fe7ffa3f2d1d317f9ee1f05a360148c8251300a46c128180543030000bd836967')) >>> >>> >>> with BSDLoader(OPENBSD=True, sysctldata=_PFROUTE_DATA, AF_INET6=24) as pfroute: ... routes = pfroute.read_routes() ... >>> >>> assert routes == [ ... (0, 0, '172.23.192.1', 'hvn0', '172.23.192.138', 1), ... (3758096384, 4026531840, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706432, 4278190080, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706433, 4294967295, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2887237632, 4294963200, '172.23.192.138', 'hvn0', '172.23.192.138', 1), ... (2887237633, 4294967295, '0.0.0.0', 'hvn0', '172.23.192.138', 1), ... (2887237770, 4294967295, '0.0.0.0', 'hvn0', '172.23.192.138', 1), ... (2887241727, 4294967295, '172.23.192.138', 'hvn0', '172.23.192.138', 1) ... ] ###(216)=[passed] OpenBSD 7.6 GENERIC#531 i386 - read_routes() >>> import zlib >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789c7bc2c0ca92c0c0c8c0c0c0c160cec2c0e0ccc10006fa760c28c08089012b60c52e0c07024c98fc35120f1871c92b083132b031b331a4a41a3088c632a47262316f8dc4ab1330be12434a4672414e6a62716a0a2e371c00fb919901ec4720e989c38f584103612520373d40e3d73330a0f8f10392bc8210338304d03939f90638cd43d68fee7e6f1ab8bf9e80fbff53c5fd8c60f7bb02630d9bfbb126b1062483f0bb9f111fff3f1050e67e109705ec7e47c606aceec70588713f304fa0f111691ce27e440a22358f5c80bb9f1912fe2ccc58ddbf1c4a478aec4a4716c791f5d1dd0ff726d87d4008749cd0e702ecea51e3835cff40d3138b0256ff781370377eff20ec23c67d94f8e700ba7f181cb0fa673a45fe79ff1f958f9ebec877ff281805a360148c8251300a46c128183a0000223e6527')) >>> >>> with BSDLoader(OPENBSD=True, sysctldata=_PFROUTE_DATA, AF_INET6=24, IS_64BITS=False) as pfroute: ... routes = pfroute.read_routes() ... >>> assert routes == [ ... (0, 0, '172.24.224.1', 'de0', '172.24.234.200', 1), ... (3758096384, 4026531840, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706432, 4278190080, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706433, 4294967295, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2887311360, 4294963200, '172.24.234.200', 'de0', '172.24.234.200', 1), ... (2887311361, 4294967295, '0.0.0.0', 'de0', '172.24.234.200', 1), ... (2887314120, 4294967295, '0.0.0.0', 'de0', '172.24.234.200', 1), ... (2887315455, 4294967295, '172.24.234.200', 'de0', '172.24.234.200', 1) ... ] ###(217)=[passed] OpenBSD 7.5 amd64 - read_routes6() >>> import zlib >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789ced96bb0dc2301086cf38481125a248411131011d3505a2600906406204325a4661040a6a4264f130d6c5b19c87e2f07f458adcd9be2f7fe190984647924414d3a67c1e6252dcf7544f56dfb24cbceac2ac171a7a633a979494e39fce6baffde9e32f94ff8e56eab5e9bfe076c98866ecf6eee7fbf8ebdfa03dffbef2ffcd6f38f977eb9f4eecf5aaf9347fb6311cff8bd77ce3f1bf7acdf7f5bfb18de1f8f3f9fd4bfe8f8a5e67ff9c5f1f8c7f6eaf57cdd79ffffbfe4fd5eb0ef297dcf9aef5a6f77fd5fe7de55f087bdd80f1e7d7b7977fa4fcb7af7bdaf467c7cff899b8f34b7f69abbbe4cfad0f26ffc6ff3ffcfa60f29f0c347f00000000000000000000306a9e0a72ae83')) >>> >>> >>> with BSDLoader(OPENBSD=True, sysctldata=_PFROUTE_DATA, AF_INET6=24) as pfroute: ... routes = pfroute.read_routes6() ... >>> >>> assert routes == [ ... ('::', 96, '::1', 'lo0', ['::1'], 1), ... ('::1', 128, '::1', 'lo0', ['::1'], 1), ... ('::ffff:0.0.0.0', 96, '::1', 'lo0', ['::1'], 1), ... ('2002::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:7f00::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:e000::', 20, '::1', 'lo0', ['::1'], 1), ... ('2002:ff00::', 24, '::1', 'lo0', ['::1'], 1), ... ('fe80::', 10, '::1', 'lo0', ['::1'], 1), ... ('fec0::', 10, '::1', 'lo0', ['::1'], 1), ... ('fe80:3::1', 128, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1), ... ('ff01::', 16, '::1', 'lo0', ['::1'], 1), ... ('ff01:3::', 32, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1), ... ('ff02::', 16, '::1', 'lo0', ['::1'], 1), ... ('ff02:3::', 32, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1) ... ] ###(218)=[passed] OpenBSD 7.6 GENERIC#531 i386 - read_routes6() >>> import zlib >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789ced96310e824010450717136269456141ac2cedac2dacaced3d808947905b781d8ee21138814836226477083b0ae89aff0a9a1966e7e5872c394dc32329228a68533ef71169ae87803a49bb5b16b1b816346b4583aa21992b8acb954fe7b5786efef20db4ef8e96ba68faaeb80929d1ac4dc6e16ca96fe5dc8fef58f9d6397d37df617d93896caf86afd5e087ef45b497ffbe37d15eb56f6e35f8e16be7f4cff9de995e27dfcc6ef0c23793ed35bc6f75ff26ba3840beca3cdba5f6c9fdcbcd1d2bdf8219e7f6fdda0dfde41b6adfedf39e347d59fb949dcb9e5dfaaab65a57bee67b5ee4fbf6ff86dde045be93dfc81700000000000000000000009f7900a834b765')) >>> >>> >>> with BSDLoader(OPENBSD=True, sysctldata=_PFROUTE_DATA, AF_INET6=24, IS_64BITS=False) as pfroute: ... routes = pfroute.read_routes6() ... >>> assert routes == [ ... ('::', 96, '::1', 'lo0', ['::1'], 1), ... ('::1', 128, '::1', 'lo0', ['::1'], 1), ... ('::ffff:0.0.0.0', 96, '::1', 'lo0', ['::1'], 1), ... ('2002::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:7f00::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:e000::', 20, '::1', 'lo0', ['::1'], 1), ... ('2002:ff00::', 24, '::1', 'lo0', ['::1'], 1), ... ('fe80::', 10, '::1', 'lo0', ['::1'], 1), ... ('fec0::', 10, '::1', 'lo0', ['::1'], 1), ... ('fe80:3::1', 128, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1), ... ('ff01::', 16, '::1', 'lo0', ['::1'], 1), ... ('ff01:3::', 32, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1), ... ('ff02::', 16, '::1', 'lo0', ['::1'], 1), ... ('ff02:3::', 32, 'fe80:3::1', 'lo0', ['fe80:3::1'], 1) ... ] ###(219)=[passed] FreeBSD 14.1 amd64 - read_routes() >>> import zlib >>> >>> from scapy.arch.bpf.pfroute import _bsd_iff_flags >>> _FREEBSD_IFACES = {1: {'name': 'lo0', 'index': 1, 'flags': FlagValue(32841, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 28, 'index': 1, 'address': '::1', 'scope': 16}, {'af_family': 28, 'index': 1, 'address': 'fe80::1', 'scope': 32}, {'af_family': 2, 'index': 1, 'address': '127.0.0.1'}]}, 2: {'name': 'hn0', 'index': 2, 'flags': FlagValue(34883, _bsd_iff_flags), 'mac': '00:15:5d:00:65:07', 'ips': [{'af_family': 28, 'index': 2, 'address': 'fe80::215:5dff:fe00:6507', 'scope': 32}, {'af_family': 2, 'index': 2, 'address': '172.23.198.182'}]}} >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789c136064656162606060e660603067200ceeb012a18808c008a55970c80b3061f2d7881f60c4256f21c4c4c0c6ccc6909167c0201acb90ca4ea43b20e61edb8670182b0bc8125606010663620c7020d2220280118d46072077d623490b0831324820c95b80f8cc0c0c39f90624d98b612e343d3002fd3f10e98109873c34fe117c507ca3c9ffffff01cea77a7ae01898f4c08c431edd9de8e141adf40000e8611aa8')) >>> >>> >>> with BSDLoader(FREEBSD=True, sysctldata=_PFROUTE_DATA, ifaces=_FREEBSD_IFACES, AF_INET6=28) as pfroute: ... routes = pfroute.read_routes() ... >>> assert routes == [ ... (0, 0, '172.23.192.1', 'hn0', '172.23.198.182', 1), ... (2130706433, 4294967295, '0.0.0.0', 'lo0', '127.0.0.1', 1), ... (2887237632, 4294963200, '0.0.0.0', 'hn0', '172.23.198.182', 1), ... (2887239350, 4294967295, '0.0.0.0', 'lo0', '127.0.0.1', 1), ... (3758096384, 4026531840, '0.0.0.0', 'lo0', '127.0.0.1', 250), ... (3758096384, 4026531840, '0.0.0.0', 'hn0', '172.23.198.182', 250) ... ] ###(220)=[passed] FreeBSD 14.1 amd64 - read_routes6() >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789ce5553b0e8240109d593e62b72121b1a0e00824165a72042e40696261f40a1ecd837816101236c28461872801e36bb678f3797979bb9ba3e722006c0380030890498aecc0f6f4193e8ec7fb191e295f75d02d3c86083b07e0724b457aa57b93d64f2fd0b0970ccc26ad6781e4a4b0e9d68d1f1d622e7ff29fc95b3f2f6bcddbdafd2cefe33c33f6ede763b87f2e3fb3d64f04bd889f0ec3737e9a3e7a7f691ee9bc4ffd233ad0e858fafd530c6fd3fdedf78fdbd3e44b813c5f4f6fd27a16663f378ecb97f15387aa77d7edf9aaeb1d1fced714a2024e1ba14eaa43454555d6ed46c7d2f97219dea69bfaf7afff41c55c50f9ff3adc3f979f2f44725d78')) >>> >>> >>> with BSDLoader(FREEBSD=True, sysctldata=_PFROUTE_DATA, ifaces=_FREEBSD_IFACES, AF_INET6=28) as pfroute: ... routes = pfroute.read_routes6() ... >>> assert routes == [ ... ('::', 96, '::1', 'lo0', ['::1'], 1), ... ('::1', 128, '::', 'lo0', ['::1'], 1), ... ('::ffff:0.0.0.0', 96, '::1', 'lo0', ['::1'], 1), ... ('fe80::', 10, '::1', 'lo0', ['::1'], 1), ... ('fe80::', 64, '::', 'lo0', ['fe80::1'], 1), ... ('fe80::1', 128, '::', 'lo0', ['fe80::1'], 1), ... ('fe80::', 64, '::', 'hn0', ['fe80::215:5dff:fe00:6507'], 1), ... ('fe80::215:5dff:fe00:6507', 128, '::', 'lo0', ['::1'], 1), ... ('ff02::', 16, '::1', 'lo0', ['::1'], 1), ... ('ff00::', 8, '::', 'lo0', ['::1', 'fe80::1'], 250), ... ('ff00::', 8, '::', 'hn0', ['fe80::215:5dff:fe00:6507'], 250) ... ] ###(221)=[passed] NetBSD 10.0 amd64 - read_routes() >>> import zlib >>> >>> from scapy.arch.bpf.pfroute import _bsd_iff_flags >>> _NETBSD_IFACES = {1: {'name': 'hvn0', 'index': 1, 'flags': FlagValue(34883, _bsd_iff_flags), 'mac': '00:15:5d:00:65:0a', 'ips': [{'af_family': 24, 'index': 1, 'address': 'fe80:1::7184:2b50:9fbe:e337', 'scope': 32}, {'af_family': 2, 'index': 1, 'address': '172.23.207.191'}]}, 2: {'name': 'lo0', 'index': 2, 'flags': FlagValue(32841, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 2, 'index': 2, 'address': '127.0.0.1'}, {'af_family': 24, 'index': 2, 'address': '::1', 'scope': 16}, {'af_family': 24, 'index': 2, 'address': 'fe80:2::1', 'scope': 32}]}} >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789c3bc1c0c2c2c8c0c0c00cc4e60ca8c08a91816640800993bf46fc00868d42428c0c6c2c6c0c196579060ca2b10ca95cc8eacfef87a93b00f407c8486e0e4c7f600311cd94b81ed5ddf5987cb83f58ff0301c85d424c0c12c040cec937c0aa6e07d4fdac0c2c0cc6f4773fdc1de8ee24e4ee0bd0f4c3c88819ee2c2cd471232e7703d30b9c0f4e2758d4b183c2ffff0792d311b1f1402d80ee0e5cfec1161fc8fa6640e383550592a769058cef5d4943e6a3e75f3eb0fb813e108d15fa5c404387e000001e173214')) >>> >>> >>> with BSDLoader(NETBSD=True, sysctldata=_PFROUTE_DATA, ifaces=_NETBSD_IFACES, AF_INET6=24) as pfroute: ... routes = pfroute.read_routes() ... >>> assert routes == [ ... (0, 0, '172.23.192.1', 'hvn0', '172.23.207.191', 1), ... (2130706432, 4294967040, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706433, 4294967295, '0.0.0.0', 'lo0', '127.0.0.1', 1), ... (2887237632, 4294967295, '0.0.0.0', 'hvn0', '172.23.207.191', 1), ... (2887241663, 4294967295, '0.0.0.0', 'lo0', '172.23.207.191', 1), ... (2887237633, 4294967295, '0.0.0.0', 'hvn0', '', 1), ... (3758096384, 4026531840, '0.0.0.0', 'hvn0', '172.23.207.191', 250), ... (3758096384, 4026531840, '0.0.0.0', 'lo0', '127.0.0.1', 250) ... ] ###(222)=[passed] NetBSD 10.0 amd64 - read_routes6() >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789ced97b14ec3301445af4da8aa964a5544a50e1dd8592a31f01b8c2c1d2b31205017d65682ffe86f30213e8331123fd09109d3368a8127fbd9898c2c87de29ce4dac77749f1d0722cb24807e17b8845bd78f1e0f7968326ee48bea62a40cdadeefe712e323e0f67eea350f12e53f35e3d7e67f43c97f8c0c171e75ff31bfae8b72a49cebd2e1a3e57d5d387c38f837489b5f397cb43a7fa5787fafe0fbda07e2f29f89c133e713e9ba4f52e796bc4ff4bddfffc64e907bc9fa442de22e589fc8c0bd29c7c9712bd6276a4dde9f2bde27d275f72aead772dc847b3710c28f3b947e700b939fe7021dc3fd21f986ed9fcb3ab879b89b6234c3bc679e7ff1747eb57e79d78845cdf37928b9eab271db72b5cd53f5f3ce8c94abf18b65f1750fd07c196ee3fb75ffbb42c95597ef7f97edfdd8eb54897aeb949eb79aae53ddc79edca1f7e52d37dbc74441cf9b51f396ff346f1927ef830efa028ffb7c47')) >>> >>> >>> with BSDLoader(NETBSD=True, sysctldata=_PFROUTE_DATA, ifaces=_NETBSD_IFACES, AF_INET6=24) as pfroute: ... routes = pfroute.read_routes6() ... >>> assert routes == [ ... ('::', 104, '::1', 'lo0', ['::1'], 1), ... ('::', 96, '::1', 'lo0', ['::1'], 1), ... ('::1', 128, '::', 'lo0', ['::1'], 1), ... ('::127.0.0.0', 104, '::1', 'lo0', ['::1'], 1), ... ('::224.0.0.0', 100, '::1', 'lo0', ['::1'], 1), ... ('::255.0.0.0', 104, '::1', 'lo0', ['::1'], 1), ... ('::ffff:0.0.0.0', 96, '::1', 'lo0', ['::1'], 1), ... ('2001:db8::', 32, '::1', 'lo0', ['::1'], 1), ... ('2002::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:7f00::', 24, '::1', 'lo0', ['::1'], 1), ... ('2002:e000::', 20, '::1', 'lo0', ['::1'], 1), ... ('2002:ff00::', 24, '::1', 'lo0', ['::1'], 1), ... ('fe80::', 10, '::1', 'lo0', ['::1'], 1), ... ('fe80:1::', 64, '::', 'hvn0', ['fe80:1::7184:2b50:9fbe:e337'], 1), ... ('fe80:1::7184:2b50:9fbe:e337', ... 128, ... '::', ... 'lo0', ... ['fe80:1::7184:2b50:9fbe:e337'], ... 1), ... ('fe80:2::', 64, 'fe80:2::1', 'lo0', ['fe80:2::1'], 1), ... ('fe80:2::1', 128, '::', 'lo0', ['fe80:2::1'], 1), ... ('ff01:1::', 32, '::', 'hvn0', ['fe80:1::7184:2b50:9fbe:e337'], 1), ... ('ff01:2::', 32, '::1', 'lo0', ['::1'], 1), ... ('ff02:1::', 32, '::', 'hvn0', ['fe80:1::7184:2b50:9fbe:e337'], 1), ... ('ff02:2::', 32, '::1', 'lo0', ['::1'], 1), ... ('ff00::', 8, '::', 'hvn0', ['fe80:1::7184:2b50:9fbe:e337'], 250), ... ('ff00::', 8, '::', 'lo0', ['::1', 'fe80:2::1'], 250) ... ] ###(223)=[passed] Darwin 23.6 (MacOS 14.5) x86_64 - read_routes() >>> import zlib >>> >>> from scapy.arch.bpf.pfroute import _bsd_iff_flags >>> _DARWIN_IFACES = {1: {'name': 'lo0', 'index': 1, 'flags': FlagValue(32841, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 2, 'index': 1, 'address': '127.0.0.1'}, {'af_family': 30, 'index': 1, 'address': '::1', 'scope': 16}, {'af_family': 30, 'index': 1, 'address': 'fe80:1::1', 'scope': 32}]}, 2: {'name': 'gif0', 'index': 2, 'flags': FlagValue(32784, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': []}, 3: {'name': 'stf0', 'index': 3, 'flags': FlagValue(0, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': []}, 4: {'name': 'XHC2', 'index': 4, 'flags': FlagValue(0, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': []}, 5: {'name': 'en0', 'index': 5, 'flags': FlagValue(34915, _bsd_iff_flags), 'mac': '52:54:00:09:49:17', 'ips': [{'af_family': 30, 'index': 5, 'address': 'fe80:5::409:eec9:f06c:50ab', 'scope': 32}, {'af_family': 30, 'index': 5, 'address': 'fec0::89e:daf7:5cb1:f1f0', 'scope': 64}, {'af_family': 30, 'index': 5, 'address': 'fec0::c0c4:1f0b:61ba:ea8', 'scope': 64}, {'af_family': 2, 'index': 5, 'address': '10.0.2.15'}]}, 6: {'name': 'utun0', 'index': 6, 'flags': FlagValue(32849, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 30, 'index': 6, 'address': 'fe80:6::d36e:82de:94dc:84fc', 'scope': 32}]}, 7: {'name': 'utun1', 'index': 7, 'flags': FlagValue(32849, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 30, 'index': 7, 'address': 'fe80:7::7ce2:1f7b:2c29:a5ee', 'scope': 32}]}, 8: {'name': 'utun2', 'index': 8, 'flags': FlagValue(32849, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 30, 'index': 8, 'address': 'fe80:8::e4e0:bef:bf56:2605', 'scope': 32}]}, 9: {'name': 'utun3', 'index': 9, 'flags': FlagValue(32849, _bsd_iff_flags), 'mac': '00:00:00:00:00:00', 'ips': [{'af_family': 30, 'index': 9, 'address': 'fe80:9::ce81:b1c:bd2c:69e', 'scope': 32}]}} >>> >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789ccdd94d6813411400e0d9ddcc36e6608d4472a950a8e0d183e8a1a7da5a503008012948b11eaa78f0e6498b180a45c1802d08164f7ab3f4208817b1e84a0ff647ea0fd2832815a5e021018f518931dbce6c5e76df6cb2e36c3a0325bce936fbf5bdd96176669ad00c2584584963e060fd7382e0ed3315fc22a4ed3183718a98260df675f3b8c83c5dc41ceeab7f1acca6ca6366922f451ebf6596598c5d84b8b9f1fd3b01cb8bc58f17a35852e01b337b29b17dd774d5b65a4b97a1dee5c1305772db55f3bba6998b26cc7d6eedf2cc2872ed5ffe5f974df2671abd211eea7a4ce0d9403c59816703e963f7b2508f857b3a5037ef5e72751b34fa581fcf9305fe9ebb4a029785f4b17bd59a5d3661431bb5fbe700b76e2ae780eef2d4619f4f3807c43d1fa5b3e753da587ad7e7b4b11c583aad8d65fe50561bcbc29de7fa589e7c93b5a87ea6d30bcf6eca5a12c082cd77a2269aefd295d280ac45798d2aa541598b052c70edd3ca82ad93986548d612435e8ecb5a605e145986652deaf3f23ba19185c2b83d8b7d8caf61c2c6eedbf7f81a463876ab3d7fa25b62ca4bf5c81b8d2c6b1a59dee96339b9aa8f25b72c6b513ed755732bd12dc1671abe3b71cb9ae099c6deb3b62d97af47b7c455a3196dde03b2fd4e8f4696c72a2cd8781135d178a95bd655586093cfcbab823616e7fb2f590b7c0f505223a72cfd1e10836556d6a2be46e5872a2c2af27234f76053850536d9bc8c54c61fe96219bdf6e9be2e96b1f1a913ba582e5d397bbb5dcbddbac5bd3fdf631536a873d84f1b961bc1d81be6946d69fafb8bcc44492fe1f38cc7680ac24d4dd70a0cade2b035d529f0bdbc56b73ee06b2af7daa7be7abaf72ae6af5a30dec93da17b17266c184739eb1135d9bdf9b9bf8d18db9bb7d97e78a773e46c7e1983f14e3ee7af7fcc27dbb534ea5588e52ce52b88b17ab9cffa4fc4c573441393e02ca520744569cce5ed43ec6667290639b7d5dbe931dd38c18976def40fb15043e2')) >>> >>> >>> with BSDLoader(DARWIN=True, sysctldata=_PFROUTE_DATA, ifaces=_DARWIN_IFACES, AF_INET6=30) as pfroute: ... routes = pfroute.read_routes() ... >>> assert routes == [ ... (0, 0, '10.0.2.2', 'en0', '10.0.2.15', 1), ... (167772672, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (167772674, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (167772674, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (167772675, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (167772687, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (167772927, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (2130706432, 4294967040, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2130706433, 4294967295, '127.0.0.1', 'lo0', '127.0.0.1', 1), ... (2851995648, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (3758096384, 4043308800, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (3758096635, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1), ... (4294967295, 4294967295, '0.0.0.0', 'en0', '10.0.2.15', 1) ... ] ###(224)=[passed] Darwin 23.6 (MacOS 14.5) x86_64 - read_routes6() >>> _PFROUTE_DATA = zlib.decompress(bytes.fromhex('789cd5dd5f8c13451800f0d96dbbdb5e8fbbdaebfd114eaf08148fdc830124045f0a1581981062f48c8698c32022313c1925c2c381f8a0a28290887f728644e0d0aa60ce80e60897887fe08120f060cc051030218af74713088a60b73b5bda6e77f73a33fbcd7dfbc27667d2fefaddb7dfcc6cb7a58f84122142488028e9e9b97f8f90cadb60c8a1c1656bbddbbbed6637297e6635e4d01e8c0c1d1b797ed9a7c67e5fceac99e6f9d35d5edf47b3567c5c73683fbd76d3d91d839b6f58667d0ce695fe99f5e2e3ba43fb860b6deb3bda770f59e6f018cc277597463e73b8f878d8a1fdd2f9e8f091ce54c83247c660be1cf0cd1c293e1e71683fb131da7ab843eb31f6f7e7cc4aeedf503049a6b801d2c2cc0a4fdb7e5a3374a2cdb7bc46fd28ef6c9d7f43a7ceacaad69b5416772d56c94c7a784e715ba59ae1562faaf5fec9ed55d6417a39e23b9b1ec6125fea858d2f87770e32ef5c19de1106efd4e06a920e8669894f0620bd2cf14d91ad64f2dbf308894df8f9a9f4f65d38bcab9079d722f36e42e67d1f99770099f72832ef6554ded4d3130999747c70188db70399772632ef1a64deadc8bcfdc8bcc79179cf48f18eb278833db96585d26e8a6a4aae31f8edbdc4e2d5ee25eaac7f546dfd475757e8e159905e96f57c4a5b5438b63a9eb880cbdb08eabdc2ea8d516f22f0072e6f10d4cb9c0f96b729b810973704ea1de6f64eedc2e59d06ea651a8f4bbcb33b7179ef17e455171a5ec5c35bcd56d93bef075cde07047961c68b6ca6a1458c1726bed94ce345315e98f1229b69fe1dd2cb5b1fb299d41a482fef7891cdcc3826c6eb73fe26cdfdd513b5cd62bcfe7dde52ead541bdccf95bf086f7e1f24640bdcce75bc15bb71797b71ed4cb7bbe65338bbe87f4f2c6379b79380de9e53ddf72de51482ff3fc61b2b9ffe633eb6a9079a390deeb2c5efdef652430ed3962ce226a21bd4ce75ba977022e6f12597c93a0f13df5138337a92c21d763f4110922f14e43e64d21f35ab7c0a2f0aae180e5ba0b99f76e245eeb56752cf1b5ee2c9f24c66baee7831ede6ab6626fcd68e1700c85f7aa68af8f9f1f27952bd17385c30b20bdd718bc334862595a0fd36748aa905e96f90ef5d2af582441c70b96f531f5d6522fe8fd041cf1ad93e165591f9779c3905e8ef8d22bc0b0e71b4b3da3de06195e8ef85a5e0dd2cb91bf2dd45b87c43b917ab1d433cb0b9abf2cd7a3cabca0d7cf583e8f2df382e6ef632c5ee560ba462d4c8041f3e1257e2fe87c6711bf17743c6e64f56a9657d929c6ebdfe7b1796fb8105fd0f1ed04c3fa38ef6db29e5201bd7f5280f72f48efbfacf9db34629140c76301de00a49769be53eabd538cd7e7fad06279c9f85fbf957a41f3e11cb357cefc813dbe72e60fccf537791f3d2aaafefa7cbea5909d6fb7bd3aa497793e999233dfb9c9ea9d5fd76d8a60f3418017b49eb5f27b41c70b01f105adbf02bc2164def17fbd2fe76de832eb426e038daf002fb6f8828e6f02bca0d74b047823c8bca0d753057841ef4714e005bd5f4e8017f47e39015ed0ebebcff27beb21bd02e20b7a7f8900ef1d905ea6fb4bd4d45c73964e9f1ed0cbf47961a917b49e317d7ea1a646b46e53bcfce53def427a99ee8729f57e8bccfb1ba497e97e8d9c771bad0b5db1eba0eb0b015ed0f585002fe8fa428017747d21c00bbabe6862f72e34f69b17c37ae3fcde6648af80f80ababf1a2cbe6d90de667e6f1299773232ef3dc8bc539079a7427a1f62f686bb2909f4f7f038bcafcbf03eceed6d7e02d2cb11df2d9484251fb6c9f072e4c376f3119a7cf89a9240e39b64f6d6bf623e8a7f07e97d92dd4bebc383a0df2fe4f06e91e1e5c887f7cc47b0f9c03e5f6fd8489f612912ef6b32bcacd727735e29f3878becde3764787f65f7be23c3cb910fdb917977caf0b2cf771a3e301fc1ce7738ceb70f2909cbf9d623c3cb91bfbb647839f2618f0c2fc7f946bdb0e71b47feeea5242cf9db2bc3cb11df7d32bc1cf3c94fe83380ce27c9695e6f3be8fd041cde2c32ef67c8bc9fcbf0728c6f5f5012687de0882ff5a2c9870332bc1ce3c5979484251ffacc4768f2e12b64de8332bc1cf5ec102561c95fea858def7fccf16da4d74b26fc88c4db23c3cb743fad9aba463e26247b7e45a8bc6d9c7bf5f2b671eead41e6ad45e6ad47e68d61f12a4d86f72d34f940bd75d0de192cdee0d205e6afbc1a9bfe22a497e9f7b90cef1aeb68f055486f1bb7577f81c73b90f31a5f3c5188a24c27a4f02514db667b0763f7e65ed7f6b40e6df9fdd8add2cdad6f2ff5878249650a8c3fbf9f882ba4a58afe87685e28b9401b71561d5e93e7772bcafef6c47486cc2ff8166d2ef1b5e5472f7587826aa311dfe3f43df8e8566fbb35f248272904cbcb599c078e5b9adf59fcba05e7a324b2a4d9bbbf71be197f0feb7cf3290fcaffe4b6b6d36b379ddd31b8f986b1ef920fb6be4071b6bd6e22aed992ceadbf11676332ed15e7957c71d6bdda365c685bdfd1be7bc8d87789b3ad2f509c6daf9b88eb6e71b6f537e26c7c01c52bce276d91aaca19f66abb743e3a7ca43395ff6bbac4d9d61728ceb6d74dc4c36e71b6f537e26c7c11c52bce97035cce8857db898dd1d6c31d5afe5a804b9c6d7d81e26c7bdd443ce216675bffa2719af8569f07ec6d02c7e9427c15fac68bdf8397bbd2fb7570f38ed3c4b73ca0ce70cf2fd7961f181d2971561aa72bf487740e1c6d8baef8a6ae77accee2fefdd6fc5de956acff7045b4f3964b5bd996cfb88895b01efdfa0ae79abb9de75cab64af74ae553257cadf7e6bfe066c769beb38d86dfdfaad3991879d674ee461b7cd1f1cecb67efdd63cc3c3ce33cff0b0dbc66407bbad5fbf35767bd879c66e0fbb6d9c73b0dbfa81d4970aeb49b7ba515b614cacd40fa4be28635b7357324bab2f4a75eb4307bb9cfaa254b7e672b0cba92f4a75eb1807bb9cfaa254b73670b0cba92f2ae2faa222ac2f2ae2faa222ae2f2ae2faa2fa535ffe079dfe8806')) >>> >>> >>> with BSDLoader(DARWIN=True, sysctldata=_PFROUTE_DATA, ifaces=_DARWIN_IFACES, AF_INET6=30) as pfroute: ... routes = pfroute.read_routes6() ... >>> assert routes == [ ... ('::', 0, 'fe80:5::2', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('::', 0, 'fe80:6::', 'utun0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('::', 0, 'fe80:7::', 'utun1', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('::', 0, 'fe80:8::', 'utun2', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('::', 0, 'fe80:9::', 'utun3', ['fe80:9::ce81:b1c:bd2c:69e'], 1), ... ('::1', 128, '::1', 'lo0', ['::1'], 1), ... ('fe80:1::', 64, 'fe80:1::1', 'lo0', ['fe80:1::1'], 1), ... ('fe80:1::1', 128, '::', 'lo0', ['fe80:1::1'], 1), ... ('fe80:5::', 64, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('fe80:5::2', 128, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('fe80:5::409:eec9:f06c:50ab', 128, '::', 'lo0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('fe80:6::', 64, 'fe80:6::d36e:82de:94dc:84fc', 'utun0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('fe80:6::d36e:82de:94dc:84fc', 128, '::', 'lo0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('fe80:7::', 64, 'fe80:7::7ce2:1f7b:2c29:a5ee', 'utun1', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('fe80:7::7ce2:1f7b:2c29:a5ee', 128, '::', 'lo0', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('fe80:8::', 64, 'fe80:8::e4e0:bef:bf56:2605', 'utun2', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('fe80:8::e4e0:bef:bf56:2605', 128, '::', 'lo0', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('fe80:9::', 64, 'fe80:9::ce81:b1c:bd2c:69e', 'utun3', ['fe80:9::ce81:b1c:bd2c:69e'], 1), ... ('fe80:9::ce81:b1c:bd2c:69e', 128, '::', 'lo0', ['fe80:9::ce81:b1c:bd2c:69e'], 1), ... ('fec0::', 64, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('fec0::2', 128, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('fec0::89e:daf7:5cb1:f1f0', 128, '::', 'lo0', ['fec0::89e:daf7:5cb1:f1f0'], 1), ... ('fec0::c0c4:1f0b:61ba:ea8', 128, '::', 'lo0', ['fec0::c0c4:1f0b:61ba:ea8'], 1), ... ('ff00::', 8, '::1', 'lo0', ['::1'], 1), ... ('ff00::', 8, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('ff00::', 8, 'fe80:6::d36e:82de:94dc:84fc', 'utun0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('ff00::', 8, 'fe80:7::7ce2:1f7b:2c29:a5ee', 'utun1', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('ff00::', 8, 'fe80:8::e4e0:bef:bf56:2605', 'utun2', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('ff00::', 8, 'fe80:9::ce81:b1c:bd2c:69e', 'utun3', ['fe80:9::ce81:b1c:bd2c:69e'], 1), ... ('ff01:1::', 32, '::1', 'lo0', ['::1'], 1), ... ('ff01:5::', 32, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('ff01:6::', 32, 'fe80:6::d36e:82de:94dc:84fc', 'utun0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('ff01:7::', 32, 'fe80:7::7ce2:1f7b:2c29:a5ee', 'utun1', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('ff01:8::', 32, 'fe80:8::e4e0:bef:bf56:2605', 'utun2', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('ff01:9::', 32, 'fe80:9::ce81:b1c:bd2c:69e', 'utun3', ['fe80:9::ce81:b1c:bd2c:69e'], 1), ... ('ff02:1::', 32, '::1', 'lo0', ['::1'], 1), ... ('ff02:5::', 32, '::', 'en0', ['fe80:5::409:eec9:f06c:50ab'], 1), ... ('ff02:6::', 32, 'fe80:6::d36e:82de:94dc:84fc', 'utun0', ['fe80:6::d36e:82de:94dc:84fc'], 1), ... ('ff02:7::', 32, 'fe80:7::7ce2:1f7b:2c29:a5ee', 'utun1', ['fe80:7::7ce2:1f7b:2c29:a5ee'], 1), ... ('ff02:8::', 32, 'fe80:8::e4e0:bef:bf56:2605', 'utun2', ['fe80:8::e4e0:bef:bf56:2605'], 1), ... ('ff02:9::', 32, 'fe80:9::ce81:b1c:bd2c:69e', 'utun3', ['fe80:9::ce81:b1c:bd2c:69e'], 1) ... ] ###### ## Mocked _parse_tcpreplay_result(stdout, stderr, argv, results_dict) ###### ###(225)=[passed] Test mocked _parse_tcpreplay_result >>> from scapy.sendrecv import _parse_tcpreplay_result >>> >>> stdout = """Actual: 1024 packets (198929 bytes) sent in 67.88 seconds. ... Rated: 2930.6 bps, 0.02 Mbps, 15.09 pps ... Statistics for network device: mon0 ... Attempted packets: 1024 ... Successful packets: 1024 ... Failed packets: 0 ... Retried packets (ENOBUFS): 0 ... Retried packets (EAGAIN): 0""" >>> >>> stderr = """Warning in sendpacket.c:sendpacket_open_pf() line 669: ... Unsupported physical layer type 0x0323 on mon0. Maybe it works, maybe it won't. See tickets #123/318 ... sending out mon0 ... processing file: replay-example.pcap""" >>> >>> argv = ['tcpreplay', '--intf1=mon0', '--multiplier=1.00', '--timer=nano', 'replay-example.pcap'] >>> results_dict = _parse_tcpreplay_result(stdout, stderr, argv) >>> >>> results_dict {'packets': 1024, 'bytes': 198929, 'time': 67.88, 'bps': 2930.6, 'mbps': 0.02, 'pps': 15.09, 'attempted': 1024, 'successful': 1024, 'failed': 0, 'retried_enobufs': 0, 'retried_eagain': 0, 'command': 'tcpreplay --intf1=mon0 --multiplier=1.00 --timer=nano replay-example.pcap', 'warnings': ['Warning in sendpacket.c:sendpacket_open_pf() line 669:', "Unsupported physical layer type 0x0323 on mon0. Maybe it works, maybe it won't. See tickets #123/318", 'sending out mon0']} >>> >>> assert results_dict["packets"] == 1024 >>> assert results_dict["bytes"] == 198929 >>> assert results_dict["time"] == 67.88 >>> assert results_dict["bps"] == 2930.6 >>> assert results_dict["mbps"] == 0.02 >>> assert results_dict["pps"] == 15.09 >>> assert results_dict["attempted"] == 1024 >>> assert results_dict["successful"] == 1024 >>> assert results_dict["failed"] == 0 >>> assert results_dict["retried_enobufs"] == 0 >>> assert results_dict["retried_eagain"] == 0 >>> assert results_dict["command"] == " ".join(argv) >>> assert len(results_dict["warnings"]) == 3 ###(226)=[passed] Test more recent version with flows >>> data = """Actual: 1 packets (42 bytes) sent in 0.000278 seconds ... Rated: 151079.1 Bps, 1.20 Mbps, 3597.12 pps ... Flows: 1 flows, 3597.12 fps, 1 flow packets, 0 non-flow ... Statistics for network device: enp0s3 ... Successful packets: 1 ... Failed packets: 0 ... Truncated packets: 0 ... Retried packets (ENOBUFS): 0 ... Retried packets (EAGAIN): 0 ... """ >>> >>> results_dict = _parse_tcpreplay_result(data, "", []) >>> results_dict {'packets': 1, 'bytes': 42, 'time': 0.000278, 'bps': 151079.1, 'mbps': 1.2, 'pps': 3597.12, 'flows': 1, 'fps': 3597.12, 'flow_packets': 1, 'non_flow': 0, 'successful': 1, 'failed': 0, 'truncated': 0, 'retried_enobufs': 0, 'retried_eagain': 0, 'command': '', 'warnings': []} >>> >>> expected = { ... 'bps': 151079.1, ... 'bytes': 42, ... 'command': '', ... 'failed': 0, ... 'flow_packets': 1, ... 'flows': 1, ... 'fps': 3597.12, ... 'mbps': 1.2, ... 'non_flow': 0, ... 'packets': 1, ... 'pps': 3597.12, ... 'retried_eagain': 0, ... 'retried_enobufs': 0, ... 'successful': 1, ... 'time': 0.000278, ... 'truncated': 0, ... 'warnings': [] ... } >>> >>> assert results_dict == expected ###### ## Mocked route() calls ###### ###(227)=[passed] Mocked IPv4 routes calls >>> import scapy >>> >>> conf.ifaces._add_fake_iface("enp3s0") >>> conf.ifaces._add_fake_iface("lo") >>> >>> old_iface = conf.iface >>> old_loopback = conf.loopback_name >>> try: ... conf.iface = 'enp3s0' ... conf.loopback_name = 'lo' ... conf.route.invalidate_cache() ... conf.route.routes = [ ... (4294967295, 4294967295, '0.0.0.0', 'wlan0', '', 281), ... (4294967295, 4294967295, '0.0.0.0', 'lo', '', 291), ... (4294967295, 4294967295, '0.0.0.0', 'enp3s0', '192.168.0.119', 281), ... (3758096384, 4026531840, '0.0.0.0', 'lo', '', 291), ... (3758096384, 4026531840, '0.0.0.0', 'wlan0', '', 281), ... (3758096384, 4026531840, '0.0.0.0', 'enp3s0', '1.1.1.1', 281), ... (3232235775, 4294967295, '0.0.0.0', 'enp3s0', '2.2.2.2', 281), ... (3232235639, 4294967295, '0.0.0.0', 'enp3s0', '3.3.3.3', 281), ... (3232235520, 4294967040, '0.0.0.0', 'enp3s0', '4.4.4.4', 281), ... (0, 0, '192.168.0.254', 'enp3s0', '0.0.0.0', 25) ... ] ... assert conf.route.route("192.168.0.0-10") == ('enp3s0', '4.4.4.4', '0.0.0.0') ... assert conf.route.route("192.168.0.119") == ('lo', '192.168.0.119', '0.0.0.0') ... assert conf.route.route("224.0.0.0") == ('enp3s0', '1.1.1.1', '0.0.0.0') ... assert conf.route.route("255.255.255.255") == ('enp3s0', '192.168.0.119', '0.0.0.0') ... assert conf.route.route("*") == ('enp3s0', '4.4.4.4', '192.168.0.254') ... finally: ... conf.loopback_name = old_loopback ... conf.iface = old_iface ... conf.route.resync() ... conf.ifaces.reload() ... This interface is not specified in any provider ! See conf.ifaces output ###(228)=[passed] Mocked IPv6 routes calls >>> conf.ifaces._add_fake_iface("enp3s0") >>> conf.ifaces._add_fake_iface("lo") >>> >>> old_iface = conf.iface >>> old_loopback = conf.loopback_name >>> try: ... conf.route6.ipv6_ifaces = set(['enp3s0', 'wlan0', 'lo']) ... conf.iface = 'enp3s0' ... conf.loopback_name = 'lo' ... conf.route6.invalidate_cache() ... conf.route6.routes = [ ... ('fe80::dd17:1fa6:a123:ab4', 128, '::', 'lo', ['fe80::dd17:1fa6:a123:ab4'], 291), ... ('fe80::7101:5678:1234:da65', 128, '::', 'enp3s0', ['fe80::7101:5678:1234:da65'], 281), ... ('fe80::1f:ae12:4d2c:abff', 128, '::', 'wlan0', ['fe80::1f:ae12:4d2c:abff'], 281), ... ('fe80::', 64, '::', 'wlan0', ['fe80::1f:ae12:4d2c:abff'], 281), ... ('fe80::', 64, '::', 'lo', ['fe80::dd17:1fa6:a123:ab4'], 291), ... ('fe80::', 64, '::', 'enp3s0', ['fe80::7101:5678:1234:da65'], 281), ... ('2a01:e35:1e06:ab56:7010:6548:9646:fa77', 128, '::', 'enp3s0', ['2a01:e35:1e06:ab56:7010:6548:9646:fa77', '2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8'], 281), ... ('2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8', 128, '::', 'enp3s0', ['2a01:e35:1e06:ab56:7010:6548:9646:fa77', '2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8'], 281), ... ('2a01:e35:1e06:ab56::', 64, '::', 'enp3s0', ['2a01:e35:1e06:ab56:7010:6548:9646:fa77', '2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8'], 281), ... ('::', 0, 'fe80::160c:64aa:ef6f:fe14', 'enp3s0', ['2a01:e35:1e06:ab56:7010:6548:9646:fa77', '2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8'], 281) ... ] ... assert conf.route6.route("2a01:e35:1e06:ab56:512:8bb7:8ab8:14a8") == ('enp3s0', '2a01:e35:1e06:ab56:7010:6548:9646:fa77', '::') ... assert conf.route6.route("::1") == ('enp3s0', '2a01:e35:1e06:ab56:7010:6548:9646:fa77', 'fe80::160c:64aa:ef6f:fe14') ... assert conf.route6.route("ff02::1") == ('enp3s0', 'fe80::7101:5678:1234:da65', '::') ... assert conf.route6.route("fe80::1") == ('enp3s0', 'fe80::7101:5678:1234:da65', '::') ... assert conf.route6.route("fe80::1", dev='lo') == ('lo', 'fe80::dd17:1fa6:a123:ab4', '::') ... finally: ... conf.loopback_name = old_loopback ... conf.iface = old_iface ... conf.route6.resync() ... conf.ifaces.reload() ... This interface is not specified in any provider ! See conf.ifaces output ###(229)=[passed] Windows: reset routes properly >>> if WINDOWS: ... from scapy.arch.windows import _route_add_loopback ... _route_add_loopback() ... ###### ## Tests of StreamSocket ###### ###(230)=[passed] Test with DNS over TCP >>> import socket >>> sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> sck.connect(("8.8.8.8", 53)) >>> >>> class DNSTCP(Packet): ... name = "DNS over TCP" ... fields_desc = [ FieldLenField("len", None, fmt="!H", length_of="dns"), ... PacketLenField("dns", 0, DNS, length_from=lambda p: p.len)] ... >>> ssck = StreamSocket(sck, DNSTCP) >>> >>> r = ssck.sr1(DNSTCP(dns=DNS(rd=1, qd=DNSQR(qname="www.example.com"))), timeout=3) Received 1 packets, got 1 answers, remaining 0 packets >>> sck.close() >>> assert DNSTCP in r and len(r.dns.an) ###### ## Tests of SSLStreamContext ###### ###(231)=[passed] Test with recv() calls that return exact packet-length rawings >>> import socket >>> class MockSocket(object): ... def __init__(self): ... self.l = [ b'\x00\x00\x00\x01', b'\x00\x00\x00\x02', b'\x00\x00\x00\x03' ] ... def recv(self, x): ... if len(self.l) == 0: ... return b"" ... return self.l.pop(0) ... def fileno(self): ... return -1 ... def close(self): ... return ... >>> >>> class TestPacket(Packet): ... name = 'TestPacket' ... fields_desc = [ ... IntField('data', 0) ... ] ... def guess_payload_class(self, p): ... return conf.padding_layer ... >>> s = MockSocket() >>> ss = SSLStreamSocket(s, basecls=TestPacket) >>> >>> p = ss.recv() >>> assert p.data == 1 >>> p = ss.recv() >>> assert p.data == 2 >>> p = ss.recv() >>> assert p.data == 3 >>> try: ... ss.recv() ... ret = False ... except EOFError: ... ret = True ... >>> assert ret ###(232)=[passed] Test with recv() calls that return twice as much data as the exact packet-length >>> import socket >>> class MockSocket(object): ... def __init__(self): ... self.l = [ b'\x00\x00\x00\x01\x00\x00\x00\x02', b'\x00\x00\x00\x03\x00\x00\x00\x04' ] ... def recv(self, x): ... if len(self.l) == 0: ... return b"" ... return self.l.pop(0) ... def fileno(self): ... return -1 ... def close(self): ... return ... >>> >>> class TestPacket(Packet): ... name = 'TestPacket' ... fields_desc = [ ... IntField('data', 0) ... ] ... def guess_payload_class(self, p): ... return conf.padding_layer ... >>> s = MockSocket() >>> ss = SSLStreamSocket(s, basecls=TestPacket) >>> >>> p = ss.recv() >>> assert p.data == 1 >>> p = ss.recv() >>> assert p.data == 2 >>> p = ss.recv() >>> assert p.data == 3 >>> p = ss.recv() >>> assert p.data == 4 >>> try: ... ss.recv() ... ret = False ... except EOFError: ... ret = True ... >>> assert ret ###(233)=[passed] Test with recv() calls that return not enough data >>> import socket >>> class MockSocket(object): ... def __init__(self): ... self.l = [ b'\x00\x00', b'\x00\x01', b'\x00\x00\x00', b'\x02', b'\x00\x00', b'\x00', b'\x03' ] ... def recv(self, x): ... if len(self.l) == 0: ... return b"" ... return self.l.pop(0) ... def fileno(self): ... return -1 ... def close(self): ... return ... >>> >>> class TestPacket(Packet): ... name = 'TestPacket' ... fields_desc = [ ... IntField('data', 0) ... ] ... def guess_payload_class(self, p): ... return conf.padding_layer ... >>> s = MockSocket() >>> ss = SSLStreamSocket(s, basecls=TestPacket) >>> >>> p = ss.recv() >>> assert p.data == 1 >>> >>> p = ss.recv() >>> assert p.data == 2 >>> >>> p = ss.recv() >>> assert p.data == 3 >>> >>> try: ... ss.recv() ... ret = False ... except EOFError: ... ret = True ... >>> assert ret ###### ## Test correct conversion from binary to rawing of IPv6 addresses ###### ###(234)=[passed] IPv6 bin to rawing conversion >>> from scapy.pton_ntop import _inet6_ntop, inet_ntop >>> import socket >>> for binfrm, address in [ ... (b'\x00' * 16, '::'), ... (b'\x11\x11\x22\x22\x33\x33\x44\x44\x55\x55\x66\x66\x77\x77\x88\x88', ... '1111:2222:3333:4444:5555:6666:7777:8888'), ... (b'\x11\x11\x22\x22\x33\x33\x44\x44\x55\x55\x00\x00\x00\x00\x00\x00', ... '1111:2222:3333:4444:5555::'), ... (b'\x00\x00\x00\x00\x00\x00\x44\x44\x55\x55\x66\x66\x77\x77\x88\x88', ... '::4444:5555:6666:7777:8888'), ... (b'\x00\x00\x00\x00\x33\x33\x44\x44\x00\x00\x00\x00\x00\x00\x88\x88', ... '0:0:3333:4444::8888'), ... (b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ... '1::'), ... (b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', ... '::1'), ... (b'\x11\x11\x00\x00\x00\x00\x44\x44\x00\x00\x00\x00\x77\x77\x88\x88', ... '1111::4444:0:0:7777:8888'), ... (b'\x10\x00\x02\x00\x00\x30\x00\x04\x00\x05\x00\x60\x07\x00\x80\x00', ... '1000:200:30:4:5:60:700:8000'), ... ]: ... addr1 = inet_ntop(socket.AF_INET6, binfrm) ... addr2 = _inet6_ntop(binfrm) ... assert address == addr1 == addr2 ... ###(235)=[passed] IPv6 bin to rawing conversion - Zero-block of length 1 >>> binfrm = b'\x11\x11\x22\x22\x33\x33\x44\x44\x55\x55\x66\x66\x00\x00\x88\x88' >>> addr1, addr2 = inet_ntop(socket.AF_INET6, binfrm), _inet6_ntop(binfrm) >>> assert(addr1 in ['1111:2222:3333:4444:5555:6666:0:8888', ... '1111:2222:3333:4444:5555:6666::8888']) >>> assert addr2 == '1111:2222:3333:4444:5555:6666:0:8888' ###(236)=[passed] IPv6 bin to rawing conversion - Illegal sizes >>> for binfrm in ["\x00" * 15, b"\x00" * 17]: ... rc = False ... try: ... inet_ntop(socket.AF_INET6, binfrm) ... except Exception as exc1: ... _exc1 = exc1 ... rc = True ... assert rc ... try: ... _inet6_ntop(binfrm) ... except Exception as exc2: ... rc = isinstance(exc2, type(_exc1)) ... assert rc ... ###### ## Addresses generators ###### ###(237)=[passed] Net >>> assert list(Net("192.168.0.0/31")) == ["192.168.0.0", "192.168.0.1"] >>> >>> assert "1.2.3.4" in Net("0.0.0.0/0") >>> >>> assert "192.168.0.0/25" in Net("192.168.0.0/24") >>> >>> assert "192.168.0.0/23" not in Net("192.168.0.0/24") >>> >>> assert "0.0.0.0/1" in Net("0.0.0.0/0") >>> >>> assert "0.0.0.0/0" not in Net("0.0.0.0/1") >>> >>> assert Net("1.2.3.0/24") == Net("1.2.3.0", "1.2.3.255") >>> >>> assert hash(Net("1.2.3.0/24")) == hash(Net("1.2.3.0", "1.2.3.255")) ###(238)=[passed] Net using name >>> ip = IP(dst="www.google.com") >>> n1 = ip.dst >>> assert isinstance(n1, Net) >>> ip.show() ###[ IP ]### version = 4 ihl = None tos = 0x0 len = None id = 1 flags = frag = 0 ttl = 64 proto = hopopt chksum = None src = 192.168.122.12 dst = Net("www.google.com/32") \options \ ###(239)=[passed] Net using implicit format in IP >>> assert len(list(IP(dst=("192.168.0.100", "192.168.0.199")))) == 100 ###(240)=[passed] Multiple IP addresses test >>> ip = IP(dst=['192.168.0.1', 'www.google.fr'],ihl=(1,5)) >>> assert ip.dst[0] == '192.168.0.1' >>> assert isinstance(ip.dst[1], Net) >>> src = ip.src >>> assert src >>> assert isinstance(src, str) ###(241)=[passed] OID >>> oid = OID("1.2.3.4.5.6-8") >>> sum(1 for o in oid) == 3 True >>> assert oid.__iterlen__() == 3 ###(242)=[passed] Net6 >>> n1 = Net6("2001:db8::/127") >>> assert len(list(n1)) == 2 >>> assert len(n1) == 2 >>> >>> n2 = Net6("fec0::/110") >>> assert len(n2) == 262144 >>> >>> assert "ffff::ffff" in Net6("::/0") >>> >>> assert "::/1" in Net6("::/0") >>> >>> assert "::/0" not in Net6("::/1") >>> >>> assert Net6("::/120") == Net6("::", "::ff") >>> >>> assert hash(Net6("::/120")) == hash(Net6("::", "::ff")) >>> >>> assert Net6("::1.2.3.0/120") == Net6("::1.2.3.0", "::1.2.3.255") >>> >>> assert hash(Net6("::1.2.3.0/120")) == hash(Net6("::1.2.3.0", "::1.2.3.255")) >>> >>> assert Net6("::1.2.3.0/120") != Net("1.2.3.0/24") >>> >>> assert hash(Net6("::1.2.3.0/120")) != hash(Net("1.2.3.0/24")) ###(244)=[passed] Net6 using implicit format in IPv6 >>> assert len(list(IPv6(dst=("fe80::1", "fe80::1f")))) == 31 ###(246)=[passed] Test repr on Net >>> conf.color_theme = BlackAndWhite() >>> output = repr(IP(src="www.google.com")) >>> assert 'Net("www.google.com/32")' in output ###### ## IPv6 helpers ###### ###(248)=[passed] in6_getLocalUniquePrefix() >>> p = in6_getLocalUniquePrefix() >>> len(inet_pton(socket.AF_INET6, p)) == 16 and p.startswith("fd") True ###(249)=[passed] Misc addresses manipulation functions >>> teredoAddrExtractInfo("2001:0:0a0b:0c0d:0028:f508:f508:08f5") == ("10.11.12.13", 40, "10.247.247.10", 2807) True >>> >>> ip6 = IP6Field("test", None) >>> ip6.i2repr("", "2001:0:0a0b:0c0d:0028:f508:f508:08f5") == "2001:0:0a0b:0c0d:0028:f508:f508:08f5 [Teredo srv: 10.11.12.13 cli: 10.247.247.10:2807]" True >>> ip6.i2repr("", "2002:0102:0304::1") == "2002:0102:0304::1 [6to4 GW: 1.2.3.4]" True >>> >>> in6_iseui64("fe80::bae8:58ff:fed4:e5f6") == True True >>> >>> in6_isanycast("2001:db8::fdff:ffff:ffff:ff80") == True True >>> >>> a = inet_pton(socket.AF_INET6, "2001:db8::2807") >>> in6_xor(a, a) == b"\x00" * 16 True >>> >>> a = inet_pton(socket.AF_INET6, "fe80::bae8:58ff:fed4:e5f6") >>> r = inet_ntop(socket.AF_INET6, in6_getnsma(a)) >>> r == "ff02::1:ffd4:e5f6" True >>> >>> in6_isllsnmaddr(r) == True True >>> >>> in6_isdocaddr("2001:db8::2807") == True True >>> >>> in6_isaddrllallnodes("ff02::1") == True True >>> >>> in6_isaddrllallservers("ff02::2") == True True ###(250)=[passed] in6_getscope() >>> assert in6_getscope("2001:db8::2807") == IPV6_ADDR_GLOBAL >>> assert in6_getscope("fec0::2807") == IPV6_ADDR_SITELOCAL >>> assert in6_getscope("fe80::2807") == IPV6_ADDR_LINKLOCAL >>> assert in6_getscope("ff02::2807") == IPV6_ADDR_LINKLOCAL >>> assert in6_getscope("ff0e::2807") == IPV6_ADDR_GLOBAL >>> assert in6_getscope("ff05::2807") == IPV6_ADDR_SITELOCAL >>> assert in6_getscope("ff01::2807") == IPV6_ADDR_LOOPBACK >>> assert in6_getscope("::1") == IPV6_ADDR_LOOPBACK ###(251)=[passed] construct_source_candidate_set() >>> dev_addresses = [('fe80::', IPV6_ADDR_LINKLOCAL, "linklocal"),('fec0::', IPV6_ADDR_SITELOCAL, "sitelocal"),('ff0e::', IPV6_ADDR_GLOBAL, "global")] >>> >>> assert construct_source_candidate_set("2001:db8::2807", 0, dev_addresses) == ["ff0e::"] >>> assert construct_source_candidate_set("fec0::2807", 0, dev_addresses) == ["fec0::"] >>> assert construct_source_candidate_set("fe80::2807", 0, dev_addresses) == ["fe80::"] >>> assert construct_source_candidate_set("ff02::2807", 0, dev_addresses) == ["fe80::"] >>> assert construct_source_candidate_set("ff0e::2807", 0, dev_addresses) == ["ff0e::"] >>> assert construct_source_candidate_set("ff05::2807", 0, dev_addresses) == ["fec0::"] >>> assert construct_source_candidate_set("ff01::2807", 0, dev_addresses) == ["::1"] >>> assert construct_source_candidate_set("::", 0, dev_addresses) == ["ff0e::"] ###(252)=[passed] inet_pton() >>> from scapy.pton_ntop import _inet6_pton, inet_pton >>> import socket >>> >>> ip6_bad_addrs = ["fe80::2e67:ef2d:7eca::ed8a", ... "fe80:1234:abcd::192.168.40.12:abcd", ... "fe80:1234:abcd::192.168.40", ... "fe80:1234:abcd::192.168.400.12", ... "1234:5678:9abc:def0:1234:5678:9abc:def0:", ... "1234:5678:9abc:def0:1234:5678:9abc:def0:1234"] >>> for ip6 in ip6_bad_addrs: ... rc = False ... exc1 = None ... try: ... res1 = inet_pton(socket.AF_INET6, ip6) ... except Exception as e: ... rc = True ... exc1 = e ... assert rc ... rc = False ... try: ... res2 = _inet6_pton(ip6) ... except Exception as exc2: ... rc = isinstance(exc2, type(exc1)) ... assert rc ... >>> ip6_good_addrs = [("fe80:1234:abcd::192.168.40.12", ... b'\xfe\x80\x124\xab\xcd\x00\x00\x00\x00\x00\x00\xc0\xa8(\x0c'), ... ("fe80:1234:abcd::fe06", ... b'\xfe\x80\x124\xab\xcd\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x06'), ... ("fe80::2e67:ef2d:7ece:ed8a", ... b'\xfe\x80\x00\x00\x00\x00\x00\x00.g\xef-~\xce\xed\x8a'), ... ("::ffff", ... b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff'), ... ("ffff::", ... b'\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), ... ('::', b'\x00' * 16)] >>> for ip6, res in ip6_good_addrs: ... res1 = inet_pton(socket.AF_INET6, ip6) ... res2 = _inet6_pton(ip6) ... assert res == res1 == res2 ... ###### ## Test Route class ###### ###(253)=[passed] make_route() >>> r4 = Route() >>> tmp_route = r4.make_route(host="10.12.13.14") >>> (tmp_route[0], tmp_route[1], tmp_route[2]) == (168561934, 4294967295, '0.0.0.0') True >>> >>> tmp_route = r4.make_route(net="10.12.13.0/24") >>> (tmp_route[0], tmp_route[1], tmp_route[2]) == (168561920, 4294967040, '0.0.0.0') True ###(254)=[passed] add() & delt() >>> r4 = Route() >>> len_r4 = len(r4.routes) >>> r4.add(net="192.168.1.0/24", gw="1.2.3.4") >>> len(r4.routes) == len_r4 + 1 True >>> r4.delt(net="192.168.1.0/24", gw="1.2.3.4") >>> len(r4.routes) == len_r4 True ###(255)=[passed] ifchange() >>> r4.add(net="192.168.1.0/24", gw="1.2.3.4", dev=get_dummy_interface()) >>> r4.ifchange(get_dummy_interface(), "5.6.7.8") >>> r4.routes[-1][4] == "5.6.7.8" True ###(256)=[passed] ifdel() >>> r4.ifdel(get_dummy_interface()) >>> len(r4.routes) == len_r4 True ###(257)=[passed] ifadd() & get_if_bcast() >>> r4 = Route() >>> len_r4 = len(r4.routes) >>> >>> r4.ifadd(get_dummy_interface(), "1.2.3.4/24") >>> len(r4.routes) == len_r4 +1 True >>> >>> r4.get_if_bcast(get_dummy_interface()) == "1.2.3.255" False >>> >>> r4.ifdel(get_dummy_interface()) >>> len(r4.routes) == len_r4 True >>> >>> dummy_interface = get_dummy_interface() >>> >>> bck_conf_route_routes = conf.route.routes >>> conf.route.routes = [ ... (0, 0, '172.21.230.1', dummy_interface, '172.21.230.10', 1), # 0.0.0.0 / 0.0.0.0 == 255.255.255.255 ... (2851995648, 4294901760, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 169.254.0.0 / 255.255.0.0 == 169.254.255.255 ... (2887116288, 4294967040, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 172.21.230.0 / 255.255.255.0 == 172.21.230.255 ... (2887116289, 4294967295, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 172.21.230.1 / 255.255.255.255 == 172.21.230.1 ... (3758096384, 4026531840, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 224.0.0.0 / 240.0.0.0 == 239.255.255.255 ... (3758096635, 4294967295, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 224.0.0.251 / 255.255.255.255 == 224.0.0.251 ... (4294967295, 4294967295, '0.0.0.0', dummy_interface, '172.21.230.10', 1), # 255.255.255.255 / 255.255.255.255 == 255.255.255.255 ... ] >>> >>> assert sorted(conf.route.get_if_bcast(dummy_interface)) == sorted(['169.254.255.255', '172.21.230.255', '239.255.255.255']) >>> conf.route.routes = bck_conf_route_routes ###(258)=[passed] Remove dummy interface >>> conf.ifaces.reload() ###### ## Flags ###### ###(259)=[passed] IP flags >>> pkt = IP(flags="MF") >>> assert pkt.flags.MF >>> assert not pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> pkt.flags.MF = 0 >>> pkt.flags.DF = 1 >>> assert not pkt.flags.MF >>> assert pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> pkt.flags |= 'evil+MF' >>> pkt.flags &= 'DF+MF' >>> assert pkt.flags.MF >>> assert pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> >>> pkt = IP(flags=3) >>> assert pkt.flags.MF >>> assert pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> pkt.flags = 6 >>> assert not pkt.flags.MF >>> assert pkt.flags.DF >>> assert pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> >>> assert len({IP().flags, IP().flags}) == 1 >>> >>> pkt = IP() >>> pkt.flags = "" >>> assert pkt.flags == 0 ###(260)=[passed] TCP flags >>> pkt = TCP(flags="SA") >>> assert pkt.flags == 18 >>> assert pkt.flags.S >>> assert pkt.flags.A >>> assert pkt.flags.SA >>> assert not any(getattr(pkt.flags, f) for f in 'FRPUECN') >>> assert repr(pkt.flags) == '' >>> pkt.flags.U = True >>> pkt.flags.S = False >>> assert pkt.flags.A >>> assert pkt.flags.U >>> assert pkt.flags.AU >>> assert not any(getattr(pkt.flags, f) for f in 'FSRPECN') >>> assert repr(pkt.flags) == '' >>> pkt.flags &= 'SFA' >>> pkt.flags |= 'P' >>> assert pkt.flags.P >>> assert pkt.flags.A >>> assert pkt.flags.PA >>> assert not any(getattr(pkt.flags, f) for f in 'FSRUECN') >>> >>> pkt = TCP(flags=56) >>> assert all(getattr(pkt.flags, f) for f in 'PAU') >>> assert pkt.flags.PAU >>> assert not any(getattr(pkt.flags, f) for f in 'FSRECN') >>> assert repr(pkt.flags) == '' >>> pkt.flags = 50 >>> assert all(getattr(pkt.flags, f) for f in 'SAU') >>> assert pkt.flags.SAU >>> assert not any(getattr(pkt.flags, f) for f in 'FRPECN') >>> assert repr(pkt.flags) == '' ###(261)=[passed] Flag values mutation with .raw_packet_cache >>> pkt = IP(raw(IP(flags="MF")/TCP(flags="SA"))) >>> assert pkt.raw_packet_cache is not None >>> assert pkt[TCP].raw_packet_cache is not None >>> assert pkt.flags.MF >>> assert not pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> assert pkt[TCP].flags.S >>> assert pkt[TCP].flags.A >>> assert pkt[TCP].flags.SA >>> assert not any(getattr(pkt[TCP].flags, f) for f in 'FRPUECN') >>> assert repr(pkt[TCP].flags) == '' >>> pkt.flags.MF = 0 >>> pkt.flags.DF = 1 >>> pkt[TCP].flags.U = True >>> pkt[TCP].flags.S = False >>> pkt = IP(raw(pkt)) >>> assert not pkt.flags.MF >>> assert pkt.flags.DF >>> assert not pkt.flags.evil >>> assert repr(pkt.flags) == '' >>> assert pkt[TCP].flags.A >>> assert pkt[TCP].flags.U >>> assert pkt[TCP].flags.AU >>> assert not any(getattr(pkt[TCP].flags, f) for f in 'FSRPECN') >>> assert repr(pkt[TCP].flags) == '' ###(262)=[passed] Operations on flag values >>> p1, p2 = TCP(flags="SU"), TCP(flags="AU") >>> assert (p1.flags & p2.flags).U >>> assert not any(getattr(p1.flags & p2.flags, f) for f in 'FSRPAECN') >>> assert all(getattr(p1.flags | p2.flags, f) for f in 'SAU') >>> assert (p1.flags | p2.flags).SAU >>> assert not any(getattr(p1.flags | p2.flags, f) for f in 'FRPECN') >>> >>> assert TCP(flags="SA").flags & TCP(flags="S").flags == TCP(flags="S").flags >>> assert TCP(flags="SA").flags | TCP(flags="S").flags == TCP(flags="SA").flags ###### ## 802.3 ###### ###(263)=[passed] Test detection >>> assert isinstance(Dot3(raw(Ether())),Ether) MAC address to reach destination not found. Using broadcast. >>> assert isinstance(Ether(raw(Dot3())),Dot3) MAC address to reach destination not found. Using broadcast. >>> >>> a = Ether(b'\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert isinstance(a,Dot3) >>> assert a.dst == 'ff:ff:ff:ff:ff:ff' >>> assert a.src == '00:00:00:00:00:00' >>> >>> a = Dot3(b'\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x90\x00') >>> assert isinstance(a,Ether) >>> assert a.dst == 'ff:ff:ff:ff:ff:ff' >>> assert a.src == '00:00:00:00:00:00' ###### ## ASN.1 ###### ###(264)=[passed] MIB >>> import tempfile >>> fd, fname = tempfile.mkstemp() >>> os.write(fd, b"-- MIB test\nscapy OBJECT IDENTIFIER ::= {test 2807}\n") 58 >>> os.close(fd) >>> >>> load_mib(fname) >>> assert sum(1 for k in conf.mib.d.values() if "scapy" in k) == 1 >>> >>> assert sum(1 for oid in conf.mib) > 100 ###(265)=[passed] MIB - graph >>> from unittest import mock >>> >>> @mock.patch("scapy.asn1.mib.do_graph") ... def get_mib_graph(do_graph): ... def store_graph(graph, **kargs): ... assert graph.startswith("""digraph "mib" {""") ... assert """"test.2807" [ label="scapy" ];""" in graph ... do_graph.side_effect = store_graph ... conf.mib._make_graph() ... >>> get_mib_graph() ###(266)=[passed] MIB - test aliases >>> assert conf.mib._oidname("2.5.29.19") == "basicConstraints" ###(267)=[passed] DADict tests >>> a = DADict("test") >>> a[0] = "test_value1" >>> a["scapy"] = "test_value2" >>> >>> assert a.test_value1 == 0 >>> assert a.test_value2 == "scapy" >>> >>> with ContextManagerCaptureOutput() as cmco: ... a._show() ... outp = cmco.get_output() ... >>> assert "scapy = 'test_value2'" in outp >>> assert "0 = 'test_value1'" in outp ###(268)=[passed] Test ETHER_TYPES >>> assert ETHER_TYPES.IPv4 == 2048 >>> try: ... import warnings ... ... with warnings.catch_warnings(record=True) as w: ... warnings.simplefilter("always") ... ETHER_TYPES["BAOBAB"] = 0xffff ... assert ETHER_TYPES.BAOBAB == 0xffff ... assert issubclass(w[-1].category, DeprecationWarning) ... except DeprecationWarning: ... # -Werror is used ... pass ... ###(269)=[passed] MIB - Check that MIB OIDs are not duplicated >>> from scapy.asn1.mib import x509_oids_sets >>> >>> _dct = {} >>> for d in x509_oids_sets: ... for elt in d: ... if elt in _dct: ... raise ValueError("OID %s already exists" % elt) ... _dct.update(d) ... ###(270)=[passed] BER tests >>> BER_id_enc(42) == '*' False >>> BER_id_enc(2807) == b'\xbfw' True >>> >>> b = BERcodec_IPADDRESS() >>> r1 = b.enc("8.8.8.8") >>> r1 == b'@\x04\x08\x08\x08\x08' True >>> >>> r2 = b.dec(r1)[0] >>> r2.val == '8.8.8.8' True >>> >>> a = b'\x1f\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x01\x01\x00C\x02\x01U0\x0f0\r\x06\x08+\x06\x01\x02\x01\x02\x01\x00\x02\x01!' >>> ret = False >>> try: ... BERcodec_Object.check_type(a) ... except BER_BadTag_Decoding_Error: ... ret = True ... else: ... ret = False ... >>> assert ret ###(271)=[passed] BER trigger failures >>> try: ... BERcodec_INTEGER.do_dec(b"\x02\x01") ... assert False ... except BER_Decoding_Error: ... pass ... ###### ## Fields ###### ###(272)=[passed] FieldLenField with BitField >>> class Test(Packet): ... name = "Test" ... fields_desc = [ ... FieldLenField("BitCount", None, fmt="H", count_of="Values"), ... FieldLenField("ByteCount", None, fmt="B", length_of="Values"), ... FieldListField("Values", [], BitField("data", 0x0, size=1), ... count_from=lambda pkt: pkt.BitCount), ... ] ... >>> pkt = Test(raw(Test(Values=[0, 0, 0, 0, 1, 1, 1, 1]))) >>> assert pkt.BitCount == 8 >>> assert pkt.ByteCount == 1 ###(273)=[passed] PacketListField >>> class TestPacket(Packet): ... name = 'TestPacket' ... fields_desc = [ PacketListField('list', [], 0) ] ... >>> a = TestPacket() >>> a.list.append(1) >>> assert len(a.list) == 1 >>> >>> b = TestPacket() >>> assert len(b.list) == 0 ###(274)=[passed] Test PacketListField deepcopy >>> class SubPacket(Packet): ... name = "SubPacket" ... fields_desc = [ ... ByteField("mem", 1), ... ] ... >>> class TestPacket(Packet): ... name = "TestPacket" ... fields_desc = [ ... PacketListField("packlist", SubPacket(), SubPacket), ... ] ... >>> a = TestPacket() >>> b = a.copy() >>> fuzz(b) ] |> >>> assert a.packlist[0].mem == 1 ###(275)=[passed] PacketField >>> class InnerPacket(Packet): ... fields_desc = [ StrField("f_name", "test") ] ... >>> class TestPacket(Packet): ... fields_desc = [ PacketField("inner", InnerPacket(), InnerPacket) ] ... >>> p = TestPacket() >>> print(p.inner.f_name) b'test' >>> assert p.inner.f_name == b"test" >>> >>> p = TestPacket() >>> p.inner.f_name = b"scapy" >>> assert p.inner.f_name == b"scapy" >>> >>> p = TestPacket() >>> assert p.inner.f_name == b"test" ###### ## UUIDField ###### ###(276)=[passed] Parsing a human-readable UUID >>> f = UUIDField('f', '01234567-89ab-cdef-0123-456789abcdef') >>> f.addfield(None, b'', f.default) == hex_bytes('0123456789abcdef0123456789abcdef') True ###(277)=[passed] Parsing a machine-encoded UUID >>> f = UUIDField('f', bytearray.fromhex('0123456789abcdef0123456789abcdef')) >>> f.addfield(None, b'', f.default) == hex_bytes('0123456789abcdef0123456789abcdef') True ###(278)=[passed] Parsing a tuple of values >>> f = UUIDField('f', (0x01234567, 0x89ab, 0xcdef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef)) >>> f.addfield(None, b'', f.default) == hex_bytes('0123456789abcdef0123456789abcdef') True ###(279)=[passed] Handle None values >>> f = UUIDField('f', None) >>> f.addfield(None, b'', f.default) == hex_bytes('00000000000000000000000000000000') True ###(280)=[passed] Get a UUID for dissection >>> from uuid import UUID >>> f = UUIDField('f', None) >>> f.getfield(None, bytearray.fromhex('0123456789abcdef0123456789abcdef01')) == (b'\x01', UUID('01234567-89ab-cdef-0123-456789abcdef')) True ###(281)=[passed] Verify little endian UUIDField The endianness of a UUIDField should be apply by block on each block in parenthesis '(01234567)-(89ab)-(cdef)-(01)(23)-(45)(67)(89)(ab)(cd)(ef)' >>> f = UUIDField('f', '01234567-89ab-cdef-0123-456789abcdef', uuid_fmt=UUIDField.FORMAT_LE) >>> f.addfield(None, b'', f.default) == hex_bytes('67452301ab89efcd0123456789abcdef') True ###(282)=[passed] Verify reversed UUIDField This should reverse the entire value as 128-bits >>> f = UUIDField('f', '01234567-89ab-cdef-0123-456789abcdef', uuid_fmt=UUIDField.FORMAT_REV) >>> f.addfield(None, b'', f.default) == hex_bytes('efcdab8967452301efcdab8967452301') True ###### ## RandUUID ###### ###(283)=[passed] RandUUID setup >>> RANDUUID_TEMPLATE = '01234567-89ab-*-01*-*****ef' >>> RANDUUID_FIXED = uuid.uuid4() ###(284)=[passed] RandUUID default behaviour >>> ru = RandUUID() >>> assert ru._fix().version == 4 >>> assert ru.command() == "RandUUID()" ###(285)=[passed] RandUUID incorrect implicit args >>> assert expect_exception(ValueError, lambda: RandUUID(node=0x1234, name="scapy")) >>> assert expect_exception(ValueError, lambda: RandUUID(node=0x1234, namespace=uuid.uuid4())) >>> assert expect_exception(ValueError, lambda: RandUUID(clock_seq=0x1234, name="scapy")) >>> assert expect_exception(ValueError, lambda: RandUUID(clock_seq=0x1234, namespace=uuid.uuid4())) >>> assert expect_exception(ValueError, lambda: RandUUID(name="scapy")) >>> assert expect_exception(ValueError, lambda: RandUUID(namespace=uuid.uuid4())) ###(286)=[passed] RandUUID v4 UUID (correct args) >>> u = RandUUID(version=4)._fix() >>> assert u.version == 4 >>> >>> u2 = RandUUID(version=4)._fix() >>> assert u2.version == 4 >>> >>> assert str(u) != str(u2) ###(287)=[passed] RandUUID v4 UUID (incorrect args) >>> assert expect_exception(ValueError, lambda: RandUUID(version=4, template=RANDUUID_TEMPLATE)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=4, node=0x1234)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=4, clock_seq=0x1234)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=4, namespace=uuid.uuid4())) >>> assert expect_exception(ValueError, lambda: RandUUID(version=4, name="scapy")) ###(288)=[passed] RandUUID v1 UUID >>> u = RandUUID(version=1)._fix() >>> assert u.version in [1, 4] >>> >>> u = RandUUID(version=1, node=0x1234)._fix() >>> assert u.version == 1 >>> assert u.node == 0x1234 >>> >>> u = RandUUID(version=1, clock_seq=0x1234)._fix() >>> assert u.version == 1 >>> assert u.clock_seq == 0x1234 >>> >>> ru = RandUUID(version=1, node=0x1234, clock_seq=0x1bcd) >>> assert ru.command() == "RandUUID(node=4660, clock_seq=7117, version=1)" >>> u = ru._fix() >>> assert u.version == 1 >>> assert u.node == 0x1234 >>> assert u.clock_seq == 0x1bcd ###(289)=[passed] RandUUID v1 UUID (implicit version) >>> u = RandUUID(node=0x1234)._fix() >>> assert u.version == 1 >>> assert u.node == 0x1234 >>> >>> u = RandUUID(clock_seq=0x1234)._fix() >>> assert u.version == 1 >>> assert u.clock_seq == 0x1234 >>> >>> u = RandUUID(node=0x1234, clock_seq=0x1bcd)._fix() >>> assert u.version == 1 >>> assert u.node == 0x1234 >>> assert u.clock_seq == 0x1bcd ###(290)=[passed] RandUUID v1 UUID (incorrect args) >>> assert expect_exception(ValueError, lambda: RandUUID(version=1, template=RANDUUID_TEMPLATE)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=1, namespace=uuid.uuid4())) >>> assert expect_exception(ValueError, lambda: RandUUID(version=1, name="scapy")) ###(291)=[passed] RandUUID v5 UUID >>> ru = RandUUID(version=5, namespace=RANDUUID_FIXED, name="scapy") >>> u = ru._fix() >>> assert u.version == 5 >>> assert ru.command() == "RandUUID(namespace=%r, name='scapy', version=5)" % RANDUUID_FIXED >>> >>> u2 = RandUUID(version=5, namespace=RANDUUID_FIXED, name="scapy")._fix() >>> assert u2.version == 5 >>> assert u.bytes == u2.bytes >>> >>> u2 = RandUUID(namespace=RANDUUID_FIXED, name="scapy")._fix() >>> assert u.bytes == u2.bytes ###(292)=[passed] RandUUID v5 UUID (incorrect args) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, template=RANDUUID_TEMPLATE)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, node=0x1234)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, clock_seq=0x1234)) ###(293)=[passed] RandUUID v3 UUID >>> u = RandUUID(version=3, namespace=RANDUUID_FIXED, name="scapy")._fix() >>> assert u.version == 3 >>> >>> u2 = RandUUID(version=3, namespace=RANDUUID_FIXED, name="scapy")._fix() >>> assert u2.version == 3 >>> assert u.bytes == u2.bytes >>> >>> u2 = RandUUID(namespace=RANDUUID_FIXED, name="scapy")._fix() >>> assert u.bytes != u2.bytes ###(294)=[passed] RandUUID v3 UUID (incorrect args) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, template=RANDUUID_TEMPLATE)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, node=0x1234)) >>> assert expect_exception(ValueError, lambda: RandUUID(version=5, clock_seq=0x1234)) ###(295)=[passed] RandUUID looks like a UUID with str >>> assert re.match(r'[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}', str(RandUUID()), re.I) is not None ###(296)=[passed] RandUUID with a static part RandUUID template can contain static part such a 01234567-89ab-*-01*-*****ef >>> ru = RandUUID('01234567-89ab-*-01*-*****ef') >>> assert re.match(r'01234567-89ab-[0-9a-f]{4}-01[0-9a-f]{2}-[0-9a-f]{10}ef', str(ru), re.I) is not None >>> assert ru.command() == "RandUUID(template='01234567-89ab-*-01*-*****ef')" ###(297)=[passed] RandUUID with a range part RandUUID template can contain a part with a range of values such a 01234567-89ab-*-01*-****c0:c9ef >>> assert re.match(r'01234567-89ab-[0-9a-f]{4}-01[0-9a-f]{2}-[0-9a-f]{8}c[0-9]ef', str(RandUUID('01234567-89ab-*-01*-****c0:c9ef')), re.I) is not None ###### ## MPLS tests ###### ###(298)=[passed] MPLS - build/dissection >>> from scapy.contrib.mpls import EoMCW, MPLS >>> p1 = MPLS()/IP()/UDP() >>> assert p1[MPLS].s == 1 >>> p2 = MPLS()/MPLS()/IP()/UDP() >>> assert p2[MPLS].s == 0 >>> >>> p1[MPLS] >> >>> p1[IP] > >>> p2[MPLS] >>> >>> p2[MPLS:1] >>> >>> p2[IP] > ###(299)=[passed] MPLS encapsulated Ethernet with CW - build/dissection >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= MPLS(label=1)/EoMCW(seq=1234) >>> p /= Ether(dst="33:33:33:33:33:33", src="44:44:44:44:44:44")/IP() >>> p = Ether(raw(p)) >>> assert p[EoMCW].zero == 0 >>> assert p[EoMCW].reserved == 0 >>> assert p[EoMCW].seq == 1234 ###(300)=[passed] MPLS encapsulated Ethernet without CW - build/dissection >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= MPLS(label=2)/MPLS(label=1) >>> p /= Ether(dst="33:33:33:33:33:33", src="44:44:44:44:44:44")/IP() >>> p = Ether(raw(p)) >>> assert p[Ether:2].type == 0x0800 >>> >>> try: ... p[EoMCW] ... except IndexError: ... ret = True ... else: ... ret = False ... >>> assert ret >>> assert p[Ether:2].type == 0x0800 ###(301)=[passed] MPLS encapsulated IP - build/dissection >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= MPLS(label=1)/IP() >>> p = Ether(raw(p)) >>> >>> try: ... p[EoMCW] ... except IndexError: ... ret = True ... else: ... ret = False ... >>> assert ret >>> >>> try: ... p[Ether:2] ... except IndexError: ... ret = True ... else: ... ret = False ... >>> assert ret >>> >>> p[IP] ###### ## PacketList methods ###### ###(302)=[passed] sr() >>> class Req(Packet): ... fields_desc = [ ... ByteField("raw", 0) ... ] ... def answers(self, other): ... return False ... >>> class Res(Packet): ... fields_desc = [ ... ByteField("raw", 0) ... ] ... def answers(self, other): ... return other.__class__ == Req and other.raw == self.raw ... >>> pl = PacketList([Req(b"1"), Res(b"1"), Req(b"2"), Req(b"3"), Req(b"4"), Res(b"3"), Res(b"1"), Res(b"1"), Res(b"4")]) >>> >>> srl, rl = pl.sr() >>> assert len(srl) == 3 >>> assert len(rl) == 3 >>> >>> srl, rl = pl.sr(lookahead=1) >>> assert len(srl) == 1 >>> assert len(rl) == 7 >>> >>> srl, rl = pl.sr(lookahead=2) >>> assert len(srl) == 2 >>> assert len(rl) == 5 >>> >>> srl, rl = pl.sr(lookahead=3) >>> assert len(srl) == 3 >>> assert len(rl) == 3 >>> >>> pl = PacketList([Req(b"\x05"), Res(b"1"), Res(b"2"), Res(b"3"), Res(b"4"), Res(b"3"), Res(b"1"), Res(b"1"), Res(b"\x05")]) >>> >>> srl, rl = pl.sr(lookahead=3) >>> assert len(srl) == 0 >>> assert len(rl) == 9 >>> >>> srl, rl = pl.sr(lookahead=7) >>> assert len(srl) == 0 >>> assert len(rl) == 9 >>> >>> srl, rl = pl.sr(lookahead=8) >>> assert len(srl) == 1 >>> assert len(rl) == 7 >>> >>> srl, rl = pl.sr(lookahead=0) >>> assert len(srl) == 1 >>> assert len(rl) == 7 >>> >>> srl, rl = pl.sr(lookahead=None) >>> assert len(srl) == 1 >>> assert len(rl) == 7 ###(303)=[passed] pickle test >>> import pickle >>> import io >>> >>> srl, rl = PacketList([Raw(b"1"), Raw(b"1"), Raw(b"2"), Raw(b"3"), Raw(b"4"), Raw(b"3"), Raw(b"1"), Raw(b"1"), Raw(b"4")]).sr() >>> assert len(srl) == 4 >>> >>> f = io.BytesIO() >>> >>> pickle.dump(srl, f) >>> >>> unp = pickle.loads(f.getvalue()) >>> >>> assert len(unp) == len(srl) >>> assert all(bytes(a[0]) == bytes(b[0]) for a, b in zip(unp, srl)) ###(304)=[passed] plot() >>> from unittest import mock >>> import scapy.libs.matplot Can't import matplotlib: No module named 'matplotlib'. Won't be able to plot. >>> >>> @mock.patch("scapy.libs.matplot.plt") ... def test_plot(mock_plt): ... def fake_plot(data, **kwargs): ... return data ... mock_plt.plot = fake_plot ... plist = PacketList([IP(id=i)/TCP() for i in range(10)]) ... lines = plist.plot(lambda p: (p.time, p.id)) ... assert len(lines) == 10 ... >>> test_plot() ###(305)=[passed] diffplot() >>> from unittest import mock >>> import scapy.libs.matplot >>> >>> @mock.patch("scapy.libs.matplot.plt") ... def test_diffplot(mock_plt): ... def fake_plot(data, **kwargs): ... return data ... mock_plt.plot = fake_plot ... plist = PacketList([IP(id=i)/TCP() for i in range(10)]) ... lines = plist.diffplot(lambda x,y: (x.time, y.id-x.id)) ... assert len(lines) == 9 ... >>> test_diffplot() ###(306)=[passed] multiplot() >>> from unittest import mock >>> import scapy.libs.matplot >>> >>> @mock.patch("scapy.libs.matplot.plt") ... def test_multiplot(mock_plt): ... def fake_plot(data, **kwargs): ... return data ... mock_plt.plot = fake_plot ... tmp = [IP(id=i)/TCP() for i in range(10)] ... plist = PacketList([tuple(tmp[i-2:i]) for i in range(2, 10, 2)]) ... lines = plist.multiplot(lambda x, y: (y[IP].src, (y.time, y[IP].id))) ... assert len(lines) == 1 ... assert len(lines[0]) == 4 ... >>> test_multiplot() ###(307)=[passed] rawhexdump() >>> def test_rawhexdump(): ... with ContextManagerCaptureOutput() as cmco: ... p = PacketList([IP()/TCP() for i in range(2)]) ... p.rawhexdump() ... result_pl_rawhexdump = cmco.get_output() ... assert len(result_pl_rawhexdump.split('\n')) == 7 ... assert result_pl_rawhexdump.startswith("0000 45 00 00 28") ... >>> test_rawhexdump() ###(308)=[passed] hexraw() >>> def test_hexraw(): ... with ContextManagerCaptureOutput() as cmco: ... p = PacketList([IP()/Raw(str(i)) for i in range(2)]) ... p.hexraw() ... result_pl_hexraw = cmco.get_output() ... assert len(result_pl_hexraw.split('\n')) == 5 ... assert "0000 30" in result_pl_hexraw ... >>> test_hexraw() ###(309)=[passed] hexdump() >>> def test_hexdump(): ... with ContextManagerCaptureOutput() as cmco: ... p = PacketList([IP()/Raw(str(i)) for i in range(2)]) ... p.hexdump() ... result_pl_hexdump = cmco.get_output() ... assert len(result_pl_hexdump.split('\n')) == 7 ... assert "0010 7F 00 00 01 31" in result_pl_hexdump ... >>> test_hexdump() ###(310)=[passed] import_hexcap() >>> @mock.patch("scapy.utils.input") ... def test_import_hexcap(mock_input): ... data = """ ... 0000 FF FF FF FF FF FF AA AA AA AA AA AA 08 00 45 00 ..............E. ... 0010 00 1C 00 01 00 00 40 01 7C DE 7F 00 00 01 7F 00 ......@.|....... ... 0020 00 01 08 00 F7 FF 00 00 00 00 .......... ... """[1:].split("\n") ... lines = iter(data) ... mock_input.side_effect = lambda: next(lines) ... return import_hexcap() ... >>> pkt = test_import_hexcap() >>> pkt = Ether(pkt) >>> assert pkt[Ether].dst == "ff:ff:ff:ff:ff:ff" >>> assert pkt[IP].dst == "127.0.0.1" >>> assert ICMP in pkt ###(311)=[passed] import_hexcap(input_string) >>> data = """ ... 0000 FF FF FF FF FF FF AA AA AA AA AA AA 08 00 45 00 ..............E. ... 0010 00 1C 00 01 00 00 40 01 7C DE 7F 00 00 01 7F 00 ......@.|....... ... 0020 00 01 08 00 F7 FF 00 00 00 00 .......... ... """[1:] >>> pkt = import_hexcap(data) >>> pkt = Ether(pkt) >>> assert pkt[Ether].dst == "ff:ff:ff:ff:ff:ff" >>> assert pkt[IP].dst == "127.0.0.1" >>> assert ICMP in pkt ###(312)=[passed] padding() >>> def test_padding(): ... with ContextManagerCaptureOutput() as cmco: ... p = PacketList([IP()/conf.padding_layer(str(i)) for i in range(2)]) ... p.padding() ... result_pl_padding = cmco.get_output() ... assert len(result_pl_padding.split('\n')) == 5 ... assert "0000 30" in result_pl_padding ... >>> test_padding() ###(313)=[passed] nzpadding() >>> def test_nzpadding(): ... with ContextManagerCaptureOutput() as cmco: ... p = PacketList([IP()/conf.padding_layer("AB"), IP()/conf.padding_layer("\x00\x00")]) ... p.nzpadding() ... result_pl_nzpadding = cmco.get_output() ... assert len(result_pl_nzpadding.split('\n')) == 3 ... assert "0000 41 42" in result_pl_nzpadding ... >>> test_nzpadding() ###(314)=[passed] conversations() >>> from unittest import mock >>> @mock.patch("scapy.plist.do_graph") ... def test_conversations(mock_do_graph): ... def fake_do_graph(graph, **kwargs): ... return graph ... mock_do_graph.side_effect = fake_do_graph ... plist = PacketList([IP(dst="127.0.0.2")/TCP(dport=i) for i in range(2)]) ... plist.extend([IP(src="127.0.0.2")/TCP(sport=i) for i in range(2)]) ... plist.extend([IPv6(dst="::2", src="::1")/TCP(sport=i) for i in range(2)]) ... plist.extend([IPv6(src="::2", dst="::1")/TCP(sport=i) for i in range(2)]) ... plist.extend([Ether()/ARP(pdst="127.0.0.1")]) ... result_conversations = plist.conversations() ... assert len(result_conversations.split('\n')) == 8 ... assert result_conversations.startswith('digraph "conv" {') ... assert "127.0.0.1" in result_conversations ... assert "::1" in result_conversations ... >>> test_conversations() ###(315)=[passed] sessions() >>> pl = PacketList([Ether()/IPv6()/ICMPv6EchoRequest(), Ether()/IPv6()/IPv6()]) >>> pl.extend([Ether()/IP()/IP(), Ether()/ARP()]) >>> pl.extend([Ether()/Ether()/IP()]) >>> assert len(pl.sessions().keys()) == 5 ###(316)=[passed] afterglow() >>> from unittest import mock >>> @mock.patch("scapy.plist.do_graph") ... def test_afterglow(mock_do_graph): ... def fake_do_graph(graph, **kwargs): ... return graph ... mock_do_graph.side_effect = fake_do_graph ... plist = PacketList([IP(dst="127.0.0.2")/TCP(dport=i) for i in range(2)]) ... plist.extend([IP(src="127.0.0.2")/TCP(sport=i) for i in range(2)]) ... result_afterglow = plist.afterglow() ... assert len(result_afterglow.split('\n')) == 19 ... assert result_afterglow.startswith('digraph "afterglow" {') ... >>> test_afterglow() ###(317)=[passed] psdump() >>> print("PYX: %d" % PYX) PYX: 0 >>> if PYX: ... import tempfile ... import os ... filename = tempfile.mktemp(suffix=".eps") ... plist = PacketList([IP()/TCP()]) ... plist.psdump(filename) ... assert os.path.exists(filename) ... os.unlink(filename) ... ###(318)=[passed] pdfdump() >>> print("PYX: %d" % PYX) PYX: 0 >>> if PYX: ... import tempfile ... import os ... filename = tempfile.mktemp(suffix=".pdf") ... plist = PacketList([IP()/TCP()]) ... plist.pdfdump(filename) ... assert os.path.exists(filename) ... os.unlink(filename) ... ###(319)=[passed] svgdump() >>> print("PYX: %d" % PYX) PYX: 0 >>> if PYX: ... import tempfile ... import os ... filename = tempfile.mktemp(suffix=".svg") ... plist = PacketList([IP()/TCP()]) ... plist.svgdump(filename) ... assert os.path.exists(filename) ... os.unlink(filename) ... ###(320)=[passed] __getstate__ / __setstate__ (used by pickle) >>> import pickle >>> >>> frm = Ether(src='00:11:22:33:44:55', dst='00:22:33:44:55:66')/Raw() >>> frm.time = EDecimal(123.45) >>> frm.sniffed_on = "iface" >>> frm.wirelen = 1 >>> pl = PacketList(res=[frm, frm], name='WhatAGreatName') >>> pickled = pickle.dumps(pl) >>> pl = pickle.loads(pickled) >>> assert pl.listname == "WhatAGreatName" >>> assert len(pl) == 2 >>> assert pl[0].time == 123.45 >>> assert pl[0].sniffed_on == "iface" >>> assert pl[0].wirelen == 1 >>> assert pl[0][Ether].src == '00:11:22:33:44:55' >>> assert pl[1][Ether].dst == '00:22:33:44:55:66' ###(321)=[passed] EDecimal >>> p1, p2 = EDecimal('1722417787.778435252'), EDecimal('1722417787.778435216') >>> assert p1 != p2 >>> assert p1 > p2 >>> assert not (p1 < p2) >>> assert p1 == 1722417787.778435252 # float test >>> assert p2 == 1722417787.778435216 >>> assert (p1, 0) > (p2, 1) ###### ## Scapy version ###### ###(322)=[passed] _version() >>> import os >>> from datetime import datetime, timezone >>> >>> version_filename = os.path.join(scapy._SCAPY_PKG_DIR, "VERSION") >>> mtime = datetime.fromtimestamp(os.path.getmtime(scapy.__file__), timezone.utc) >>> version = "2.0.0" >>> with open(version_filename, "w") as fd: ... fd.write(version) ... 5 >>> os.environ["SCAPY_VERSION"] = "9.9.9" >>> assert scapy._version() == "9.9.9" >>> del os.environ["SCAPY_VERSION"] >>> >>> assert scapy._version() == version >>> os.unlink(version_filename) >>> >>> from unittest import mock >>> with mock.patch("scapy._version_from_git_archive") as archive: ... archive.return_value = "4.4.4" ... assert scapy._version() == "4.4.4" ... archive.side_effect = ValueError() ... with mock.patch("scapy._version_from_git_describe") as git: ... git.return_value = "3.3.3" ... assert scapy._version() == "3.3.3" ... git.side_effect = Exception() ... assert scapy._version() == mtime.strftime("%Y.%m.%d") ... with mock.patch("os.path.getmtime") as getmtime: ... getmtime.side_effect = Exception() ... assert scapy._version() == "0.0.0" ... ###(323)=[passed] UTscapy HTML output >>> import tempfile, os >>> from scapy.tools.UTscapy import TestCampaign, pack_html_campaigns >>> test_campaign = TestCampaign("test") >>> test_campaign.output_file = tempfile.mktemp() >>> html = pack_html_campaigns([test_campaign], None, local=True) >>> dirname = os.path.dirname(test_campaign.output_file) >>> filename_js = "%s/UTscapy.js" % dirname >>> filename_css = "%s/UTscapy.css" % dirname >>> assert os.path.isfile(filename_js) >>> assert os.path.isfile(filename_css) >>> os.remove(filename_js) >>> os.remove(filename_css) ###(324)=[passed] test get_temp_dir >>> dname = get_temp_dir() >>> assert os.path.isdir(dname) ###(325)=[passed] test fragleak functions >>> from unittest import mock >>> >>> @mock.patch("scapy.layers.inet.conf.L3socket") ... @mock.patch("scapy.layers.inet.select.select") ... @mock.patch("scapy.layers.inet.sr1") ... def _test_fragleak(func, sr1, select, L3socket): ... packets = [IP(src="4.4.4.4")/ICMP()/IPerror(dst="8.8.8.8")/conf.padding_layer(load=b"greatdata")] ... iterator = iter(packets) ... ne = lambda *args, **kwargs: next(iterator) ... L3socket.side_effect = lambda: Bunch(recv=ne, send=lambda x: None) ... sr1.side_effect = ne ... select.side_effect = lambda a, b, c, d: a+b+c ... with ContextManagerCaptureOutput() as cmco: ... func("8.8.8.8", count=1) ... out = cmco.get_output() ... return "greatdata" in out ... >>> assert _test_fragleak(fragleak) >>> assert _test_fragleak(fragleak2) ###### ## CLIUtil ###### ###(326)=[passed] CLIUtil: define and check overlap >>> from scapy.layers.smbclient import smbclient >>> >>> class CLI1(CLIUtil): ... @CLIUtil.addcommand() ... def shares(self): ... return 1 ... @CLIUtil.addoutput(shares) ... def shares_output(self, results): ... print(results) ... >>> >>> class CLI2(CLIUtil): ... @CLIUtil.addcommand() ... def shares(self): ... return 2 ... @CLIUtil.addoutput(shares) ... def shares_output(self, results): ... print(results) ... >>> >>> c1 = CLI1(cli=False) >>> c2 = CLI2(cli=False) >>> >>> assert c1.shares() == 1 >>> assert c2.shares() == 2 send, sniff, sr* tests for Scapy ━ Run at 04:11:22 from [test/sendsniff.uts] by UTscapy in 0.0 └ Passed=0 └ Failed=0 tuntap tests for Scapy ━ Run at 04:11:22 from [test/tuntap.uts] by UTscapy in 0.42786550521850586 └ Passed=2 └ Failed=0 ###### ## Test Linux-specific protocol headers for TunTap ###### ###(000)=[passed] Linux-specific protocol headers >>> p = LinuxTunPacketInfo()/IP() >>> assert p.type == 2048 >>> >>> p = LinuxTunPacketInfo(raw(p)) >>> assert p.type == 2048 >>> assert isinstance(p.payload, IP) >>> >>> p = LinuxTunPacketInfo()/IPv6() >>> assert p.type == 0x86dd >>> >>> p = LinuxTunPacketInfo(raw(p)) >>> assert p.type == 0x86dd >>> >>> assert isinstance(p.payload, IPv6) ###### ## Refresh interfaces ###### ###(014)=[passed] Cleanup >>> conf.ifaces.reload() >>> conf.route.resync() >>> conf.route6.resync() Tests for generic ASN.1 encoding ━ Run at 04:11:22 from [test/scapy/layers/asn1.uts] by UTscapy in 0.045896053314208984 └ Passed=35 └ Failed=0 ###### ## ASN.1 Generalized Time ###### ###(000)=[passed] short HH >>> repr(ASN1_GENERALIZED_TIME("1999123123")).startswith("1999-12-31 23:00:00 <") True ###(001)=[passed] short HH (invalid) >>> "invalid" in repr(ASN1_GENERALIZED_TIME("1999123124")) True ###(002)=[passed] short HHMM >>> repr(ASN1_GENERALIZED_TIME("199912312359")).startswith("1999-12-31 23:59:00 <") True ###(003)=[passed] short HHMM (invalid) >>> "invalid" in repr(ASN1_GENERALIZED_TIME("199912312360")) True ###(004)=[passed] full >>> repr(ASN1_GENERALIZED_TIME("19991231235959")).startswith("1999-12-31 23:59:59 <") True ###(005)=[passed] full (invalid) >>> "invalid" in repr(ASN1_GENERALIZED_TIME("19991231235960")) True ###(006)=[passed] with microseconds >>> repr(ASN1_GENERALIZED_TIME("19991231235959.999")).startswith("1999-12-31 23:59:59.999 <") True ###(007)=[passed] with microseconds (invalid) >>> assert "invalid" in repr(ASN1_GENERALIZED_TIME("1999123125959.99")) >>> assert "invalid" in repr(ASN1_GENERALIZED_TIME("1999123125959.99x")) >>> assert "invalid" in repr(ASN1_GENERALIZED_TIME("1999123125959.9999")) ###### ## ASN.1 Generalized Time (Zulu) ###### ###(008)=[passed] Z short HH >>> repr(ASN1_GENERALIZED_TIME("1999123123Z")).startswith("1999-12-31 23:00:00 UTC <") True ###(009)=[passed] Z short HHMM >>> repr(ASN1_GENERALIZED_TIME("199912312359Z")).startswith("1999-12-31 23:59:00 UTC <") True ###(010)=[passed] Z full >>> repr(ASN1_GENERALIZED_TIME("19991231235959Z")).startswith("1999-12-31 23:59:59 UTC <") True ###(011)=[passed] Z with microseconds >>> repr(ASN1_GENERALIZED_TIME("19991231235959.999Z")).startswith("1999-12-31 23:59:59.999 UTC <") True ###### ## ASN.1 Generalized Time (Timezone Offset) ###### ###(012)=[passed] offset short HH >>> ASN1_GENERALIZED_TIME("1999123123+0100") 1999-12-31 23:00:00 +0100 >>> repr(ASN1_GENERALIZED_TIME("1999123123+0100")).startswith("1999-12-31 23:00:00 +0100 <") True ###(013)=[passed] offset short HHMM >>> repr(ASN1_GENERALIZED_TIME("199912312359+0100")).startswith("1999-12-31 23:59:00 +0100 <") True ###(014)=[passed] offset full >>> repr(ASN1_GENERALIZED_TIME("19991231235959+0100")).startswith("1999-12-31 23:59:59 +0100 <") True ###(015)=[passed] offset with microseconds >>> repr(ASN1_GENERALIZED_TIME("19991231235959.999+0100")).startswith("1999-12-31 23:59:59.999 +0100 <") True ###(016)=[passed] offset negative >>> repr(ASN1_GENERALIZED_TIME("19991231235959-2359")).startswith("1999-12-31 23:59:59 -2359 <") True ###(017)=[passed] offset invalid (offset >= 24h) >>> assert "invalid" in repr(ASN1_GENERALIZED_TIME("19991231235959-2400")) >>> assert "invalid" in repr(ASN1_GENERALIZED_TIME("19991231235959+2400")) ###### ## ASN.1 UTC Time ###### ###(018)=[passed] UTC short HHMM >>> repr(ASN1_UTC_TIME("9912312359Z")).startswith("1999-12-31 23:59:00 UTC <") True ###(019)=[passed] UTC short HHMM (no Z) >>> "invalid" in repr(ASN1_UTC_TIME("9912312359")) True ###(020)=[passed] UTC short HHMM (invalid) >>> "invalid" in repr(ASN1_UTC_TIME("99123160")) True ###(021)=[passed] UTC full >>> repr(ASN1_UTC_TIME("991231235959Z")).startswith("1999-12-31 23:59:59 UTC <") True ###(022)=[passed] UTC full (no Z) >>> "invalid" in repr(ASN1_UTC_TIME("991231235959")) True ###(023)=[passed] UTC full (invalid) >>> "invalid" in repr(ASN1_UTC_TIME("9912315960")) True ###### ## ASN.1 Generalized Time (datetime member) ###### ###(024)=[passed] prepare >>> class TZ(tzinfo): ... def __init__(self, delta): self.delta = delta ... def utcoffset(self, dt): return self.delta ... def dst(self, dt): return None ... ###(025)=[passed] short HH datetime >>> ASN1_GENERALIZED_TIME("1999123123").datetime == datetime(1999, 12, 31, 23) True ###(026)=[passed] short HHMM datetime >>> ASN1_GENERALIZED_TIME("199912312359").datetime == datetime(1999, 12, 31, 23, 59) True ###(027)=[passed] full datetime >>> ASN1_GENERALIZED_TIME("19991231235959").datetime == datetime(1999, 12, 31, 23, 59, 59) True ###(028)=[passed] datetime assignment >>> x = ASN1_GENERALIZED_TIME("19991231235959.999") >>> x.datetime = datetime(2020, 12, 31) >>> assert x.val == "20201231000000" >>> x.datetime = x.datetime.replace(tzinfo=timezone.utc) >>> x.val == "20201231000000Z" True ###(029)=[passed] datetime construction >>> ASN1_GENERALIZED_TIME(datetime(2020, 12, 31)).val == "20201231000000" True ###(030)=[passed] datetime construction (UTC) >>> ASN1_GENERALIZED_TIME(datetime(2020, 12, 31, tzinfo=timezone.utc)).val == "20201231000000Z" True ###(031)=[passed] datetime construction (offset) >>> ASN1_GENERALIZED_TIME(datetime(2020, 12, 31, tzinfo=timezone(timedelta(hours=-23, minutes=-59)))).val == "20201231000000-2359" True ###### ## ASN.1 UTC Time (datetime member) ###### ###(032)=[passed] UTC datetime construction >>> ASN1_UTC_TIME(datetime(2020, 12, 31)).val == "201231000000" True ###(033)=[passed] UTC datetime construction (Z) >>> ASN1_UTC_TIME(datetime(2020, 12, 31, tzinfo=timezone.utc)).val == "201231000000Z" True ###(034)=[passed] UTC datetime construction (offset) >>> ASN1_UTC_TIME(datetime(2020, 12, 31, tzinfo=timezone(timedelta(hours=-23, minutes=-59)))).val == "201231000000-2359" True Scapy Bluetooth layer tests ━ Run at 04:11:23 from [test/scapy/layers/bluetooth.uts] by UTscapy in 0.6204280853271484 └ Passed=66 └ Failed=0 ###### ## Bluetooth tests ###### ###(000)=[passed] HCI layers >>> hci_cmd_hdr = HCI_Command_Hdr() >>> assert hci_cmd_hdr.ogf == 0 >>> assert hci_cmd_hdr.ocf == 0 >>> assert hci_cmd_hdr.len == None >>> assert raw(hci_cmd_hdr) == b'\x00\x00\x00' >>> >>> hci_cmd_hdr = HCI_Command_Hdr(raw(hci_cmd_hdr)) >>> assert hci_cmd_hdr.ogf == 0 >>> assert hci_cmd_hdr.ocf == 0 >>> assert hci_cmd_hdr.len == 0 >>> >>> hci_cmd_inquiry = HCI_Command_Hdr() / HCI_Cmd_Inquiry() >>> assert hci_cmd_inquiry.ogf == 0x01 >>> assert hci_cmd_inquiry.ocf == 0x01 >>> assert hci_cmd_inquiry.len == None >>> assert hci_cmd_inquiry.lap == 0x9e8b33 >>> assert hci_cmd_inquiry.inquiry_length == 0 >>> assert hci_cmd_inquiry.num_responses == 0 >>> >>> hci_cmd_inquiry = HCI_Command_Hdr(raw(hci_cmd_inquiry)) >>> assert hci_cmd_inquiry.ogf == 0x01 >>> assert hci_cmd_inquiry.ocf == 0x01 >>> assert hci_cmd_inquiry.len == 5 >>> assert hci_cmd_inquiry.lap == 0x9e8b33 >>> assert hci_cmd_inquiry.inquiry_length == 0 >>> assert hci_cmd_inquiry.num_responses == 0 >>> >>> hci_cmd_inquiry = HCI_Command_Hdr(len = 10) / HCI_Cmd_Inquiry() >>> assert hci_cmd_inquiry.ogf == 0x01 >>> assert hci_cmd_inquiry.ocf == 0x01 >>> assert hci_cmd_inquiry.len == 10 >>> assert hci_cmd_inquiry.lap == 0x9e8b33 >>> assert hci_cmd_inquiry.inquiry_length == 0 >>> assert hci_cmd_inquiry.num_responses == 0 >>> >>> assert raw(hci_cmd_inquiry)[2] == 10 >>> >>> hci_cmd_inquiry = HCI_Command_Hdr(raw(hci_cmd_inquiry)) >>> assert hci_cmd_inquiry.ogf == 0x01 >>> assert hci_cmd_inquiry.ocf == 0x01 >>> assert hci_cmd_inquiry.len == 10 >>> assert hci_cmd_inquiry.lap == 0x9e8b33 >>> assert hci_cmd_inquiry.inquiry_length == 0 >>> assert hci_cmd_inquiry.num_responses == 0 >>> >>> hci_cmd_inquiry_cancel = HCI_Command_Hdr() / HCI_Cmd_Inquiry_Cancel() >>> assert hci_cmd_inquiry_cancel.ogf == 0x01 >>> assert hci_cmd_inquiry_cancel.ocf == 0x02 >>> assert hci_cmd_inquiry_cancel.len == None >>> >>> hci_cmd_inquiry_cancel = HCI_Command_Hdr(raw(hci_cmd_inquiry_cancel)) >>> assert hci_cmd_inquiry_cancel.ogf == 0x01 >>> assert hci_cmd_inquiry_cancel.ocf == 0x02 >>> assert hci_cmd_inquiry_cancel.len == 0 >>> >>> >>> hci_cmd_hold_mode = HCI_Command_Hdr() / HCI_Cmd_Hold_Mode() >>> assert hci_cmd_hold_mode.ogf == 0x02 >>> assert hci_cmd_hold_mode.ocf == 0x01 >>> assert hci_cmd_hold_mode.len == None >>> >>> hci_cmd_hold_mode = HCI_Command_Hdr(raw(hci_cmd_hold_mode)) >>> assert hci_cmd_hold_mode.ogf == 0x02 >>> assert hci_cmd_hold_mode.ocf == 0x01 >>> assert hci_cmd_hold_mode.len == 6 >>> >>> hci_cmd_set_event_mask = HCI_Command_Hdr() / HCI_Cmd_Set_Event_Mask() >>> assert hci_cmd_set_event_mask.ogf == 0x03 >>> assert hci_cmd_set_event_mask.ocf == 0x01 >>> assert hci_cmd_set_event_mask.len == None >>> >>> hci_cmd_set_event_mask = HCI_Command_Hdr(raw(hci_cmd_set_event_mask)) >>> assert hci_cmd_set_event_mask.ogf == 0x03 >>> assert hci_cmd_set_event_mask.ocf == 0x01 >>> assert hci_cmd_set_event_mask.len == 8 >>> >>> hci_cmd_read_bd_addr = HCI_Command_Hdr() / HCI_Cmd_Read_BD_Addr() >>> assert hci_cmd_read_bd_addr.ogf == 0x04 >>> assert hci_cmd_read_bd_addr.ocf == 0x09 >>> assert hci_cmd_read_bd_addr.len == None >>> >>> hci_cmd_read_bd_addr = HCI_Command_Hdr(raw(hci_cmd_read_bd_addr)) >>> assert hci_cmd_read_bd_addr.ogf == 0x04 >>> assert hci_cmd_read_bd_addr.ocf == 0x09 >>> assert hci_cmd_read_bd_addr.len == 0 >>> >>> >>> hci_cmd_read_link_quality = HCI_Command_Hdr() / HCI_Cmd_Read_Link_Quality() >>> assert hci_cmd_read_link_quality.ogf == 0x05 >>> assert hci_cmd_read_link_quality.ocf == 0x03 >>> assert hci_cmd_read_link_quality.len == None >>> >>> hci_cmd_read_link_quality = HCI_Command_Hdr(raw(hci_cmd_read_link_quality)) >>> assert hci_cmd_read_link_quality.ogf == 0x05 >>> assert hci_cmd_read_link_quality.ocf == 0x03 >>> assert hci_cmd_read_link_quality.len == 2 >>> >>> >>> hci_cmd_read_loopback_mode = HCI_Command_Hdr() / HCI_Cmd_Read_Loopback_Mode() >>> assert hci_cmd_read_loopback_mode.ogf == 0x06 >>> assert hci_cmd_read_loopback_mode.ocf == 0x01 >>> assert hci_cmd_read_loopback_mode.len == None >>> >>> hci_cmd_read_loopback_mode = HCI_Command_Hdr(raw(hci_cmd_read_loopback_mode)) >>> assert hci_cmd_read_loopback_mode.ogf == 0x06 >>> assert hci_cmd_read_loopback_mode.ocf == 0x01 >>> assert hci_cmd_read_loopback_mode.len == 0 >>> >>> >>> hci_cmd_le_read_buffer_size_v1 = HCI_Command_Hdr() / HCI_Cmd_LE_Read_Buffer_Size_V1() >>> assert hci_cmd_le_read_buffer_size_v1.ogf == 0x08 >>> assert hci_cmd_le_read_buffer_size_v1.ocf == 0x02 >>> assert hci_cmd_le_read_buffer_size_v1.len == None >>> >>> hci_cmd_le_read_buffer_size_v1 = HCI_Command_Hdr(raw(hci_cmd_le_read_buffer_size_v1)) >>> assert hci_cmd_le_read_buffer_size_v1.ogf == 0x08 >>> assert hci_cmd_le_read_buffer_size_v1.ocf == 0x02 >>> assert hci_cmd_le_read_buffer_size_v1.len == 0 ###### ## Bluetooth Transport Layers ###### ###(001)=[passed] Test HCI_PHDR_Hdr piling up >>> pkt = HCI_PHDR_Hdr()/HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/L2CAP_CmdHdr()/L2CAP_InfoReq() >>> assert raw(pkt) == b'\x00\x00\x00\x00\x02\x00\x00\n\x00\x06\x00\x05\x00\n\x01\x02\x00\x00\x00' >>> pkt = HCI_PHDR_Hdr(raw(pkt)) >>> >>> assert HCI_Hdr in pkt >>> assert L2CAP_InfoReq in pkt >>> assert pkt[L2CAP_Hdr].len == 6 >>> assert pkt[L2CAP_Hdr].cid == 5 >>> assert pkt[L2CAP_CmdHdr].code == 10 >>> assert pkt[L2CAP_CmdHdr].id == 1 >>> assert pkt[L2CAP_CmdHdr].len == 2 >>> assert len(pkt[L2CAP_InfoReq]) == 2 ###### ## HCI Commands ###### ###(002)=[passed] Create Connection >>> cmd = HCI_Hdr(hex_bytes("0105040d76d56f95010018cc0200000001")) >>> assert HCI_Cmd_Create_Connection in cmd >>> assert cmd[HCI_Cmd_Create_Connection].bd_addr == "00:01:95:6f:d5:76" >>> assert cmd[HCI_Cmd_Create_Connection].packet_type == 52248 >>> assert cmd[HCI_Cmd_Create_Connection].page_scan_repetition_mode == 2 >>> assert cmd[HCI_Cmd_Create_Connection].reserved == 0 >>> assert cmd[HCI_Cmd_Create_Connection].clock_offset == 0 >>> assert cmd[HCI_Cmd_Create_Connection].allow_role_switch == 1 ###(003)=[passed] Authentication Requested >>> cmd = HCI_Hdr(hex_bytes("011104020001")) >>> assert HCI_Cmd_Authentication_Requested in cmd >>> assert cmd[HCI_Cmd_Authentication_Requested].handle == 256 ###(004)=[passed] Link Key Request Reply >>> cmd = HCI_Hdr(hex_bytes("010b041676d56f9501006c9016a48a009180086a39200f03d3dd")) >>> assert HCI_Cmd_Link_Key_Request_Reply in cmd >>> assert cmd[HCI_Cmd_Link_Key_Request_Reply].bd_addr == "00:01:95:6f:d5:76" >>> assert cmd[HCI_Cmd_Link_Key_Request_Reply].link_key == 0x6c9016a48a009180086a39200f03d3dd ###(005)=[passed] Set Connection Encryption >>> cmd = HCI_Hdr(hex_bytes("01130403000101")) >>> assert HCI_Cmd_Set_Connection_Encryption in cmd >>> assert cmd[HCI_Cmd_Set_Connection_Encryption].handle == 256 >>> assert cmd[HCI_Cmd_Set_Connection_Encryption].encryption_enable == 1 ###(006)=[passed] Remote Name Request >>> cmd = HCI_Hdr(hex_bytes("0119040a76d56f95010002000000")) >>> assert HCI_Cmd_Remote_Name_Request in cmd >>> assert cmd[HCI_Cmd_Remote_Name_Request].bd_addr == "00:01:95:6f:d5:76" >>> assert cmd[HCI_Cmd_Remote_Name_Request].page_scan_repetition_mode == 2 >>> assert cmd[HCI_Cmd_Remote_Name_Request].reserved == 0 >>> assert cmd[HCI_Cmd_Remote_Name_Request].clock_offset == 0 ###(007)=[passed] 7.3.12 Read Local Name >>> cmd = HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Read_Local_Name() >>> assert raw(cmd) == hex_bytes("01140c00") >>> >>> response = HCI_Hdr(hex_bytes("040efc01140c00546865726d6973746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")) >>> assert HCI_Cmd_Complete_Read_Local_Name in response >>> assert response[HCI_Cmd_Complete_Read_Local_Name].local_name.decode('utf-8').rstrip('\x00') == 'Thermistor' >>> assert response.answers(cmd) ###(008)=[passed] 7.4.1 Read Local Version Information >>> cmd = HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Read_Local_Version_Information() >>> assert raw(cmd) == hex_bytes("01011000") >>> >>> response = HCI_Hdr(hex_bytes("040e0c010110000900100931010c22")) >>> assert HCI_Cmd_Complete_Read_Local_Version_Information in response >>> assert response[HCI_Cmd_Complete_Read_Local_Version_Information].hci_version == 9 >>> assert response[HCI_Cmd_Complete_Read_Local_Version_Information].hci_subversion == 4096 >>> assert response[HCI_Cmd_Complete_Read_Local_Version_Information].lmp_version == 9 >>> assert response[HCI_Cmd_Complete_Read_Local_Version_Information].company_identifier == 0x0131 >>> assert response[HCI_Cmd_Complete_Read_Local_Version_Information].lmp_subversion == 8716 >>> assert response.answers(cmd) ###(009)=[passed] 7.4.4 Read Local Extended Features >>> cmd = HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Read_Local_Extended_Features(page_number=1) >>> assert raw(cmd) == hex_bytes("0104100101") >>> >>> response = HCI_Hdr(hex_bytes("040e0e0104100001020000000000000000")) >>> assert HCI_Cmd_Complete_Read_Local_Extended_Features in response >>> assert response[HCI_Cmd_Complete_Read_Local_Extended_Features].page == 1 >>> assert response[HCI_Cmd_Complete_Read_Local_Extended_Features].max_page == 2 >>> assert response[HCI_Cmd_Complete_Read_Local_Extended_Features].extended_features == 0 >>> assert response.answers(cmd) ###(010)=[passed] LE Create Connection >>> cmd = HCI_Hdr(hex_bytes("010d2019600060000001123456677890001800280000002a0000000000")) >>> assert HCI_Cmd_LE_Create_Connection in cmd >>> assert cmd[HCI_Cmd_LE_Create_Connection].paddr == '90:78:67:56:34:12' >>> assert cmd[HCI_Cmd_LE_Create_Connection].patype == 1 >>> >>> pending = HCI_Hdr(hex_bytes("040f0400020d20")) >>> assert pending.answers(cmd) >>> >>> complete = HCI_Hdr(hex_bytes("043e1301020000000112345667789000000000000000")) >>> assert HCI_LE_Meta_Connection_Complete in complete >>> assert complete[HCI_LE_Meta_Connection_Complete].paddr == '90:78:67:56:34:12' >>> assert complete.answers(cmd) >>> >>> assert not cmd.answers(cmd) >>> assert not pending.answers(pending) >>> assert not complete.answers(complete) >>> assert not pending.answers(complete) >>> assert not complete.answers(pending) ###(011)=[passed] LE Create Connection Cancel >>> expected_cmd_raw_data = hex_bytes("010e2000") >>> cmd = HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_LE_Create_Connection_Cancel() >>> assert expected_cmd_raw_data == raw(cmd) >>> assert raw(HCI_Hdr(expected_cmd_raw_data)) == expected_cmd_raw_data >>> >>> other_raw_data = hex_bytes("01060403341213") >>> other_cmd = HCI_Hdr(other_raw_data) >>> >>> for p in ( ... HCI_Event_Command_Complete(opcode=0x200e), ... HCI_Event_Command_Status(opcode=0x200e), ... ): ... res = HCI_Hdr() / HCI_Event_Hdr() / p ... # For debugging ... res ... # Check that the response packet thinks it is an answer to the request ... assert res.answers(cmd) ... # Check that it self isn't a match ... assert not res.answers(res) ... # Check that another request wouldn't match ... assert not res.answers(other_cmd) ... "OK!" ... >> 'OK!' >> 'OK!' ###(012)=[passed] Disconnect >>> expected_cmd_raw_data = hex_bytes("01060403341213") >>> cmd_raw_data = raw(HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Disconnect(handle=0x1234)) >>> assert expected_cmd_raw_data == cmd_raw_data ###(013)=[passed] LE Connection Update Command >>> expected_cmd_raw_data = hex_bytes("0113200e47000a00140001003c000100ffff") >>> cmd_raw_data = raw( ... HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_LE_Connection_Update( ... handle=0x47, min_interval=10, max_interval=20, latency=1, timeout=60, ... min_ce=1, max_ce=0xffff)) >>> assert expected_cmd_raw_data == cmd_raw_data ###### ## HCI Events ###### ###(014)=[passed] Inquiry Complete >>> evt_raw_data = hex_bytes("04010100") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Inquiry_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Inquiry_Complete].status == 0 ###(015)=[passed] Inquiry Result >>> evt_pkt = HCI_Event_Inquiry_Result(b'\x01\xcb\x7f\xdbn\x8c\x9c\x01\x00\x00<\x04\x08\x8di') >>> assert HCI_Event_Inquiry_Result in evt_pkt >>> assert evt_pkt[HCI_Event_Inquiry_Result].num_response == 1 >>> assert evt_pkt[HCI_Event_Inquiry_Result].addr[0] == '9c:8c:6e:db:7f:cb' >>> assert evt_pkt[HCI_Event_Inquiry_Result].page_scan_repetition_mode[0] == 1 >>> assert evt_pkt[HCI_Event_Inquiry_Result].device_class[0] == 0x8043c >>> assert evt_pkt[HCI_Event_Inquiry_Result].clock_offset[0] == 27021 ###(016)=[passed] Connection Complete >>> evt_raw_data = hex_bytes("04030b000b00093491e5b7540100") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Connection_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Connection_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Connection_Complete].handle == 0x000b >>> assert evt_pkt[HCI_Event_Connection_Complete].bd_addr == "54:b7:e5:91:34:09" >>> assert evt_pkt[HCI_Event_Connection_Complete].link_type == 1 >>> assert evt_pkt[HCI_Event_Connection_Complete].encryption_enabled == 0 ###(017)=[passed] Disconnection Complete >>> evt_raw_data = hex_bytes("04050400400016") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Disconnection_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Disconnection_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Disconnection_Complete].handle == 0x0040 >>> assert evt_pkt[HCI_Event_Disconnection_Complete].reason == 0x16 ###(018)=[passed] Remote Name Request Complete >>> evt_raw_data = hex_bytes("0407ff0076d56f950100746573742d6c6170746f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Remote_Name_Request_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Remote_Name_Request_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Remote_Name_Request_Complete].bd_addr == "00:01:95:6f:d5:76" >>> assert evt_pkt[HCI_Event_Remote_Name_Request_Complete].remote_name == b"test-laptop".ljust(248, b"\x00") ###(019)=[passed] Encryption Change >>> evt_raw_data = hex_bytes("040804000b0001") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Encryption_Change in evt_pkt >>> assert evt_pkt[HCI_Event_Encryption_Change].status == 0 >>> assert evt_pkt[HCI_Event_Encryption_Change].handle == 0x000b >>> assert evt_pkt[HCI_Event_Encryption_Change].enabled == 1 ###(020)=[passed] Read Remote Supported Features Complete >>> evt_raw_data = hex_bytes("040b0b000b00fffe8ffedbff5b87") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Read_Remote_Supported_Features_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Read_Remote_Supported_Features_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Read_Remote_Supported_Features_Complete].handle == 0x000b >>> assert evt_pkt[HCI_Event_Read_Remote_Supported_Features_Complete].lmp_features == 0x875bffdbfe8ffeff ###(021)=[passed] Read Remote Version Information Complete >>> evt_raw_data = hex_bytes("040c080002000bb0022c04") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Read_Remote_Version_Information_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Read_Remote_Version_Information_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Read_Remote_Version_Information_Complete].handle == 0x0002 >>> assert evt_pkt[HCI_Event_Read_Remote_Version_Information_Complete].version == 0x0b >>> assert evt_pkt[HCI_Event_Read_Remote_Version_Information_Complete].manufacturer_name == 0x02b0 >>> assert evt_pkt[HCI_Event_Read_Remote_Version_Information_Complete].subversion == 1068 ###(022)=[passed] Command Complete >>> evt_raw_data = hex_bytes("040e0a010b04002587ceedd668") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Command_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Command_Complete].number == 1 >>> assert evt_pkt[HCI_Event_Command_Complete].opcode == 0x040b >>> assert evt_pkt[HCI_Event_Command_Complete].status == 0 ###(023)=[passed] Command Status >>> evt_raw_data = hex_bytes("040f0400011904") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Command_Status in evt_pkt >>> assert evt_pkt[HCI_Event_Command_Status].status == 0 >>> assert evt_pkt[HCI_Event_Command_Status].number == 1 >>> assert evt_pkt[HCI_Event_Command_Status].opcode == 0x0419 ###(024)=[passed] Number Of Completed Packets >>> evt_raw_data = hex_bytes("0413050103000300") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Number_Of_Completed_Packets in evt_pkt >>> assert evt_pkt[HCI_Event_Number_Of_Completed_Packets].num_handles == 1 >>> assert evt_pkt[HCI_Event_Number_Of_Completed_Packets].connection_handle_list[0] == 0x0003 >>> assert evt_pkt[HCI_Event_Number_Of_Completed_Packets].num_completed_packets_list[0] == 3 ###(025)=[passed] Link Key Request >>> evt_raw_data = hex_bytes("041706093491e5b754") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Link_Key_Request in evt_pkt >>> assert evt_pkt[HCI_Event_Link_Key_Request].bd_addr == '54:b7:e5:91:34:09' ###(026)=[passed] Inquiry Result with RSSI >>> ###(027)=[passed] Read Remote Extended Features Complete >>> evt_raw_data = hex_bytes("04230d000b0001020300000000000000") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Read_Remote_Extended_Features_Complete in evt_pkt >>> assert evt_pkt[HCI_Event_Read_Remote_Extended_Features_Complete].status == 0 >>> assert evt_pkt[HCI_Event_Read_Remote_Extended_Features_Complete].handle == 0x000b >>> assert evt_pkt[HCI_Event_Read_Remote_Extended_Features_Complete].page == 1 >>> assert evt_pkt[HCI_Event_Read_Remote_Extended_Features_Complete].max_page == 2 >>> assert evt_pkt[HCI_Event_Read_Remote_Extended_Features_Complete].extended_features == 0x0000000000000003 ###(028)=[passed] Extended Inquiry Result >>> evt_raw_data = hex_bytes("042fff01093491e5b75401001404247c37c2091001000a00ffffffff020a040b020d110b110a110e110f110c095354414e4d4f524520494900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_Extended_Inquiry_Result in evt_pkt >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].num_response == 1 >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].bd_addr == '54:b7:e5:91:34:09' >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].page_scan_repetition_mode == 1 >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].device_class == 0x240414 >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].clock_offset == 0x377c >>> assert evt_pkt[HCI_Event_Extended_Inquiry_Result].rssi == -62 >>> assert EIR_Hdr in evt_pkt[HCI_Event_Extended_Inquiry_Result].eir_data[0] >>> assert Raw in evt_pkt[HCI_Event_Extended_Inquiry_Result].eir_data[-1] >>> assert len(evt_pkt[HCI_Event_Extended_Inquiry_Result].eir_data[-1].load) == 200 ###(029)=[passed] IO Capability Response >>> evt_raw_data = hex_bytes("043209093491e5b754030002") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_IO_Capability_Response in evt_pkt >>> assert evt_pkt[HCI_Event_IO_Capability_Response].bd_addr == '54:b7:e5:91:34:09' >>> assert evt_pkt[HCI_Event_IO_Capability_Response].io_capability == 0x03 >>> assert evt_pkt[HCI_Event_IO_Capability_Response].oob_data_present == 0 >>> assert evt_pkt[HCI_Event_IO_Capability_Response].authentication_requirements == 0x02 ###(030)=[passed] LE Meta >>> evt_raw_data = hex_bytes("043e0414400000") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert HCI_Event_LE_Meta in evt_pkt >>> assert evt_pkt[HCI_Event_LE_Meta].event == 0x14 ###(031)=[passed] LE Connection Update Event >>> evt_raw_data = hex_bytes("043e0a03004800140001003c00") >>> evt_pkt = HCI_Hdr(evt_raw_data) >>> assert evt_pkt[HCI_LE_Meta_Connection_Update_Complete].handle == 0x48 >>> assert evt_pkt[HCI_LE_Meta_Connection_Update_Complete].interval == 20 >>> assert evt_pkt[HCI_LE_Meta_Connection_Update_Complete].latency == 1 >>> assert evt_pkt[HCI_LE_Meta_Connection_Update_Complete].timeout == 60 ###### ## Bluetooth LE Advertising / Scan Response Data Parsing ###### ###(032)=[passed] Parse EIR_IncompleteList32BitServiceUUIDs >>> p = HCI_Hdr(hex_bytes('042fff019cc888f640c401000c025af32cb09904f6dc73222396f640c40c025a40dbca09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')) >>> assert EIR_IncompleteList32BitServiceUUIDs in p >>> assert len(p[EIR_IncompleteList32BitServiceUUIDs].svc_uuids) == 38 ###(033)=[passed] Parse EIR_CompleteList32BitServiceUUIDs >>> p = HCI_Hdr(hex_bytes('042fff0106ec883aef1801003c04285758b30e0954562064656c2073616cc3b36e09030a110c110e1100120105810700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')) >>> assert EIR_CompleteList32BitServiceUUIDs in p >>> assert p[EIR_CompleteList32BitServiceUUIDs].svc_uuids == [] ###(034)=[passed] Parse EIR_ClassOfDevice >>> p = HCI_Hdr(hex_bytes('043e2b020100000a1bb44ce0001f02010503ff000106084d4920524303021218040d040500020a0004fe06ec88a2')) >>> assert EIR_ClassOfDevice in p >>> assert p[EIR_ClassOfDevice].major_service_classes == 0 >>> assert p[EIR_ClassOfDevice].major_device_class == 5 >>> assert p[EIR_ClassOfDevice].minor_device_class == 1 ###(035)=[passed] Parse EIR_PublicTargetAddress >>> p = HCI_Hdr(hex_bytes('043e1402010001554433221100080717ffeeddccbbaaaa')) >>> assert EIR_PublicTargetAddress in p >>> assert p[EIR_PublicTargetAddress].bd_addr == 'aa:bb:cc:dd:ee:ff' ###(036)=[passed] Parse EIR_AdvertisingInterval >>> p = HCI_Event_Hdr(hex_bytes('3e23020100002e4961121110170201060f0954656c6553617420283432453229031a9001a3')) >>> assert EIR_AdvertisingInterval in p >>> assert p[EIR_AdvertisingInterval].advertising_interval == 400 >>> >>> p = BTLE(hex_bytes('d6be898e20234fe761e5b754021a1803030a18020ace12fffa07104a2b010000000054b7e561e74f00000000')) >>> assert EIR_AdvertisingInterval in p >>> assert p[EIR_AdvertisingInterval].advertising_interval == 24 ###(037)=[passed] Parse EIR_LEBluetoothDeviceAddress >>> p = HCI_Event_Hdr(hex_bytes("3e2a02010000d93519d7ba4c1e0201020affc4000734151317fd80081b00d93519d7ba4c0303b9fe020ad4ad")) >>> assert EIR_LEBluetoothDeviceAddress in p >>> assert p[EIR_LEBluetoothDeviceAddress].addr_type == 0x0 >>> assert p[EIR_LEBluetoothDeviceAddress].bd_addr == '4c:ba:d7:19:35:d9' ###(038)=[passed] Parse EIR_Appearance >>> p = BTLE(hex_bytes("d6be898e201660d4d3cebffb0201050319420c0303e7fe040948393850c27c")) >>> assert EIR_Appearance in p >>> assert p[EIR_Appearance].appearance == 0x0c42 >>> assert p[EIR_Appearance].category == 0x31 #'Pulse Oximeter' >>> assert p[EIR_Appearance].subcategory == 0x02 # Wrist Worn Pulse Oximeter ###(039)=[passed] Parse EIR_ServiceData32BitUUID >>> p = HCI_Hdr(hex_bytes('042fff01c47c80894df801000c0128a269a30c4a125d13f30196894df80c012820f61a1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')) >>> assert EIR_ServiceData32BitUUID in p >>> assert p[EIR_ServiceData32BitUUID].svc_uuid == 0x001a1af6 ###(040)=[passed] Parse EIR_URI >>> p = HCI_Event_Hdr(hex_bytes('3e2902010301f3c1dad728031d1c24172f2f6669726d776172652e73696c766169722e636f6d2f6f6f62ac')) >>> assert EIR_URI in p >>> assert p[EIR_URI].scheme == 0x17 >>> assert p[EIR_URI].uri_hier_part == b'//firmware.silvair.com/oob' >>> assert p[EIR_URI].uri == 'https://firmware.silvair.com/oob' ###(041)=[passed] Parse EIR_Flags, EIR_CompleteList16BitServiceUUIDs, EIR_CompleteLocalName and EIR_TX_Power_Level >>> ad_report_raw_data = \ ... hex_bytes("043e2b020100016522c00181781f0201020303d9fe1409" \ ... "506562626c652054696d65204c452037314536020a0cde") >>> scapy_packet = HCI_Hdr(ad_report_raw_data) >>> >>> assert scapy_packet[EIR_Flags].flags == 0x02 >>> assert scapy_packet[EIR_CompleteList16BitServiceUUIDs].svc_uuids == [0xfed9] >>> assert scapy_packet[EIR_CompleteLocalName].local_name == b'Pebble Time LE 71E6' >>> assert scapy_packet[EIR_TX_Power_Level].level == 12 ###(042)=[passed] Parse EIR_Manufacturer_Specific_Data >>> scan_resp_raw_data = \ ... hex_bytes("043e2302010401be5e0eb9f04f1716ff5401005f423331" \ ... "3134374432343631fc00030c0000de") >>> scapy_packet = HCI_Hdr(scan_resp_raw_data) >>> >>> assert raw(scapy_packet[EIR_Manufacturer_Specific_Data].payload) == b'\x00_B31147D2461\xfc\x00\x03\x0c\x00\x00' >>> assert scapy_packet[EIR_Manufacturer_Specific_Data].company_id == 0x154 ###(043)=[passed] Parse EIR_Manufacturer_Specific_Data with magic >>> class ScapyManufacturerPacket(Packet): ... magic = b'SCAPY!' ... fields_desc = [ ... StrFixedLenField("header", magic, len(magic)), ... ShortField("x", None), ... ] ... >>> class ScapyManufacturerPacket2(Packet): ... magic = b'!SCAPY' ... fields_desc = [ ... StrFixedLenField("header", magic, len(magic)), ... ShortField("y", None), ... ] ... @classmethod ... def magic_check(cls, payload): ... return payload.startswith(cls.magic) ... >>> EIR_Manufacturer_Specific_Data.register_magic_payload( ... ScapyManufacturerPacket, lambda p: p.startswith(ScapyManufacturerPacket.magic)) >>> EIR_Manufacturer_Specific_Data.register_magic_payload(ScapyManufacturerPacket2) >>> >>> p = EIR_Hdr(b'\x0b\xff\xff\xffSCAPY!\xab\x12') >>> >>> p.show() ###[ EIR Header ]### len = 11 type = mfg_specific_data ###[ EIR Manufacturer Specific Data ]### company_id= 0xffff ###[ ScapyManufacturerPacket ]### header = b'SCAPY!' x = 43794 >>> assert p[EIR_Manufacturer_Specific_Data].company_id == 0xffff >>> assert p[ScapyManufacturerPacket].x == 0xab12 >>> >>> p = EIR_Hdr(b'\x0b\xff\xff\xff!SCAPY\x12\x34') >>> >>> p.show() ###[ EIR Header ]### len = 11 type = mfg_specific_data ###[ EIR Manufacturer Specific Data ]### company_id= 0xffff ###[ ScapyManufacturerPacket2 ]### header = b'!SCAPY' y = 4660 >>> assert p[EIR_Manufacturer_Specific_Data].company_id == 0xffff >>> assert p[ScapyManufacturerPacket2].y == 0x1234 >>> >>> p = EIR_Hdr()/EIR_Manufacturer_Specific_Data(company_id=0xffff)/ScapyManufacturerPacket(x=0x5678) >>> assert raw(p) == b'\x0b\xff\xff\xffSCAPY!\x56\x78' >>> >>> try: ... EIR_Manufacturer_Specific_Data.register_magic_payload(conf.raw_layer) ... except TypeError: ... pass ... else: ... assert False, "expected exception" ... ###(044)=[passed] Parse EIR_ServiceSolicitation16BitUUID and EIR_ServiceSolicitation128BitUUID >>> d = hex_bytes("043e29020100013d1ef10747d81d0319000002010603140d181115d0002d121e4b0fa4994eceb531f40579aa") >>> p = HCI_Hdr(d) >>> assert p[EIR_ServiceSolicitation16BitUUID].svc_uuid == 0x180d >>> assert p[EIR_ServiceSolicitation128BitUUID].svc_uuid == UUID('7905f431-b5ce-4e99-a40f-4b1e122d00d0') ###(045)=[passed] Parse EIR_ServiceData16BitUUID >>> d = hex_bytes("043e1902010001abcdef7da97f0d020102030350fe051650fee6c2ac") >>> p = HCI_Hdr(d) >>> >>> p.show() ###[ HCI header ]### type = Event ###[ HCI Event header ]### code = 0x3e len = 25 ###[ HCI_LE_Meta ]### event = advertising_report ###[ Advertising Reports ]### len = 1 \reports \ |###[ Advertising Report ]### | type = conn_und | atype = random | addr = 7f:a9:7d:ef:cd:ab | len = 13 | \data \ | |###[ EIR Header ]### | | len = 2 | | type = flags | |###[ Flags ]### | | flags = general_disc_mode | |###[ EIR Header ]### | | len = 3 | | type = complete_list_16_bit_svc_uuids | |###[ Complete list of 16-bit service UUIDs ]### | | svc_uuids = [0xfe50] | |###[ EIR Header ]### | | len = 5 | | type = svc_data_16_bit_uuid | |###[ EIR Service Data - 16-bit UUID ]### | | svc_uuid = 0xfe50 | |###[ Raw ]### | | load = b'\xe6\xc2' | rssi = -84 >>> assert p[EIR_CompleteList16BitServiceUUIDs].svc_uuids == [0xfe50] >>> assert p[EIR_ServiceData16BitUUID].svc_uuid == 0xfe50 >>> assert raw(p[EIR_ServiceData16BitUUID].payload) == hex_bytes("e6c2") ###(046)=[passed] Basic L2CAP dissect >>> a = L2CAP_Hdr(b'\x08\x00\x06\x00\t\x00\xf6\xe5\xd4\xc3\xb2\xa1') >>> assert a[SM_Identity_Address_Information].address == 'a1:b2:c3:d4:e5:f6' >>> assert a[SM_Identity_Address_Information].atype == 0 >>> a.show() ###[ L2CAP header ]### len = 8 cid = 6 ###[ SM header ]### sm_command= 9 ###[ Identity Address Information ]### atype = public address = a1:b2:c3:d4:e5:f6 ###(047)=[passed] Basic HCI_ACL_Hdr build & dissect >>> a = HCI_Hdr()/HCI_ACL_Hdr(handle=0xf4c, PB=2, BC=2, len=20)/L2CAP_Hdr(len=16)/L2CAP_CmdHdr(code=8, len=12)/L2CAP_EchoReq(data="AAAAAAAAAAAA") >>> assert raw(a) == b'\x02L\xaf\x14\x00\x10\x00\x05\x00\x08\x01\x0c\x00AAAAAAAAAAAA' >>> b = HCI_Hdr(raw(a)) >>> assert a == b ###(048)=[passed] Complex HCI - L2CAP build >>> a = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/L2CAP_CmdHdr()/L2CAP_ConnReq(scid=1) >>> assert raw(a) == b'\x02\x00\x00\x0c\x00\x08\x00\x05\x00\x02\x01\x04\x00\x00\x00\x01\x00' >>> a.show() ###[ HCI header ]### type = ACL Data ###[ HCI ACL header ]### BC = 0 PB = 0 handle = 0 len = None ###[ L2CAP header ]### len = None cid = 5 ###[ L2CAP command header ]### code = conn_req id = 1 len = None ###[ L2CAP Conn Req ]### psm = 0 scid = 1 ###(049)=[passed] Complex HCI - L2CAP dissect >>> a = HCI_Hdr(b'\x02\x00\x00\x11\x00\r\x00\x05\x00\x0b\x00\t\x00\x01\x00\x00\x00debug') >>> assert a[L2CAP_InfoResp].result == 0 >>> assert a[L2CAP_InfoResp].data == b"debug" ###(050)=[passed] HCI - L2CAP Echo test >>> rq = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/L2CAP_CmdHdr()/L2CAP_EchoReq(data=b"data") >>> assert bytes(rq) == b'\x02\x00\x00\x0c\x00\x08\x00\x05\x00\x08\x01\x04\x00data' >>> >>> rsp = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/L2CAP_CmdHdr()/L2CAP_EchoResp(data=b"data") >>> assert bytes(rsp) == b'\x02\x00\x00\x0c\x00\x08\x00\x05\x00\t\x01\x04\x00data' >>> assert rsp.answers(rq) ###(051)=[passed] HCI - L2CAP Create Channel request >>> p = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/L2CAP_CmdHdr()/L2CAP_Create_Channel_Request(psm="SDP") >>> assert bytes(p) == b'\x02\x00\x00\r\x00\t\x00\x05\x00\x0c\x01\x05\x00\x01\x00\x00\x00\x00' >>> >>> p = HCI_Hdr(bytes(p)) >>> assert p[L2CAP_Create_Channel_Request].psm == 1 >>> assert p[L2CAP_Create_Channel_Request].scid == 0 ###(052)=[passed] L2CAP Conn Answers >>> a = HCI_Hdr(b'\x02\x00\x00\x0c\x00\x08\x00\x05\x00\x02\x00\x04\x00\x00\x00\x9a;') >>> b = HCI_Hdr(b'\x02\x00\x00\x10\x00\x0c\x00\x05\x00\x03\x00\x08\x00\xff\xff\x9a;\x00\x00\x01\x00') >>> assert b.answers(a) >>> assert not a.answers(b) >>> >>> a = HCI_Hdr(b'\x02\x00\x00\x0c\x00\x08\x00\x05\x00\x04\x00\x04\x00\x15\x00\x00\x00') >>> b = HCI_Hdr(b'\x02\x00\x00\x0e\x00\n\x00\x05\x00\x05\x00\x06\x00\x15\x00\x00\x00\x02\x00') >>> assert b.answers(a) >>> assert not a.answers(b) ###(053)=[passed] EIR_Hdr - HCI_LE_Meta_Advertising_Report (single report) >>> a = HCI_Hdr()/HCI_Event_Hdr()/HCI_Event_LE_Meta()/HCI_LE_Meta_Advertising_Reports(reports=[ ... HCI_LE_Meta_Advertising_Report( ... addr="a1:b2:c3:d4:e5:f6", ... data=[ ... EIR_Hdr()/EIR_Flags(flags=['br_edr_not_supported']), ... EIR_Hdr()/EIR_CompleteLocalName(local_name="scapy"), ... ] ... ) ... ]) >>> assert raw(a) == b'\x04>\x16\x02\x01\x00\x00\xf6\xe5\xd4\xc3\xb2\xa1\n\x02\x01\x04\x06\tscapy\x00' >>> b = HCI_Hdr(raw(a)) >>> b.show() ###[ HCI header ]### type = Event ###[ HCI Event header ]### code = 0x3e len = 22 ###[ HCI_LE_Meta ]### event = advertising_report ###[ Advertising Reports ]### len = 1 \reports \ |###[ Advertising Report ]### | type = conn_und | atype = public | addr = a1:b2:c3:d4:e5:f6 | len = 10 | \data \ | |###[ EIR Header ]### | | len = 2 | | type = flags | |###[ Flags ]### | | flags = br_edr_not_supported | |###[ EIR Header ]### | | len = 6 | | type = complete_local_name | |###[ Complete Local Name ]### | | local_name= b'scapy' | rssi = 0 >>> assert b[HCI_Event_Hdr].len > 0 >>> assert b[EIR_CompleteLocalName].local_name == b"scapy" >>> assert b[HCI_LE_Meta_Advertising_Report].addr == "a1:b2:c3:d4:e5:f6" >>> >>> assert a.summary() == "HCI Event / HCI_Event_Hdr / HCI_Event_LE_Meta / HCI_LE_Meta_Advertising_Reports" ###(054)=[passed] EIR_Hdr - HCI_LE_Meta_Advertising_Report (duplicate reports) >>> a = HCI_Hdr()/HCI_Event_Hdr()/HCI_Event_LE_Meta()/HCI_LE_Meta_Advertising_Reports(reports=[ ... HCI_LE_Meta_Advertising_Report( ... addr="a1:b2:c3:d4:e5:f6", ... data=[ ... EIR_Hdr()/EIR_Flags(flags=['br_edr_not_supported']), ... EIR_Hdr()/EIR_CompleteLocalName(local_name="scapy"), ... ] ... ), ... HCI_LE_Meta_Advertising_Report( ... type=4, # Scan Response ... addr="a1:b2:c3:d4:e5:f6", ... data=[ ... EIR_Hdr()/EIR_Manufacturer_Specific_Data( ... company_id=0xffff, ... )/Raw(b"ypacs"), ... EIR_Hdr()/EIR_TX_Power_Level(level=10), ... EIR_Hdr()/EIR_CompleteList128BitServiceUUIDs(svc_uuids=[ ... "01234567-89ab-cdef-1023-456789abcdfe", ... ]) ... ] ... ) ... ]) >>> assert raw(a) == b'\x04>>\x02\x02\x00\x00\xf6\xe5\xd4\xc3\xb2\xa1\n\x02\x01\x04\x06\tscapy\x00\x04\x00\xf6\xe5\xd4\xc3\xb2\xa1\x1e\x08\xff\xff\xffypacs\x02\n\n\x11\x07\xfe\xcd\xab\x89gE#\x10\xef\xcd\xab\x89gE#\x01\x00' >>> >>> b = HCI_Hdr(raw(a)) >>> b.show() ###[ HCI header ]### type = Event ###[ HCI Event header ]### code = 0x3e len = 62 ###[ HCI_LE_Meta ]### event = advertising_report ###[ Advertising Reports ]### len = 2 \reports \ |###[ Advertising Report ]### | type = conn_und | atype = public | addr = a1:b2:c3:d4:e5:f6 | len = 10 | \data \ | |###[ EIR Header ]### | | len = 2 | | type = flags | |###[ Flags ]### | | flags = br_edr_not_supported | |###[ EIR Header ]### | | len = 6 | | type = complete_local_name | |###[ Complete Local Name ]### | | local_name= b'scapy' | rssi = 0 |###[ Advertising Report ]### | type = scan_rsp | atype = public | addr = a1:b2:c3:d4:e5:f6 | len = 30 | \data \ | |###[ EIR Header ]### | | len = 8 | | type = mfg_specific_data | |###[ EIR Manufacturer Specific Data ]### | | company_id= 0xffff | |###[ Raw ]### | | load = b'ypacs' | |###[ EIR Header ]### | | len = 2 | | type = tx_power_level | |###[ TX Power Level ]### | | level = 10 | |###[ EIR Header ]### | | len = 17 | | type = complete_list_128_bit_svc_uuids | |###[ Complete list of 128-bit service UUIDs ]### | | svc_uuids = [UUID('01234567-89ab-cdef-1023-456789abcdfe')] | rssi = 0 >>> assert b[HCI_Event_Hdr].len > 0 >>> assert b[EIR_CompleteLocalName].local_name == b"scapy" >>> assert b[HCI_LE_Meta_Advertising_Report].addr == "a1:b2:c3:d4:e5:f6" >>> assert b[EIR_Manufacturer_Specific_Data].company_id == 0xffff >>> assert raw(b[EIR_Manufacturer_Specific_Data].payload) == b"ypacs" >>> assert b[EIR_TX_Power_Level].level == 10 >>> assert b[EIR_CompleteList128BitServiceUUIDs].svc_uuids[0] == UUID("01234567-89ab-cdef-1023-456789abcdfe") >>> >>> assert a.summary() == "HCI Event / HCI_Event_Hdr / HCI_Event_LE_Meta / HCI_LE_Meta_Advertising_Reports" ###(055)=[passed] EIR_Hdr - HCI_LE_Meta_Extended_Advertising_Report >>> a = HCI_Hdr()/HCI_Event_Hdr()/HCI_Event_LE_Meta()/HCI_LE_Meta_Extended_Advertising_Reports(reports=[ ... HCI_LE_Meta_Extended_Advertising_Report( ... #event_type = 0x0012, ... scannable = 1, ... legacy = 1, ... address_type = 0x01, ... address="a1:b2:c3:d4:e5:f6", ... primary_phy = 1, ... rssi = -85, ... data=[ ... EIR_Hdr()/EIR_CompleteList16BitServiceUUIDs( ... svc_uuids = [0xffff], ... ), ... EIR_Hdr()/EIR_ServiceData16BitUUID( ... svc_uuid = 0xffff ... )/Raw(b"scapy\x00\x00\x00") ... ] ... ), ... HCI_LE_Meta_Extended_Advertising_Report( ... #event_type = 0x001a, ... scannable = 1, ... scan_response = 1, ... legacy = 1, ... address_type = 0x01, ... address="a1:b2:c3:d4:e5:f6", ... primary_phy = 1, ... rssi = -85, ... data=[ ... EIR_Hdr()/EIR_Manufacturer_Specific_Data( ... company_id = 0xffff, ... ) / Raw(b"scapy\x00\x01\x02\x03\x04") ... ] ... ), ... ]) >>> >>> assert raw(a) == b"\x04\x3e\x50\x0d\x02\x12\x00\x01\xf6\xe5\xd4\xc3\xb2\xa1\x01\x00\xff\x7f\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x03\x03\xff\xff\x0b\x16\xff\xffscapy\x00\x00\x00\x1a\x00\x01\xf6\xe5\xd4\xc3\xb2\xa1\x01\x00\xff\x7f\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x0d\xff\xff\xffscapy\x00\x01\x02\x03\x04" >>> >>> b = HCI_Hdr(raw(a)) >>> b.show() ###[ HCI header ]### type = Event ###[ HCI Event header ]### code = 0x3e len = 80 ###[ HCI_LE_Meta ]### event = extended_advertising_report ###[ Extended Advertising Reports ]### num_reports= 2 \reports \ |###[ Extended Advertising Report ]### | reserved0 = 0 | data_status= complete | legacy = 1 | scan_response= 0 | directed = 0 | scannable = 1 | connectable= 0 | reserved = 0 | address_type= random_device_address | address = a1:b2:c3:d4:e5:f6 | primary_phy= le_1m | secondary_phy= 0 | advertising_sid= 255 | tx_power = 127 | rssi = -85 | periodic_advertising_interval= 0 | direct_address_type= public_device_address | direct_address= 00:00:00:00:00:00 | data_length= 16 | \data \ | |###[ EIR Header ]### | | len = 3 | | type = complete_list_16_bit_svc_uuids | |###[ Complete list of 16-bit service UUIDs ]### | | svc_uuids = [0xffff] | |###[ EIR Header ]### | | len = 11 | | type = svc_data_16_bit_uuid | |###[ EIR Service Data - 16-bit UUID ]### | | svc_uuid = 0xffff | |###[ Raw ]### | | load = b'scapy\x00\x00\x00' |###[ Extended Advertising Report ]### | reserved0 = 0 | data_status= complete | legacy = 1 | scan_response= 1 | directed = 0 | scannable = 1 | connectable= 0 | reserved = 0 | address_type= random_device_address | address = a1:b2:c3:d4:e5:f6 | primary_phy= le_1m | secondary_phy= 0 | advertising_sid= 255 | tx_power = 127 | rssi = -85 | periodic_advertising_interval= 0 | direct_address_type= public_device_address | direct_address= 00:00:00:00:00:00 | data_length= 14 | \data \ | |###[ EIR Header ]### | | len = 13 | | type = mfg_specific_data | |###[ EIR Manufacturer Specific Data ]### | | company_id= 0xffff | |###[ Raw ]### | | load = b'scapy\x00\x01\x02\x03\x04' >>> assert b[HCI_Event_Hdr].len > 0 >>> assert b[HCI_LE_Meta_Extended_Advertising_Reports].num_reports == 2 >>> assert b[HCI_LE_Meta_Extended_Advertising_Report][0].address == "a1:b2:c3:d4:e5:f6" >>> assert b[HCI_LE_Meta_Extended_Advertising_Report][0].tx_power == 0x7f >>> assert b[HCI_LE_Meta_Extended_Advertising_Report][0].rssi == -85 >>> assert b[HCI_LE_Meta_Extended_Advertising_Report][0].data_length > 0 >>> assert b[EIR_CompleteList16BitServiceUUIDs].svc_uuids == [0xffff] >>> assert b[EIR_ServiceData16BitUUID].svc_uuid == 0xffff >>> assert raw(b[EIR_ServiceData16BitUUID].payload) == b"scapy\x00\x00\x00" >>> assert b[EIR_Manufacturer_Specific_Data].company_id == 0xffff >>> assert raw(b[EIR_Manufacturer_Specific_Data].payload) == b"scapy\x00\x01\x02\x03\x04" ###(056)=[passed] ATT_Hdr - misc >>> a = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/ATT_Hdr()/ATT_Read_By_Type_Request_128bit(uuid1=0xa14, uuid2=0xa24) >>> a = HCI_Hdr(raw(a)) >>> a.show() ###[ HCI header ]### type = ACL Data ###[ HCI ACL header ]### BC = 0 PB = 0 handle = 0 len = 25 ###[ L2CAP header ]### len = 21 cid = attribute ###[ ATT header ]### opcode = 0x8 ###[ Read By Type Request ]### start = 0x1 end = 0xffff uuid1 = 0xa14 uuid2 = 0xa24 >>> a.mysummary() 'HCI ACL Data' >>> assert ATT_Read_By_Type_Request_128bit in a >>> assert not Raw in a >>> >>> b = HCI_Hdr()/HCI_ACL_Hdr()/L2CAP_Hdr()/ATT_Hdr()/ATT_Read_By_Type_Request(uuid=0xa14) >>> b = HCI_Hdr(raw(b)) >>> b.show() ###[ HCI header ]### type = ACL Data ###[ HCI ACL header ]### BC = 0 PB = 0 handle = 0 len = 11 ###[ L2CAP header ]### len = 7 cid = attribute ###[ ATT header ]### opcode = 0x8 ###[ Read By Type Request ]### start = 0x1 end = 0xffff uuid = 0xa14 >>> b.mysummary() 'HCI ACL Data' >>> assert ATT_Read_By_Type_Request in b >>> assert not Raw in b ###(057)=[passed] ATT Read_By_Type_Response >>> pkt = HCI_Hdr(hex_bytes('0248201b001700040009070200020300002a0400020500012a0600020700042a')) >>> >>> assert pkt[ATT_Read_By_Type_Response].len == 7 >>> assert len(pkt.handles) == 3 >>> assert pkt.handles[0].handle == 0x2 >>> assert pkt.handles[1].handle == 0x4 >>> assert pkt.handles[2].handle == 0x6 >>> >>> pkt.handles[0].value == b'\x02\x03\x00\x00*' True >>> pkt.handles[1].value == b'\x02\x05\x00\x01*' True >>> pkt.handles[2].value == b'\x02\x07\x00\x04*' True ###(058)=[passed] SM_Security_Request >>> pkt = HCI_Hdr(hex_bytes('0200260600020006000b0d')) >>> assert SM_Security_Request in pkt >>> assert pkt[SM_Security_Request].auth_req == 0x0d ###(059)=[passed] SM_Public_Key() tests >>> r = raw(SM_Hdr()/SM_Public_Key(key_x="sca", key_y="py")) >>> assert r == b'\x0csca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00py\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> p = SM_Hdr(r) >>> assert SM_Public_Key in p and p.key_x[:3] == b"sca" and p.key_y[:2] == b"py" ###(060)=[passed] SM_DHKey_Check() tests >>> r = raw(SM_Hdr()/SM_DHKey_Check(dhkey_check="scapy")) >>> assert r == b'\rscapy\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> p = SM_Hdr(r) >>> assert SM_DHKey_Check in p and p.dhkey_check[:5] == b"scapy" ###### ## HCIMon tests ###### ###(061)=[passed] HCI_Mon - Bluetooth Monitor Pcap Header >>> p = HCI_Mon_Pcap_Hdr(hex_bytes("00000008")) >>> assert HCI_Mon_Pcap_Hdr in p >>> assert p[HCI_Mon_Pcap_Hdr].adapter_id == 0 >>> assert p[HCI_Mon_Pcap_Hdr].opcode == 8 ###(062)=[passed] HCI_Mon - Bluetooth Monitor HCI_Mon_New_Index >>> p = HCI_Mon_Pcap_Hdr(hex_bytes("0000000000030000109a81206863693000000000")) >>> assert HCI_Mon_New_Index in p >>> assert p[HCI_Mon_New_Index].bus == 0 >>> assert p[HCI_Mon_New_Index].type == 3 >>> assert p[HCI_Mon_New_Index].addr == '20:81:9a:10:00:00' >>> assert p[HCI_Mon_New_Index].devname.decode('utf-8').rstrip('\x00') == 'hci0' ###(063)=[passed] HCI_Mon - Bluetooth Monitor HCI_Mon_Delete_Index >>> p = HCI_Mon_Pcap_Hdr(hex_bytes("00000001")) >>> assert HCI_Mon_Pcap_Hdr in p >>> assert p[HCI_Mon_Pcap_Hdr].opcode == 1 ###(064)=[passed] HCI_Mon - Bluetooth Monitor HCI_Mon_Index_Info >>> p = HCI_Mon_Pcap_Hdr(hex_bytes("0000000a0000109a81203101")) >>> assert HCI_Mon_Index_Info in p >>> assert p[HCI_Mon_Index_Info].addr == '20:81:9a:10:00:00' >>> assert p[HCI_Mon_Index_Info].manufacturer == 0x131 ###(065)=[passed] HCI_Mon - Bluetooth Monitor HCI_Mon_System_Note >>> p = HCI_Mon_Pcap_Hdr(hex_bytes("ffff000c426c7565746f6f74682073756273797374656d2076657273696f6e20322e323200")) >>> assert HCI_Mon_System_Note in p >>> assert p[HCI_Mon_System_Note].note == b'Bluetooth subsystem version 2.22' Regression tests for the bluetooth4LE layer ━ Run at 04:11:23 from [test/scapy/layers/bluetooth4LE.uts] by UTscapy in 0.45421934127807617 └ Passed=37 └ Failed=0 ###### ## BTLE tests ###### ###(000)=[passed] Default build >>> a = BTLE()/BTLE_ADV()/BTLE_ADV_IND() >>> assert raw(a) == b'\xd6\xbe\x89\x8e\x00\x06\x00\x00\x00\x00\x00\x00Z9`' ###(001)=[passed] Basic dissection >>> b = BTLE(raw(a)) >>> assert b.crc == 0x5a3960 >>> assert b[BTLE_ADV_IND].AdvA == '00:00:00:00:00:00' ###(002)=[passed] BTLE_DATA build >>> a = BTLE(access_addr=0)/BTLE_DATA()/"toto" >>> a = BTLE(raw(a)) >>> assert a[BTLE_DATA].len == 4 >>> assert a[Raw].load == b"toto" ###(003)=[passed] Longer BTLE_ADV >>> a = BTLE()/BTLE_ADV()/BTLE_CONNECT_REQ()/(b"X"*200) >>> assert raw(a) == b'\xd6\xbe\x89\x8e\x05\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXI\xfc\xcf' >>> pkt = BTLE(raw(a)) >>> assert pkt.Length == 0xea >>> assert pkt.load == b"X" * 200 ###(004)=[passed] BTLE_DATA + EIR_ShortenedLocalName >>> test1 = BTLE() / BTLE_ADV() / BTLE_ADV_IND() / EIR_Hdr() / EIR_ShortenedLocalName(local_name= 'wussa') >>> test1e = BTLE(raw(test1)) >>> assert test1e[EIR_ShortenedLocalName].local_name == b"wussa" ###(005)=[passed] LL_CONNECTION_UPDATE_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CONNECTION_UPDATE_IND(win_size=2, win_offset=5, interval=0x400, timeout=500, instant=0xFEFE) >>> test = BTLE(raw(test)) >>> assert test[LL_CONNECTION_UPDATE_IND].win_size == 2 >>> assert test[LL_CONNECTION_UPDATE_IND].win_offset == 5 >>> assert test[LL_CONNECTION_UPDATE_IND].interval == 0x400 >>> assert test[LL_CONNECTION_UPDATE_IND].timeout == 500 >>> assert test[LL_CONNECTION_UPDATE_IND].instant == 0xFEFE ###(006)=[passed] LL_CHANNEL_MAP_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CHANNEL_MAP_IND(chM=0x1A1B1C1D1E, instant=0xFEFE) >>> test = BTLE(raw(test)) >>> assert test[LL_CHANNEL_MAP_IND].chM == 0x1A1B1C1D1E >>> assert test[LL_CHANNEL_MAP_IND].instant == 0xFEFE ###(007)=[passed] LL_TERMINATE_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_TERMINATE_IND(code=0x16) >>> test = BTLE(raw(test)) >>> assert test[LL_TERMINATE_IND].code == 0x16 ###(008)=[passed] LL_ENC_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_ENC_REQ(rand=0x1112131415161718, ediv=0x4321, ... skdm=0x1817161514131211, ivm=0x87654321) >>> test = BTLE(raw(test)) >>> assert test[LL_ENC_REQ].rand == 0x1112131415161718 >>> assert test[LL_ENC_REQ].ediv == 0x4321 >>> assert test[LL_ENC_REQ].skdm == 0x1817161514131211 >>> assert test[LL_ENC_REQ].ivm == 0x87654321 ###(009)=[passed] LL_ENC_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_ENC_RSP(skds=0x1817161514131211, ivs=0x87654321) >>> test = BTLE(raw(test)) >>> assert test[LL_ENC_RSP].skds == 0x1817161514131211 >>> assert test[LL_ENC_RSP].ivs == 0x87654321 ###(010)=[passed] LL_START_ENC_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_START_ENC_REQ() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 5 ###(011)=[passed] LL_START_ENC_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_START_ENC_RSP() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 6 ###(012)=[passed] LL_UNKNOWN_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_UNKNOWN_RSP(code=4) >>> test = BTLE(raw(test)) >>> assert test[LL_UNKNOWN_RSP].code == 4 ###(013)=[passed] LL_FEATURE_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_FEATURE_REQ(feature_set=0x011234) >>> test = BTLE(raw(test)) >>> assert test[LL_FEATURE_REQ].feature_set == \ ... "ext_reject_ind+le_ping+le_data_len_ext+tx_mod_idx+le_ext_adv+conn_cte_req" ###(014)=[passed] LL_FEATURE_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_FEATURE_RSP(feature_set=0x104321) >>> test = BTLE(raw(test)) >>> print(test[LL_FEATURE_RSP].feature_set) le_encryption+le_data_len_ext+le_2m_phy+tx_mod_idx+ch_sel_alg+antenna_switching_cte_aod_tx >>> assert test[LL_FEATURE_RSP].feature_set == \ ... "le_encryption+le_data_len_ext+le_2m_phy+tx_mod_idx+ch_sel_alg+antenna_switching_cte_aod_tx" ###(015)=[passed] LL_PAUSE_ENC_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_PAUSE_ENC_REQ() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 10 ###(016)=[passed] LL_PAUSE_ENC_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_PAUSE_ENC_RSP() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 11 ###(017)=[passed] LL_VERSION_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_VERSION_IND(version=7, company=0x59, subversion=1) >>> test = BTLE(raw(test)) >>> assert test[LL_VERSION_IND].version == 7 >>> assert test[LL_VERSION_IND].company == 0x59 >>> assert test[LL_VERSION_IND].subversion == 1 ###(018)=[passed] LL_REJECT_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_REJECT_IND(code=4) >>> test = BTLE(raw(test)) >>> assert test[LL_REJECT_IND].code == 4 ###(019)=[passed] LL_SLAVE_FEATURE_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_SLAVE_FEATURE_REQ(feature_set=0x1234) >>> test = BTLE(raw(test)) >>> assert test[LL_SLAVE_FEATURE_REQ].feature_set == \ ... "ext_reject_ind+le_ping+le_data_len_ext+tx_mod_idx+le_ext_adv" ###(020)=[passed] LL_CONNECTION_PARAM_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CONNECTION_PARAM_REQ(interval_min=10, interval_max=12, latency=1, timeout=2, ... preferred_periodicity=3, reference_conn_evt_count=4, ... offset0=5, offset1=6, offset2=7, offset3=8, offset4=9, offset5=10) >>> test = BTLE(raw(test)) >>> assert test[LL_CONNECTION_PARAM_REQ].interval_min == 10 >>> assert test[LL_CONNECTION_PARAM_REQ].interval_max == 12 >>> assert test[LL_CONNECTION_PARAM_REQ].latency == 1 >>> assert test[LL_CONNECTION_PARAM_REQ].timeout == 2 >>> assert test[LL_CONNECTION_PARAM_REQ].preferred_periodicity == 3 >>> assert test[LL_CONNECTION_PARAM_REQ].reference_conn_evt_count == 4 >>> assert test[LL_CONNECTION_PARAM_REQ].offset0 == 5 >>> assert test[LL_CONNECTION_PARAM_REQ].offset1 == 6 >>> assert test[LL_CONNECTION_PARAM_REQ].offset2 == 7 >>> assert test[LL_CONNECTION_PARAM_REQ].offset3 == 8 >>> assert test[LL_CONNECTION_PARAM_REQ].offset4 == 9 >>> assert test[LL_CONNECTION_PARAM_REQ].offset5 == 10 ###(021)=[passed] LL_CONNECTION_PARAM_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CONNECTION_PARAM_RSP(interval_min=10, interval_max=12, latency=1, timeout=2, ... preferred_periodicity=3, reference_conn_evt_count=4, ... offset0=5, offset1=6, offset2=7, offset3=8, offset4=9, offset5=10) >>> test = BTLE(raw(test)) >>> assert test[LL_CONNECTION_PARAM_RSP].interval_min == 10 >>> assert test[LL_CONNECTION_PARAM_RSP].interval_max == 12 >>> assert test[LL_CONNECTION_PARAM_RSP].latency == 1 >>> assert test[LL_CONNECTION_PARAM_RSP].timeout == 2 >>> assert test[LL_CONNECTION_PARAM_RSP].preferred_periodicity == 3 >>> assert test[LL_CONNECTION_PARAM_RSP].reference_conn_evt_count == 4 >>> assert test[LL_CONNECTION_PARAM_RSP].offset0 == 5 >>> assert test[LL_CONNECTION_PARAM_RSP].offset1 == 6 >>> assert test[LL_CONNECTION_PARAM_RSP].offset2 == 7 >>> assert test[LL_CONNECTION_PARAM_RSP].offset3 == 8 >>> assert test[LL_CONNECTION_PARAM_RSP].offset4 == 9 >>> assert test[LL_CONNECTION_PARAM_RSP].offset5 == 10 ###(022)=[passed] LL_REJECT_EXT_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_REJECT_EXT_IND(reject_opcode=2, error_code=4) >>> test = BTLE(raw(test)) >>> assert test[LL_REJECT_EXT_IND].reject_opcode == 2 >>> assert test[LL_REJECT_EXT_IND].error_code == 4 ###(023)=[passed] LL_PING_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_PING_REQ() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 18 ###(024)=[passed] LL_PING_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / LL_PING_RSP() >>> test = BTLE(raw(test)) >>> assert test[BTLE_CTRL].opcode == 19 ###(025)=[passed] LL_LENGTH_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_LENGTH_REQ(max_rx_bytes=28, max_rx_time=329, max_tx_bytes=29, max_tx_time=330) >>> test = BTLE(raw(test)) >>> assert test[LL_LENGTH_REQ].max_rx_bytes == 28 >>> assert test[LL_LENGTH_REQ].max_rx_time == 329 >>> assert test[LL_LENGTH_REQ].max_tx_bytes == 29 >>> assert test[LL_LENGTH_REQ].max_tx_time == 330 ###(026)=[passed] LL_LENGTH_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_LENGTH_RSP(max_tx_bytes=28, max_tx_time=329, max_rx_bytes=29, max_rx_time=330) >>> test = BTLE(raw(test)) >>> assert test[LL_LENGTH_RSP].max_tx_bytes == 28 >>> assert test[LL_LENGTH_RSP].max_tx_time == 329 >>> assert test[LL_LENGTH_RSP].max_rx_bytes == 29 >>> assert test[LL_LENGTH_RSP].max_rx_time == 330 ###(027)=[passed] LL_PHY_REQ >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_PHY_REQ(tx_phys="phy_1m+phy_2m", rx_phys="phy_coded") >>> test = BTLE(raw(test)) >>> assert test[LL_PHY_REQ].tx_phys == "phy_1m+phy_2m" >>> assert test[LL_PHY_REQ].rx_phys == "phy_coded" ###(028)=[passed] LL_PHY_RSP >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_PHY_RSP(tx_phys="phy_1m+phy_2m", rx_phys="phy_coded") >>> test = BTLE(raw(test)) >>> assert test[LL_PHY_RSP].tx_phys == "phy_1m+phy_2m" >>> assert test[LL_PHY_RSP].rx_phys == "phy_coded" ###(029)=[passed] LL_PHY_UPDATE_IND >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_PHY_UPDATE_IND(tx_phy="phy_2m", rx_phy="phy_coded", instant=1234) >>> test = BTLE(raw(test)) >>> assert test[LL_PHY_UPDATE_IND].tx_phy == "phy_2m" >>> assert test[LL_PHY_UPDATE_IND].rx_phy == "phy_coded" >>> assert test[LL_PHY_UPDATE_IND].instant == 1234 >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_MIN_USED_CHANNELS_IND(phys="phy_1m+phy_2m", min_used_channels=3) >>> test = BTLE(raw(test)) >>> assert test[LL_MIN_USED_CHANNELS_IND].phys == "phy_1m+phy_2m" >>> assert test[LL_MIN_USED_CHANNELS_IND].min_used_channels == 3 >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CTE_REQ(min_cte_len_req=20, rfu=1, cte_type_req=2) >>> test = BTLE(raw(test)) >>> assert test[LL_CTE_REQ].min_cte_len_req == 20 >>> assert test[LL_CTE_REQ].rfu == 1 >>> assert test[LL_CTE_REQ].cte_type_req == 2 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CTE_RSP() >>> test = BTLE(raw(test)) >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_PERIODIC_SYNC_IND(id=2, ... sync_info=12345, ... conn_event_count=0x4321, ... last_pa_event_counter=0xabcd, sid=0xF, ... a_type=1, sca=3, phy=2, AdvA="cc:bb:bb:bb:bb:bb", ... sync_conn_event_count=32) >>> test = BTLE(raw(test)) >>> assert test[LL_PERIODIC_SYNC_IND].id == 2 >>> assert test[LL_PERIODIC_SYNC_IND].sync_info == 12345 >>> assert test[LL_PERIODIC_SYNC_IND].conn_event_count == 0x4321 >>> assert test[LL_PERIODIC_SYNC_IND].last_pa_event_counter == 0xabcd >>> assert test[LL_PERIODIC_SYNC_IND].sid == 0xF >>> assert test[LL_PERIODIC_SYNC_IND].a_type == 1 >>> assert test[LL_PERIODIC_SYNC_IND].sca == 3 >>> assert test[LL_PERIODIC_SYNC_IND].phy == 2 >>> assert test[LL_PERIODIC_SYNC_IND].AdvA == "cc:bb:bb:bb:bb:bb" >>> assert test[LL_PERIODIC_SYNC_IND].sync_conn_event_count == 32 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CLOCK_ACCURACY_REQ(sca=2) >>> test = BTLE(raw(test)) >>> assert test[LL_CLOCK_ACCURACY_REQ].sca == 2 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CLOCK_ACCURACY_RSP(sca=3) >>> test = BTLE(raw(test)) >>> assert test[LL_CLOCK_ACCURACY_RSP].sca == 3 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CIS_REQ(cig_id=3, cis_id=2, phy_c_to_p=1, phy_p_to_c=2, ... max_sdu_c_to_p=123, max_sdu_p_to_c=321, ... sdu_interval_c_to_p=234, framed=1, sdu_interval_p_to_c=432, ... max_pdu_c_to_p=123, max_pdu_p_to_c=234, ... nse=10, subinterval=4567, ... bn_c_to_p=3, bn_p_to_c=2, ... ft_c_to_p=15, ft_p_to_c=16, ... iso_interval=12345, ... cis_offset_min=1, cis_offset_max=999, ... conn_event_count=2) >>> test = BTLE(raw(test)) >>> assert test[LL_CIS_REQ].cig_id == 3 >>> assert test[LL_CIS_REQ].cis_id == 2 >>> assert test[LL_CIS_REQ].phy_c_to_p == 1 >>> assert test[LL_CIS_REQ].phy_p_to_c == 2 >>> assert test[LL_CIS_REQ].max_sdu_c_to_p == 123 >>> assert test[LL_CIS_REQ].framed == 1 >>> assert test[LL_CIS_REQ].max_sdu_p_to_c == 321 >>> assert test[LL_CIS_REQ].sdu_interval_c_to_p == 234 >>> assert test[LL_CIS_REQ].sdu_interval_p_to_c == 432 >>> assert test[LL_CIS_REQ].max_pdu_c_to_p == 123 >>> assert test[LL_CIS_REQ].max_pdu_p_to_c == 234 >>> assert test[LL_CIS_REQ].nse == 10 >>> assert test[LL_CIS_REQ].subinterval == 4567 >>> assert test[LL_CIS_REQ].bn_c_to_p == 3 >>> assert test[LL_CIS_REQ].bn_p_to_c == 2 >>> assert test[LL_CIS_REQ].ft_c_to_p == 15 >>> assert test[LL_CIS_REQ].ft_p_to_c == 16 >>> assert test[LL_CIS_REQ].iso_interval == 12345 >>> assert test[LL_CIS_REQ].cis_offset_min == 1 >>> assert test[LL_CIS_REQ].cis_offset_max == 999 >>> assert test[LL_CIS_REQ].conn_event_count == 2 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CIS_RSP(cis_offset_min=1, cis_offset_max=999, conn_event_count=400) >>> test = BTLE(raw(test)) >>> assert test[LL_CIS_RSP].cis_offset_min == 1 >>> assert test[LL_CIS_RSP].cis_offset_max == 999 >>> assert test[LL_CIS_RSP].conn_event_count == 400 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CIS_IND(AA=0x12345678, cis_offset=1, ... cig_sync_delay=999, cis_sync_delay=400, conn_event_count=300) >>> test = BTLE(raw(test)) >>> assert test[LL_CIS_IND].AA == 0x12345678 >>> assert test[LL_CIS_IND].cis_offset == 1 >>> assert test[LL_CIS_IND].cig_sync_delay == 999 >>> assert test[LL_CIS_IND].cis_sync_delay == 400 >>> assert test[LL_CIS_IND].conn_event_count == 300 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CIS_TERMINATE_IND(cig_id=33, cis_id=44, error_code=55) >>> test = BTLE(raw(test)) >>> assert test[LL_CIS_TERMINATE_IND].cig_id == 33 >>> assert test[LL_CIS_TERMINATE_IND].cis_id == 44 >>> assert test[LL_CIS_TERMINATE_IND].error_code == 55 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_POWER_CONTROL_REQ(phy=3, delta=-34, tx_power=55) >>> test = BTLE(raw(test)) >>> assert test[LL_POWER_CONTROL_REQ].phy == 3 >>> assert test[LL_POWER_CONTROL_REQ].delta == -34 >>> assert test[LL_POWER_CONTROL_REQ].tx_power == 55 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_POWER_CONTROL_RSP(min=0, max=1, delta=-34, tx_power=55, apr=4) >>> test = BTLE(raw(test)) >>> assert test[LL_POWER_CONTROL_RSP].min == 0 >>> assert test[LL_POWER_CONTROL_RSP].max == 1 >>> assert test[LL_POWER_CONTROL_RSP].delta == -34 >>> assert test[LL_POWER_CONTROL_RSP].tx_power == 55 >>> assert test[LL_POWER_CONTROL_RSP].apr == 4 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_POWER_CHANGE_IND(phy=3, min=0, max=1, delta=-34, tx_power=55) >>> test = BTLE(raw(test)) >>> assert test[LL_POWER_CHANGE_IND].phy == 3 >>> assert test[LL_POWER_CHANGE_IND].min == 0 >>> assert test[LL_POWER_CHANGE_IND].max == 1 >>> assert test[LL_POWER_CHANGE_IND].delta == -34 >>> assert test[LL_POWER_CHANGE_IND].tx_power == 55 >>> >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_SUBRATE_REQ(subrate_factor_min=3, subrate_factor_max=0, ... max_latency=1, continuation_number=123, timeout=55) >>> test = BTLE(raw(test)) >>> assert test[LL_SUBRATE_REQ].subrate_factor_min == 3 >>> assert test[LL_SUBRATE_REQ].subrate_factor_max == 0 >>> assert test[LL_SUBRATE_REQ].max_latency == 1 >>> assert test[LL_SUBRATE_REQ].continuation_number == 123 >>> assert test[LL_SUBRATE_REQ].timeout == 55 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_SUBRATE_IND(subrate_factor=3, subrate_base_event=0, ... latency=1, continuation_number=123, timeout=55) >>> test = BTLE(raw(test)) >>> assert test[LL_SUBRATE_IND].subrate_factor == 3 >>> assert test[LL_SUBRATE_IND].subrate_base_event == 0 >>> assert test[LL_SUBRATE_IND].latency == 1 >>> assert test[LL_SUBRATE_IND].continuation_number == 123 >>> assert test[LL_SUBRATE_IND].timeout == 55 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CHANNEL_REPORTING_IND(enable=1, min_spacing=123, max_delay=124) >>> test = BTLE(raw(test)) >>> assert test[LL_CHANNEL_REPORTING_IND].enable == 1 >>> assert test[LL_CHANNEL_REPORTING_IND].min_spacing == 123 >>> assert test[LL_CHANNEL_REPORTING_IND].max_delay == 124 >>> >>> >>> >>> test = BTLE(access_addr=1) / BTLE_DATA() / BTLE_CTRL() / \ ... LL_CHANNEL_STATUS_IND(channel_classification=123456789012345) >>> test = BTLE(raw(test)) >>> assert test[LL_CHANNEL_STATUS_IND].channel_classification == 123456789012345 ###(030)=[passed] BTLE_DATA + BTLE_EMPTY_PDU >>> test = BTLE(access_addr=1)/BTLE_DATA(LLID=1, len=0)/BTLE_EMPTY_PDU() >>> a = BTLE(raw(test)) >>> print(dir(a)) ['_PickleType', '__all_slots__', '__bool__', '__bytes__', '__class__', '__class_getitem__', '__contains__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__div__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__iterlen__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__nonzero__', '__orig_bases__', '__parameters__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__rtruediv__', '__setattr__', '__setitem__', '__setstate__', '__signature__', '__sizeof__', '__slots__', '__static_attributes__', '__str__', '__subclasshook__', '__truediv__', '__weakref__', '_answered', '_command', '_do_summary', '_name', '_overload_fields', '_pkt', '_raw_packet_cache_field_value', '_resolve_alias', '_show_or_dump', '_superdir', 'access_addr', 'add_parent', 'add_payload', 'add_underlayer', 'aliastypes', 'answers', 'build', 'build_done', 'build_padding', 'build_ps', 'canvas_dump', 'class_default_fields', 'class_default_fields_ref', 'class_dont_cache', 'class_fieldtype', 'class_packetfields', 'clear_cache', 'clone_with', 'command', 'comment', 'compute_crc', 'copy', 'copy_field_value', 'copy_fields_dict', 'crc', 'decode_payload_as', 'default_fields', 'default_payload_class', 'delfieldval', 'deprecated_fields', 'direction', 'display', 'dissect', 'dissection_done', 'do_build', 'do_build_payload', 'do_build_ps', 'do_dissect', 'do_dissect_payload', 'do_init_cached_fields', 'do_init_fields', 'explicit', 'extract_padding', 'fields', 'fields_desc', 'fieldtype', 'firstlayer', 'fragment', 'from_hexcap', 'get_field', 'getfield_and_val', 'getfieldval', 'getlayer', 'guess_payload_class', 'hashret', 'haslayer', 'hide_defaults', 'init_fields', 'iterpayloads', 'json', 'lastlayer', 'layers', 'lower_bonds', 'match_subclass', 'mysummary', 'name', 'original', 'overload_fields', 'overloaded_fields', 'packetfields', 'parent', 'payload', 'payload_guess', 'pdfdump', 'post_build', 'post_dissect', 'post_dissection', 'post_transforms', 'pre_dissect', 'prepare_cached_fields', 'process_information', 'psdump', 'raw_packet_cache', 'raw_packet_cache_fields', 'remove_parent', 'remove_payload', 'remove_underlayer', 'route', 'self_build', 'sent_time', 'setfieldval', 'show', 'show2', 'show_indent', 'show_summary', 'sniffed_on', 'sprintf', 'stop_dissection_after', 'summary', 'svgdump', 'time', 'underlayer', 'upper_bonds', 'wirelen'] >>> print(a.layers) >> >>> print(a[BTLE_DATA].len, a[BTLE_DATA].LLID) 0 1 >>> assert a[BTLE_DATA].len == 0 ###(031)=[passed] BTLE_DATA + ATT_PrepareWriteReq >>> test3 = BTLE(access_addr=1) / BTLE_DATA() / L2CAP_Hdr() / ATT_Hdr() / ATT_Prepare_Write_Request(gatt_handle = 0xa, data="test") >>> test3e = BTLE(raw(test3)) >>> assert test3e[ATT_Prepare_Write_Request].data == b"test" >>> assert test3e[ATT_Prepare_Write_Request].gatt_handle == 0xa >>> assert test3e[ATT_Hdr].opcode == 0x16 ###(032)=[passed] BTLE layers >>> pkt = BTLE()/BTLE_ADV()/BTLE_ADV_DIRECT_IND()/BTLE_ADV_IND()/BTLE_ADV_NONCONN_IND()/BTLE_ADV_SCAN_IND()/BTLE_CONNECT_REQ()/BTLE_DATA()/BTLE_PPI()/BTLE_SCAN_REQ()/BTLE_SCAN_RSP() >>> assert BTLE in pkt.layers() >>> assert BTLE_ADV in pkt.layers() >>> assert BTLE_ADV_DIRECT_IND in pkt.layers() >>> assert BTLE_ADV_IND in pkt.layers() >>> assert BTLE_ADV_NONCONN_IND in pkt.layers() >>> assert BTLE_ADV_SCAN_IND in pkt.layers() >>> assert BTLE_CONNECT_REQ in pkt.layers() >>> assert BTLE_DATA in pkt.layers() >>> assert BTLE_PPI in pkt.layers() >>> assert BTLE_SCAN_REQ in pkt.layers() >>> assert BTLE_SCAN_RSP in pkt.layers() ###(033)=[passed] BTLE_RF link >>> a = BTLE_RF()/BTLE()/BTLE_ADV()/BTLE_SCAN_REQ() >>> a.ScanA = "aa:aa:aa:aa:aa:aa" >>> a.AdvA = "bb:bb:bb:bb:bb:bb" >>> a.reference_access_address_valid = 1 >>> a.reference_access_address = 0x8e89bed6 >>> a.phy = 3 >>> a.type = 5 >>> a.noise = -90 >>> a.signal = -75 >>> a.rf_channel = 6 >>> a.access_address_offenses = 10 >>> assert raw(a) == b'\x06\xb5\xa6\n\xd6\xbe\x89\x8e\x90\xc2\xd6\xbe\x89\x8e\x03\x0c\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\x07\xb2a' >>> >>> a = BTLE_RF(raw(a)) >>> >>> assert a.noise == -90 >>> assert a.signal == -75 >>> assert a.phy == 3 >>> assert a.type == 5 >>> assert a.reference_access_address_valid == 1 >>> assert a[BTLE_SCAN_REQ].ScanA == "aa:aa:aa:aa:aa:aa" ###### ## Specific tests after issue GH#1673 ###### ###(034)=[passed] DLT_USER0 with PPI >>> pkt = PPI(b'\x00\x00\x18\x00\x93\x00\x00\x006u\x0c\x00\x00b\t\x00\xe1\xcf\x01\x00\xf1\xe3\x92\x00\xd6\xbe\x89\x8e@\x14M\x95P\x16\xfev\x02\x01\x1a\n\xffL\x00\x10\x05\x0b\x1c\x0e\xa86Z\xf0\x04') >>> assert BTLE_PPI in pkt.headers[0].payload >>> >>> assert BTLE not in pkt ###(035)=[passed] DLT_BLUETOOTH_LE_LL with PPI >>> pkt = PPI(b'\x00\x00\x18\x00\xfb\x00\x00\x006u\x0c\x00\x00b\t\x00\xe1\xcf\x01\x00\xf1\xe3\x92\x00\xd6\xbe\x89\x8e@\x14M\x95P\x16\xfev\x02\x01\x1a\n\xffL\x00\x10\x05\x0b\x1c\x0e\xa86Z\xf0\x04') >>> assert BTLE_PPI in pkt.headers[0].payload >>> >>> assert BTLE in pkt ###(036)=[passed] DLT_BLUETOOTH_LE_LL without PPI >>> pkt = BTLE_RF(b'\x00\xc6\x80\x00\xd6\xbe\x89\x8e7\x00\xd6\xbe\x89\x8e@\x14\x03g\xa6+\xcbi\x00\x01\x1a\n\xffL\x00\x12E\x03\x18y\x9e\x96\x07\xfa%') >>> assert BTLE_RF in pkt >>> assert BTLE in pkt Regression tests for the CAN layer ━ Run at 04:11:27 from [test/scapy/layers/can.uts] by UTscapy in 3.758531093597412 └ Passed=71 └ Failed=0 ###### ## Basic operations ###### ###(000)=[passed] Load module >>> import math >>> import random >>> >>> random.seed() >>> >>> load_layer("can", globals_dict=globals()) ###(001)=[passed] Build a packet >>> pkt = CAN(flags="error", identifier=1234, data="test") ###(002)=[passed] Dissect & parse >>> pkt = CAN(raw(pkt)) >>> pkt.flags == "error" and pkt.identifier == 1234 and pkt.length == 4 and pkt.data == b"test" True ###(003)=[passed] Check flags values >>> pkt = CAN(flags="remote_transmission_request") >>> pkt.flags == 0x2 True >>> pkt = CAN(flags="extended") >>> pkt.flags == 0x4 True ###### ## Example PCAP file ###### ###(004)=[passed] Read PCAP file From https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=CANopen.pca >>> conf.contribs['CAN']['swap-bytes'] = False >>> >>> from io import BytesIO >>> pcap_fd = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\xe3\x00\x00\x00\xe2\xf3mT\x93\x8c\x03\x00\t\x00\x00\x00\t\x00\x00\x00\x00\x00\x073\x01\x00\x00\x00\x00\xe2\xf3mT\xae\x8c\x03\x00\n\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02\x7f\x00\x00\x81\x00\xe2\xf3mTI\x8f\x03\x00\t\x00\x00\x00\t\x00\x00\x00\x00\x00\x07B\x01\x00\x00\x00\x00\xe2\xf3mTM\x8f\x03\x00\t\x00\x00\x00\t\x00\x00\x00\x00\x00\x07c\x01\x00\x00\x00\x00\xe2\xf3mTN\x8f\x03\x00\t\x00\x00\x00\t\x00\x00\x00\x00\x00\x07!\x01\x00\x00\x00\x00\xf8\xf3mTv\x98\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00@\x08\x10\x00\x00\x00\x00\x00\xf8\xf3mT\x96\x98\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x7f\x00\x00A\x08\x10\x00\x15\x00\x00\x00\xf8\xf3mT\xd4\x98\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\xf8\xf3mT\x12\x99\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x08\xf8\xf3mTC\x99\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x7f\x00\x00\x00UltraHi\xf8\xf3mTx\x99\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x08\xf8\xf3mT\xce\x99\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\xf8\xf3mT\xe0\x99\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x08\xf8\xf3mT \x9a\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x08\xf8\xf3mTo\x9a\x04\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x083\xf4mTw\xbe\t\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00@\x08\x10*\x00\x00\x00\x003\xf4mT4\xc0\t\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x00\x00\x00\x80\x08\x10*\x11\x00\t\x06i\xf4mT\xb0\x88\x0c\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\xe5\x08\x7f\x00\x00L\x00\x00\x00\x00\x00\x00\x00i\xf4mT+\x89\x0c\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\xe4\x08\x7f\x00\x00P\x00\x00\x00\x00\x00\x00\x00i\xf4mT-\x89\x0c\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\xe4\x08\x7f\x00\x00P\x00\x00\x00\x00\x00\x00\x00i\xf4mTS\x89\x0c\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\xe4\x08\x7f\x00\x00P\x00\x00\x00\x00\x00\x00\x00i\xf4mT\x99\x89\x0c\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x07\xe4\x08\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x8e\xf4mT\x86\xc4\x04\x00\n\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01B\x92\xf4mT\xae\xf0\x07\x00\n\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\xba\xf4mT%\xaa\x0b\x00\n\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02c\xe8\xf4mT\xbc\x0f\x06\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00#\x00b\x01asdf\xe8\xf4mT\x07\x10\x06\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x00\x00\x00\x80\x00b\x01\x00\x00\x02\x06\x0f\xf5mT\x1c\x81\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00@\x00b\x01\x00\x00\x00\x00\x0f\xf5mT\xfe\x81\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x00\x00\x00\x80\x00b\x01\x00\x00\x02\x068\xf5mT\x19\xc3\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00\xa0\x08\x10\x00\x10\x00\x00\x008\xf5mTg\xc3\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x7f\x00\x00\xc2\x08\x10\x00\x15\x00\x00\x008\xf5mT\xd8\xc3\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x088\xf5mT\x17\xc4\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x06B\x08\x7f\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x008\xf5mT\xca\xc4\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x05\xc2\x08\x00\x00\x00\x80\x00\x00\x00!\x00\x00\x08') >>> packets = rdpcap(pcap_fd) ###(005)=[passed] Check if parsing worked: each packet has a CAN layer >>> assert all(CAN in pkt for pkt in packets) ###(006)=[passed] Check if parsing worked: no packet has a Raw or Padding layer >>> not any(Raw in pkt or Padding in pkt for pkt in packets) True ###(007)=[passed] Identifiers >>> assert set(pkt.identifier for pkt in packets) == {0, 1474, 1602, 1825, 1843, 1858, 1891, 2020, 2021} ###(008)=[passed] Flags >>> assert set(pkt.flags for pkt in packets) == {0} ###(009)=[passed] Data length >>> set(pkt.length for pkt in packets) == {1, 2, 8} True ###(010)=[passed] read PCAP of a CookedLinux/SocketCAN capture with CANFD frames >>> conf.contribs['CAN']['swap-bytes'] = True >>> >>> packets = rdpcap(scapy_path("/test/pcaps/canfd.pcap.gz")) ###(011)=[passed] Check if parsing worked: each packet has a CANFD layer >>> assert all(CANFD in pkt[1] for pkt in packets) >>> >>> assert all(pkt.identifier == 0x123 for pkt in packets) >>> assert len(packets) == 4 ###### ## swap-bytes and remove-padding functionality (for PF_CAN socket interactions) ###### ###(012)=[passed] read PCAP of a CookedLinux/SocketCAN capture (CAN standard and extended) >>> conf.contribs['CAN']['swap-bytes'] = True >>> conf.contribs['CAN']['remove-padding'] = False >>> pcap_fd_can_a = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00q\x00\x00\x00\x15f`Zv\xde\n\x00 \x00\x00\x00 \x00\x00\x00\x00\x01\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xdf\x07\x00\x00\x03\x00\x00\x00\x02\x01\r\x00\x00\x00\x00\x00') >>> packets_can_a = rdpcap(pcap_fd_can_a) >>> pcap_fd_can_b = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00q\x00\x00\x00\xf4i`Z\xf3\x99\x07\x00 \x00\x00\x00 \x00\x00\x00\x00\x01\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xf13\xdb\x98\x03\x00\x00\x00\x02\x01\r\x00\x00\x00\x00\x00') >>> packets_can_b = rdpcap(pcap_fd_can_b) ###(013)=[passed] check CAN is detected over CookedLinux (each packet has both layers) >>> all(CAN in pkt for pkt in packets_can_a) True >>> all(CAN in pkt for pkt in packets_can_b) True >>> all(CookedLinux in pkt for pkt in packets_can_a) True >>> all(CookedLinux in pkt for pkt in packets_can_b) True ###(014)=[passed] Check if parsing worked: no packet has a Raw or Padding layer >>> not any(Raw in pkt or Padding in pkt for pkt in packets) True ###(015)=[passed] Check byte swap for dissection >>> packets_can_a[0].identifier == 0x7df True >>> packets_can_a[0].flags == 0x0 True >>> packets_can_b[0].identifier == 0x18db33f1 True >>> packets_can_b[0].flags == "extended" True ###(016)=[passed] Check byte swap-back for building >>> raw(packets_can_a[0]) == b'\x00\x01\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xdf\x07\x00\x00\x03\x00\x00\x00\x02\x01\r\x00\x00\x00\x00\x00' True >>> raw(packets_can_b[0]) == b'\x00\x01\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xf13\xdb\x98\x03\x00\x00\x00\x02\x01\r\x00\x00\x00\x00\x00' True >>> >>> conf.contribs['CAN']['swap-bytes'] = False ###(017)=[passed] Check building CAN packet with not padded data field check building check padding handling >>> p = CAN(flags='error', identifier=1234, data=b'') >>> bytes(p) b' \x00\x04\xd2\x00\x00\x00\x00' >>> p = CAN(flags='error', identifier=1234, data=b'\x0a\x0b') >>> bytes(p) b' \x00\x04\xd2\x02\x00\x00\x00\n\x0b' >>> >>> p_too_much_data = CAN(flags='error', length=1, identifier=1234, data=b'\x01\x02') >>> p = CAN(bytes(p_too_much_data)) >>> p.haslayer('Padding') and p['Padding'].load == b'\x02' True ###### ## rdcandump ###### ###(018)=[passed] Check rdcandump default default reading >>> conf.contribs['CAN']['remove-padding'] = True >>> >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan0 1F334455#1122334455667788 ... (1539191494.084177) vcan0 1F334455#1122334455667788 ... (1539191494.724228) vcan0 1F334455#1122334455667788 ... (1539191495.148182) vcan0 1F334455#1122334455667788 ... (1539191495.563320) vcan0 1F334455#1122334455667788 ... (1539191470.820239) vcan0 123##1112233445566778899aabbccddeeff ... (1539191495.563320) vcan0 1F334455##1112233445566778899aabbccddeeff''') >>> packets = rdcandump(pcap_fd) >>> assert len(packets) == 11 >>> assert packets[0].identifier == 0x123 >>> assert packets[8].identifier == 0x1F334455 >>> assert packets[8].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[8].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[8].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[9].identifier == 0x123 >>> assert packets[10].identifier == 0x1F334455 >>> assert packets[9].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >>> assert packets[10].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff' ###(019)=[passed] Check rdcandump_iterable default default reading >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan0 1F334455#1122334455667788 ... (1539191494.084177) vcan0 1F334455#1122334455667788 ... (1539191494.724228) vcan0 1F334455#1122334455667788 ... (1539191495.148182) vcan0 1F334455#1122334455667788 ... (1539191495.563320) vcan0 1F334455#1122334455667788 ... (1539191470.820239) vcan0 123##1112233445566778899aabbccddeeff ... (1539191495.563320) vcan0 1F334455##1112233445566778899aabbccddeeff''') >>> packets = [x for x in CandumpReader(pcap_fd)] >>> assert len(packets) == 11 >>> assert packets[0].identifier == 0x123 >>> assert packets[8].identifier == 0x1F334455 >>> assert packets[8].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[8].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[8].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[9].identifier == 0x123 >>> assert packets[10].identifier == 0x1F334455 >>> assert packets[9].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >>> assert packets[10].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff' ###(020)=[passed] Check rdcandump filter interface filter 1 interface filter 2 interface filter 3 interface filter 4 >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan1 123#11223344 ... (1539191471.503168) vcan1 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan0 1F334455#1122334455667788 ... (1539191494.084177) vcan1 1F334455#1122334455667788 ... (1539191494.724228) vcan1 1F334455#1122334455667788 ... (1539191495.148182) vcan0 1F334455#1122334455667788 ... (1539191495.563320) vcan1 1F334455#1122334455667788''') >>> packets = rdcandump(pcap_fd, interface="vcan0") >>> assert len(packets) == 4 >>> assert packets[0].identifier == 0x123 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[-1].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[-1].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan1 1F334455#1122334455667788 ... (1539191494.084177) vcan1 1F334455#1122334455667788 ... (1539191494.724228) vcan1 1F334455#1122334455667788 ... (1539191495.148182) vcan1 1F334455#1122334455667788 ... (1539191495.563320) vcan1 1F334455#1122334455667788''') >>> packets = rdcandump(pcap_fd, interface="vcan0") >>> assert len(packets) == 4 >>> assert packets[0].identifier == 0x123 >>> assert packets[0].length == 4 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan1 1F334455#1122334455667788 ... (1539191494.084177) vcan1 1F334455#1122334455667788 ... (1539191494.724228) vcan1 1F334455#1122334455667788 ... (1539191495.148182) vcan1 1F334455#1122334455667788 ... (1539191495.563320) vcan1 1F334455#1122334455667788''') >>> packets = rdcandump(pcap_fd, interface="vcan1") >>> assert len(packets) == 5 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[-1].flags == 0b100 >>> assert packets[-1].length == 8 >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan2 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan2 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan1 1F334455#1122334455667788 ... (1539191494.084177) vcan1 1F334455#1122334455667788 ... (1539191494.724228) vcan2 1F334455#1122334455667788 ... (1539191495.148182) vcan1 1F334455#1122334455667788 ... (1539191495.563320) vcan2 1F334455#1122334455667788''') >>> packets = rdcandump(pcap_fd, interface=["vcan1", "vcan0"]) >>> assert len(packets) == 5 >>> assert packets[0].identifier == 0x123 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[-1].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[-1].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###### ## Check rdcandump not log file format ###### ###(021)=[passed] interface not log file format >>> pcap_fd = BytesIO(b''' vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44 ... vcan0 1F334455 [09] 11 22 33 44 55 66 77 88 99 ... vcan0 1F3 [09] 11 22 33 44 55 66 77 88 99 ... ''') >>> packets = rdcandump(pcap_fd) >>> assert len(packets) == 10 >>> packets[-1].show() ###[ CANFD ]### flags = identifier= 0x1f3 length = 9 fd_flags = None reserved = 0 data = b'\x11"3DUfw\x88\x99' >>> assert packets[-3].identifier == 0x1F3 >>> assert packets[1].identifier == 0x1F3 >>> assert packets[0].identifier == 0x1F334455 >>> assert packets[0].flags == 0b100 >>> assert packets[-3].length == 4 >>> assert packets[0].length == 8 >>> assert packets[1].length == 8 >>> assert packets[-1].length == 9 >>> assert packets[8].length == 9 >>> assert packets[-3].data == b'\x11\x22\x33\x44' >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[8].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99' >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99' ###(022)=[passed] interface not log file format filtered 1 >>> pcap_fd = BytesIO(b''' vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F334455 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44 ... vcan0 1F334455 [09] 11 22 33 44 55 66 77 88 99 ... vcan1 1F3 [09] 11 22 33 44 55 66 77 88 99 ... ''') >>> packets = rdcandump(pcap_fd, interface="vcan0") >>> assert len(packets) == 5 >>> assert packets[-2].identifier == 0x1F3 >>> assert packets[2].identifier == 0x1F3 >>> assert packets[0].identifier == 0x1F334455 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[0].flags == 0b100 >>> assert packets[-2].length == 4 >>> assert packets[0].length == 8 >>> assert packets[2].length == 8 >>> assert packets[-1].length == 9 >>> assert packets[-2].data == b'\x11\x22\x33\x44' >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[2].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99' ###(023)=[passed] interface not log file format filtered 2 >>> pcap_fd = BytesIO(b''' vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F334455 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44 ... ''') >>> packets = rdcandump(pcap_fd, interface=["vcan0", "vcan1"]) >>> assert len(packets) == 6 >>> assert packets[-1].identifier == 0x1F3 >>> assert packets[1].identifier == 0x1F3 >>> assert packets[0].identifier == 0x1F334455 >>> assert packets[0].flags == 0b100 >>> assert packets[-1].length == 4 >>> assert packets[0].length == 8 >>> assert packets[1].length == 8 >>> assert packets[-1].data == b'\x11\x22\x33\x44' >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###### ## Check rdcandump count ###### ###(024)=[passed] interface not log file format filtered 2 count 1 >>> pcap_fd = BytesIO(b''' vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F334455 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44 ... ''') >>> packets = rdcandump(pcap_fd, interface=["vcan2"], ... count=2) >>> assert len(packets) == 2 >>> assert packets[0].identifier == 0x1F3 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[-1].flags == 0b100 >>> assert packets[-1].length == 8 >>> assert packets[0].length == 8 >>> assert packets[1].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###(025)=[passed] interface not log file format filtered 2 count 2 >>> pcap_fd = BytesIO(b''' vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan1 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F334455 [8] 11 22 33 44 55 66 77 88 ... vcan2 1F334455 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44 ... ''') >>> packets = rdcandump(pcap_fd, count=2) >>> assert len(packets) == 2 >>> assert packets[1].identifier == 0x1F3 >>> assert packets[0].identifier == 0x1F334455 >>> assert packets[0].flags == 0b100 >>> assert packets[-1].length == 8 >>> assert packets[0].length == 8 >>> assert packets[1].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###(026)=[passed] default reading >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan0 1F334455#1122334455667788 ... (1539191494.084177) vcan0 1F334455#1122334455667788 ... (1539191494.724228) vcan0 1F334455#1122334455667788 ... (1539191495.148182) vcan0 1F334455#1122334455667788 ... (1539191495.563320) vcan0 1F334455#1122334455667788''') >>> packets = rdcandump(pcap_fd, count=5) >>> assert len(packets) == 5 >>> assert packets[0].identifier == 0x123 >>> assert packets[-1].identifier == 0x1F334455 >>> assert packets[-1].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[-1].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[-1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###### ## Check rdcandump default extended frames id < 0x7ff ###### ###(027)=[passed] default reading >>> pcap_fd = BytesIO(b'''(1539191392.761779) vcan0 123#11223344 ... (1539191470.820239) vcan0 123#11223344 ... (1539191471.503168) vcan0 123#11223344 ... (1539191471.891423) vcan0 123#11223344 ... (1539191492.026403) vcan0 00000055#1122334455667788 ... (1539191494.084177) vcan0 00000055#1122334455667788 ... (1539191494.724228) vcan0 00000055#1122334455667788 ... (1539191495.148182) vcan0 00000055#1122334455667788 ... (1539191495.563320) vcan0 00000055#1122334455667788 ... (1539191494.724228) vcan0 00000055##1112233445566778899''') >>> packets = rdcandump(pcap_fd) >>> assert len(packets) == 10 >>> assert packets[0].identifier == 0x123 >>> assert packets[8].identifier == 0x55 >>> assert packets[8].flags == 0b100 >>> assert packets[0].length == 4 >>> assert packets[8].length == 8 >>> assert packets[0].data == b'\x11\x22\x33\x44' >>> assert packets[8].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[8].identifier == 0x55 >>> assert packets[8].flags == 0b100 >>> assert packets[9].length == 9 >>> assert packets[9].data == b'\x11\x22\x33\x44\x55\x66\x77\x88\x99' ###(028)=[passed] interface not log file format >>> pcap_fd = BytesIO(b''' vcan0 00000055 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 00000055 [8] 11 22 33 44 55 66 77 88 ... vcan0 1F3 [8] 11 22 33 44 55 66 77 88 ... vcan0 00000055 [8] 11 22 33 44 55 66 77 88 ... vcan0 00000055 [4] 11 22 33 44 ... vcan0 1F3 [4] 11 22 33 44''') >>> packets = rdcandump(pcap_fd) >>> assert len(packets) == 8 >>> packets[-1].show() ###[ CAN ]### flags = identifier= 0x1f3 length = 4 reserved = 0 data = b'\x11"3D' >>> assert packets[-1].identifier == 0x1F3 >>> assert packets[1].identifier == 0x1F3 >>> assert packets[0].identifier == 0x55 >>> assert packets[0].flags == 0b100 >>> assert packets[-1].length == 4 >>> assert packets[0].length == 8 >>> assert packets[1].length == 8 >>> assert packets[-1].data == b'\x11\x22\x33\x44' >>> assert packets[0].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' >>> assert packets[1].data == b'\x11\x22\x33\x44\x55\x66\x77\x88' ###### ## CAN Signals ###### ###(029)=[passed] Test invalid fields_desc >>> class testFrame1(SignalPacket): ... fields_desc = [ ... ByteField("sig0", 0), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B") ... ] ... >>> passed = False >>> >>> try: ... testFrame1(b"\xff\xff") ... except Scapy_Exception: ... passed = True ... >>> assert passed ###(030)=[passed] Test invalid fields_desc with ConditionalField >>> class testFrame1(SignalPacket): ... fields_desc = [ ... ConditionalField(ByteField("sig0", 0), lambda x: True), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B") ... ] ... >>> passed = False >>> try: ... testFrame1(b"\xff\xff") ... except Scapy_Exception: ... passed = True ... >>> assert passed ###(031)=[passed] Motorola byte order (Big Endian) dissect test >>> class testFrame1(SignalPacket): ... fields_desc = [ ... SignalField("sig0", default=0, start=1, size=2, fmt=">B"), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B"), ... SignalField("sig2", default=0, start=15, size=11, fmt=">B"), ... SignalField("sig3", default=0, start=20, size=12, fmt=">B"), ... SignalField("sig4", default=0, start=24, size=9, fmt=">B"), ... SignalField("sig7", default=0, start=47, size=10, fmt=">B"), ... SignalField("sig5", default=0, start=50, size=3, fmt=">B"), ... SignalField("sig6", default=0, start=53, size=3, fmt=">B"), ... SignalField("sig8", default=0, start=58, size=3, fmt=">B"), ... SignalField("sig9", default=0, start=61, size=3, fmt=">B"), ... SignalField("sig10", default=0, start=63, size=2, fmt=">B") ... ] ... >>> pkt = testFrame1(b'\xff\xff\xff\xff\xff\xff\xff\xff') >>> assert pkt.sig0 == 3 >>> assert pkt.sig1 == 0x3f >>> assert pkt.sig2 == 0x7ff >>> assert pkt.sig3 == 0xfff >>> assert pkt.sig4 == 0x1ff >>> assert pkt.sig7 == 0x3ff >>> assert pkt.sig5 == 7 >>> assert pkt.sig6 == 7 >>> assert pkt.sig8 == 7 >>> assert pkt.sig9 == 7 >>> assert pkt.sig10 == 3 >>> >>> >>> pkt = testFrame1(struct.pack(">> assert pkt.sig0 == 1 >>> assert pkt.sig1 == 21 >>> assert pkt.sig2 == 15 >>> assert pkt.sig3 == 0x7f >>> assert pkt.sig4 == 0x1 >>> assert pkt.sig7 == 0x203 >>> assert pkt.sig5 == 5 >>> assert pkt.sig6 == 2 >>> assert pkt.sig8 == 5 >>> assert pkt.sig9 == 2 >>> assert pkt.sig10 == 2 ###(032)=[passed] Motorola byte order (Big Endian) build test >>> pkt = testFrame1() >>> pkt.sig0 = 1 >>> pkt.sig1 = 21 >>> pkt.sig2 = 15 >>> pkt.sig3 = 0x7f >>> pkt.sig4 = 0x1 >>> pkt.sig7 = 0x203 >>> pkt.sig5 = 5 >>> pkt.sig6 = 2 >>> pkt.sig8 = 5 >>> pkt.sig9 = 2 >>> pkt.sig10 = 2 >>> >>> test = bytes(pkt) >>> assert bytes(test) == b'U\x01\xe0\xfe\x01\x80\xd5\x95' ###(033)=[passed] Motorola byte order (Big Endian) dissect test with mixed field order >>> class testFrame1(SignalPacket): ... fields_desc = [ ... SignalField("sig10", default=0, start=63, size=2, fmt=">B"), ... SignalField("sig0", default=0, start=1, size=2, fmt=">B"), ... SignalField("sig9", default=0, start=61, size=3, fmt=">B"), ... SignalField("sig5", default=0, start=50, size=3, fmt=">B"), ... SignalField("sig4", default=0, start=24, size=9, fmt=">B"), ... SignalField("sig7", default=0, start=47, size=10, fmt=">B"), ... SignalField("sig3", default=0, start=20, size=12, fmt=">B"), ... SignalField("sig6", default=0, start=53, size=3, fmt=">B"), ... SignalField("sig2", default=0, start=15, size=11, fmt=">B"), ... SignalField("sig8", default=0, start=58, size=3, fmt=">B"), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B"), ... ] ... >>> pkt = testFrame1(struct.pack(">> assert pkt.sig0 == 1 >>> assert pkt.sig1 == 21 >>> assert pkt.sig2 == 15 >>> assert pkt.sig3 == 0x7f >>> assert pkt.sig4 == 0x1 >>> assert pkt.sig7 == 0x203 >>> assert pkt.sig5 == 5 >>> assert pkt.sig6 == 2 >>> assert pkt.sig8 == 5 >>> assert pkt.sig9 == 2 >>> assert pkt.sig10 == 2 ###(034)=[passed] Motorola byte order (Big Endian) build test with mixed field order >>> class testFrame1(SignalPacket): ... fields_desc = [ ... SignalField("sig3", default=0, start=20, size=12, fmt=">B"), ... SignalField("sig4", default=0, start=24, size=9, fmt=">B"), ... SignalField("sig10", default=0, start=63, size=2, fmt=">B"), ... SignalField("sig2", default=0, start=15, size=11, fmt=">B"), ... SignalField("sig5", default=0, start=50, size=3, fmt=">B"), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B"), ... SignalField("sig6", default=0, start=53, size=3, fmt=">B"), ... SignalField("sig7", default=0, start=47, size=10, fmt=">B"), ... SignalField("sig9", default=0, start=61, size=3, fmt=">B"), ... SignalField("sig0", default=0, start=1, size=2, fmt=">B"), ... SignalField("sig8", default=0, start=58, size=3, fmt=">B"), ... ] ... >>> pkt = testFrame1() >>> pkt.sig0 = 1 >>> pkt.sig1 = 21 >>> pkt.sig2 = 15 >>> pkt.sig3 = 0x7f >>> pkt.sig4 = 0x1 >>> pkt.sig7 = 0x203 >>> pkt.sig5 = 5 >>> pkt.sig6 = 2 >>> pkt.sig8 = 5 >>> pkt.sig9 = 2 >>> pkt.sig10 = 2 >>> >>> test = bytes(pkt) >>> print(test) b'U\x01\xe0\xfe\x01\x80\xd5\x95' >>> assert bytes(test) == b'U\x01\xe0\xfe\x01\x80\xd5\x95' ###(035)=[passed] Intel byte order (Little Endian) dissect test >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig12", default=0, start=0, size=8, fmt=">> pkt = testFrame2(b'\xff\xff\xff\xff\xff\xff\xff\xff') >>> assert pkt.secSig1 == 0x3 >>> assert pkt.secSig2 == 0x1 >>> assert pkt.secSig3 == 0xf >>> assert pkt.secSig4 == 0x3 >>> assert pkt.secSig7 == 0x1 >>> assert pkt.secSig5 == 7 >>> assert pkt.secSig6 == 7 >>> assert pkt.secSig8 == 7 >>> assert pkt.secSig9 == 7 >>> assert pkt.secSig10 == 0xfff >>> assert pkt.secSig11 == 0x3ff >>> assert pkt.secSig12 == 0xff >>> >>> >>> pkt = testFrame2(struct.pack(">> >>> assert pkt.secSig1 == 0x1 >>> assert pkt.secSig2 == 0x1 >>> assert pkt.secSig3 == 0xe >>> assert pkt.secSig4 == 0x2 >>> assert pkt.secSig7 == 0x0 >>> assert pkt.secSig5 == 0 >>> assert pkt.secSig6 == 0 >>> assert pkt.secSig8 == 5 >>> assert pkt.secSig9 == 5 >>> assert pkt.secSig10 == 1 >>> assert pkt.secSig11 == 0x1fe >>> assert pkt.secSig12 == 0xA5 ###(036)=[passed] Intel byte order (Little Endian) build test >>> pkt = testFrame2() >>> >>> pkt.secSig12 = 0xA5 >>> pkt.secSig10 = 1 >>> pkt.secSig3 = 14 >>> pkt.secSig11 = 0x1fe >>> pkt.secSig5 = 0 >>> pkt.secSig6 = 0 >>> pkt.secSig9 = 5 >>> pkt.secSig2 = 1 >>> pkt.secSig8 = 5 >>> pkt.secSig7 = 0 >>> pkt.secSig1 = 1 >>> pkt.secSig4 = 2 >>> >>> assert bytes(pkt) == b'\xa5\x01\xe0\xfe\x01\x00\xd0\x95' ###(037)=[passed] Intel byte order (Little Endian) build test with mixed field order >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig1", default=0, start=60, size=2, fmt=">> pkt = testFrame2() >>> >>> pkt.secSig12 = 0xA5 >>> pkt.secSig10 = 1 >>> pkt.secSig3 = 14 >>> pkt.secSig11 = 0x1fe >>> pkt.secSig5 = 0 >>> pkt.secSig6 = 0 >>> pkt.secSig9 = 5 >>> pkt.secSig2 = 1 >>> pkt.secSig8 = 5 >>> pkt.secSig7 = 0 >>> pkt.secSig1 = 1 >>> pkt.secSig4 = 2 >>> >>> assert bytes(pkt) == b'\xa5\x01\xe0\xfe\x01\x00\xd0\x95' ###(038)=[passed] Intel byte order (Little Endian) build test with short package >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig12", default=0, start=0, size=8, fmt=">> pkt = testFrame2() >>> >>> pkt.secSig12 = 0xA5 >>> pkt.secSig10 = 1 >>> pkt.secSig3 = 14 >>> pkt.secSig11 = 0x1fe >>> >>> assert bytes(pkt) == b'\xa5\x01\xe0\xfe\x01' >>> assert len(pkt) == 5 >>> >>> pkt.secSig11 = 0x0fe >>> >>> assert bytes(pkt) == b'\xa5\x01\xe0\xfe\x00' >>> assert len(pkt) == 5 ###(039)=[passed] Packet with mixed endianness fields build test >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, fmt=">> pkt = testFrame3() >>> >>> pkt.myMuxer = 0x7 >>> pkt.muxSig5 = 0x72 >>> pkt.muxSig6 = 0x10f >>> pkt.muxSig7 = 0xA5 >>> pkt.muxSig8 = 0x03 >>> pkt.muxSig9 = 0x11 >>> >>> assert bytes(pkt) == b'\x1d\x28\x80\x1c\x0f\x23\xe0' >>> assert len(pkt) == 7 ###(040)=[passed] Muxed Packet with mixed endianness fields build test >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, fmt=">> pkt = testFrame3() >>> >>> pkt.myMuxer = 0x0 >>> pkt.muxSig5 = 0x72 >>> pkt.muxSig6 = 0x10f >>> pkt.muxSig7 = 0xA5 >>> pkt.muxSig8 = 0x03 >>> pkt.muxSig9 = 0x11 >>> >>> assert bytes(pkt) == b'\x1d\x28\x00\x00\x00\x00\x00' >>> assert len(pkt) == 7 >>> >>> pkt.myMuxer = 0x1 >>> >>> assert bytes(pkt) == b'\x00\x00\x80\x1c\x0f\x23\x20' >>> assert len(pkt) == 7 ###(041)=[passed] Muxed Packet build test >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=0, size=8, fmt=">> pkt = testFrame3(b'\x01\xff\xff\xff\xff\xff\xff') >>> >>> assert pkt.myMuxer == 0x1 >>> assert pkt.muxSig5 == 0xff >>> assert pkt.muxSig7 == 0xff >>> >>> pkt = testFrame3(b'\x00\xff\xff\xff\xff\xff\xff') >>> >>> assert pkt.myMuxer == 0x0 >>> assert pkt.muxSig6 == 0xffff >>> assert pkt.muxSig8 == 0xff >>> assert pkt.muxSig9 == 0xff >>> >>> pkt = testFrame3() >>> pkt.myMuxer = 0x1 >>> pkt.muxSig5 = 0xaa >>> pkt.muxSig7 = 0xaa >>> >>> assert bytes(pkt) == b'\x01\xaa\xaa' >>> assert len(pkt) == 3 >>> >>> pkt = testFrame3() >>> pkt.myMuxer = 0x0 >>> pkt.muxSig5 = 0xaa >>> pkt.muxSig6 = 0xbb >>> pkt.muxSig7 = 0xaa >>> pkt.muxSig8 = 0xbb >>> pkt.muxSig9 = 0xbb >>> >>> assert bytes(pkt) == b'\x00\xbb\x00\xbb\xbb' >>> assert len(pkt) == 5 ###(042)=[passed] SignalHeader Muxed Packet build test >>> conf.contribs['CAN']['swap-bytes'] = False >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=0, size=8, fmt=">> bind_layers(SignalHeader, testFrame3, identifier=0x123) >>> >>> pkt = SignalHeader(b'\x00\x00\x01#\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff') >>> >>> assert pkt.myMuxer == 0x1 >>> assert pkt.muxSig5 == 0xff >>> assert pkt.muxSig7 == 0xff >>> >>> pkt = SignalHeader(b'\x00\x00\x01#\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff') >>> >>> assert pkt.myMuxer == 0x0 >>> assert pkt.muxSig6 == 0xffff >>> assert pkt.muxSig8 == 0xff >>> assert pkt.muxSig9 == 0xff >>> >>> pkt = SignalHeader()/testFrame3() >>> pkt.myMuxer = 0x1 >>> pkt.muxSig5 = 0xaa >>> pkt.muxSig7 = 0xaa >>> >>> assert bytes(pkt) == b'\x00\x00\x01#\x03\x00\x00\x00\x01\xaa\xaa' >>> assert len(pkt) == 8 + 3 >>> >>> pkt = SignalHeader()/testFrame3() >>> pkt.myMuxer = 0x0 >>> pkt.muxSig5 = 0xaa >>> pkt.muxSig6 = 0xbb >>> pkt.muxSig7 = 0xaa >>> pkt.muxSig8 = 0xbb >>> pkt.muxSig9 = 0xbb >>> >>> assert bytes(pkt) == b'\x00\x00\x01#\x05\x00\x00\x00\x00\xbb\x00\xbb\xbb' >>> assert len(pkt) == 8 + 5 ###(043)=[passed] Intel byte order (Little Endian) SignalPacket dissect test >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig12", default=0, start=0, size=8, fmt=">> pkt = testFrame2(b'\xff\xff\xff\xff\xff\xff\xff\xff') >>> assert pkt.secSig1 == 0x3 >>> assert pkt.secSig2 == 0x1 >>> assert pkt.secSig3 == 0xf >>> assert pkt.secSig4 == 0x3 >>> assert pkt.secSig7 == 0x1 >>> assert pkt.secSig5 == 7 >>> assert pkt.secSig6 == 7 >>> assert pkt.secSig8 == 7 >>> assert pkt.secSig9 == 7 >>> assert pkt.secSig10 == 0xfff >>> assert pkt.secSig11 == 0x3ff >>> assert pkt.secSig12 == 0xff >>> >>> assert len(pkt) == 8 >>> >>> pkt = testFrame2(struct.pack(">> >>> assert pkt.secSig1 == 0x1 >>> assert pkt.secSig2 == 0x1 >>> assert pkt.secSig3 == 0xe >>> assert pkt.secSig4 == 0x2 >>> assert pkt.secSig7 == 0x0 >>> assert pkt.secSig5 == 0 >>> assert pkt.secSig6 == 0 >>> assert pkt.secSig8 == 5 >>> assert pkt.secSig9 == 5 >>> assert pkt.secSig10 == 1 >>> assert pkt.secSig11 == 0x1fe >>> assert pkt.secSig12 == 0xA5 >>> >>> assert len(pkt) == 8 ###(044)=[passed] Intel byte order (Little Endian) short SignalPacket dissect test >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig12", default=0, start=0, size=8, fmt=">> pkt = testFrame2(b'\xff\xff\xff\xff\xff') >>> assert pkt.secSig3 == 0xf >>> assert pkt.secSig5 == 7 >>> assert pkt.secSig6 == 7 >>> assert pkt.secSig10 == 0xfff >>> assert pkt.secSig11 == 0x3ff >>> assert pkt.secSig12 == 0xff >>> >>> assert len(pkt) == 5 >>> >>> pkt = testFrame2(struct.pack(">> >>> assert pkt.secSig3 == 0xe >>> assert pkt.secSig5 == 0 >>> assert pkt.secSig6 == 0 >>> assert pkt.secSig10 == 1 >>> assert pkt.secSig11 == 0x1fe >>> assert pkt.secSig12 == 0xA5 >>> >>> assert len(pkt) == 5 ###(045)=[passed] Intel byte order (Little Endian) short SignalPacket dissect test mixed field order >>> class testFrame2(SignalPacket): ... fields_desc = [ ... SignalField("secSig3", default=0, start=20, size=4, fmt=">> pkt = testFrame2(b'\xff\xff\xff\xff\xff') >>> assert pkt.secSig3 == 0xf >>> assert pkt.secSig5 == 7 >>> assert pkt.secSig6 == 7 >>> assert pkt.secSig10 == 0xfff >>> assert pkt.secSig11 == 0x3ff >>> assert pkt.secSig12 == 0xff >>> >>> assert len(pkt) == 5 >>> >>> pkt = testFrame2(struct.pack(">> >>> assert pkt.secSig3 == 0xe >>> assert pkt.secSig5 == 0 >>> assert pkt.secSig6 == 0 >>> assert pkt.secSig10 == 1 >>> assert pkt.secSig11 == 0x1fe >>> assert pkt.secSig12 == 0xA5 >>> >>> assert len(pkt) == 5 ###(046)=[passed] Packet with mixed endianness fields build test >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, fmt=">> pkt = testFrame3() >>> >>> pkt.myMuxer = 0x7 >>> pkt.muxSig5 = 0x72 >>> pkt.muxSig6 = 0x10f >>> pkt.muxSig7 = 0xA5 >>> pkt.muxSig8 = 0x03 >>> pkt.muxSig9 = 0x11 >>> >>> assert bytes(pkt) == b'\x1d\x28\x80\x1c\x0f\x23\xe0' >>> assert len(pkt) == 7 ###(047)=[passed] Packet with mixed endianness fields build test, mixed field order >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, fmt=">> pkt = testFrame3() >>> >>> pkt.myMuxer = 0x7 >>> pkt.muxSig5 = 0x72 >>> pkt.muxSig6 = 0x10f >>> pkt.muxSig7 = 0xA5 >>> pkt.muxSig8 = 0x03 >>> pkt.muxSig9 = 0x11 >>> >>> assert bytes(pkt) == b'\x1d\x28\x80\x1c\x0f\x23\xe0' >>> assert len(pkt) == 7 ###(048)=[passed] Packet with mixed endianness fields dissect test, mixed field order >>> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 0x7 >>> assert pkt.muxSig5 == 0x72 >>> assert pkt.muxSig6 == 0x10f >>> assert pkt.muxSig7 == 0xA5 >>> assert pkt.muxSig8 == 0x03 >>> assert pkt.muxSig9 == 0x11 ###(049)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, scaling=0.1, fmt=">> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 0.7 >>> assert pkt.muxSig5 == 1.14 >>> assert pkt.muxSig6 == 0x10f << 1 >>> assert pkt.muxSig7 == 82.5 >>> assert pkt.muxSig8 == 30 >>> assert pkt.muxSig9 == 1700 ###(050)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, scaling=0.1, fmt=">> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 0.7 >>> assert pkt.muxSig5 == 1.14 >>> assert pkt.muxSig6 == 0x10f << 1 >>> assert pkt.muxSig7 == 82.5 >>> assert pkt.muxSig8 == 30 >>> assert pkt.muxSig9 == 1700 ###(051)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling and offset >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, scaling=0.1, offset=5, fmt=">> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 5.7 >>> assert pkt.muxSig5 == 1.14 >>> assert pkt.muxSig6 == 532 >>> assert pkt.muxSig7 == 82.6 >>> assert pkt.muxSig8 == 130 >>> assert pkt.muxSig9 == 1701 ###(052)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling and offset >>> class testFrame3(SignalPacket): ... fields_desc = [ ... LEUnsignedSignalField("myMuxer", default=0, start=53, size=3, scaling=0.1, offset=5), ... LEUnsignedSignalField("muxSig9", default=0, start=41, size=7, scaling=100, offset=1), ... LEUnsignedSignalField("muxSig6", default=0, start=32, size=9, scaling=2, offset=-10), ... BEUnsignedSignalField("muxSig7", default=0, start=2, size=8, scaling=0.5, offset=0.1), ... LEUnsignedSignalField("muxSig8", default=0, start=3, size=3, scaling=10, offset=100), ... LEUnsignedSignalField("muxSig5", default=0, start=22, size=7, scaling=0.01), ... ] ... >>> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 5.7 >>> assert pkt.muxSig5 == 1.14 >>> assert pkt.muxSig6 == 532 >>> assert pkt.muxSig7 == 82.6 >>> assert pkt.muxSig8 == 130 >>> assert pkt.muxSig9 == 1701 ###(053)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling with signed values >>> class testFrame3(SignalPacket): ... fields_desc = [ ... SignalField("myMuxer", default=0, start=53, size=3, scaling=0.1, fmt=">> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 0.7 >>> assert pkt.muxSig5 == -0.14 >>> assert pkt.muxSig6 == 0x10f << 1 >>> assert pkt.muxSig7 == -45.5 >>> assert pkt.muxSig8 == 30 >>> assert pkt.muxSig9 == 1700 ###(054)=[passed] Packet with mixed endianness fields dissect test, mixed field order and scaling with signed values >>> class testFrame3(SignalPacket): ... fields_desc = [ ... LEUnsignedSignalField("myMuxer", default=0, start=53, size=3, scaling=0.1), ... LEUnsignedSignalField("muxSig9", default=0, start=41, size=7, scaling=100), ... LEUnsignedSignalField("muxSig6", default=0, start=32, size=9, scaling=2), ... BESignedSignalField("muxSig7", default=0, start=2, size=8, scaling=0.5), ... LESignedSignalField("muxSig8", default=0, start=3, size=3, scaling=10), ... LESignedSignalField("muxSig5", default=0, start=22, size=7, scaling=0.01), ... ] ... >>> pkt = testFrame3(b'\x1d\x28\x80\x1c\x0f\x23\xe0') >>> assert len(pkt) == 7 >>> assert pkt.myMuxer == 0.7 >>> assert pkt.muxSig5 == -0.14 >>> assert pkt.muxSig6 == 0x10f << 1 >>> assert pkt.muxSig7 == -45.5 >>> assert pkt.muxSig8 == 30 >>> assert pkt.muxSig9 == 1700 ###(055)=[passed] Packet with big endianness signals >>> class testFrame4(SignalPacket): ... fields_desc = [ ... SignalField("sig0", default=0, start=1, size=2, fmt=">B"), ... SignalField("sig1", default=0, start=7, size=6, fmt=">B"), ... SignalField("sig2", default=0, start=15, size=11, fmt=">B"), ... SignalField("sig3", default=0, start=20, size=12, fmt=">B"), ... SignalField("sig4", default=0, start=24, size=9, fmt=">B"), ... SignalField("sig5", default=0, start=50, size=3, fmt=">B"), ... SignalField("sig6", default=0, start=53, size=3, fmt=">B"), ... SignalField("sig7", default=0, start=47, size=10, fmt=">B"), ... SignalField("sig8", default=0, start=58, size=3, fmt=">B"), ... SignalField("sig9", default=0, start=61, size=3, fmt=">B"), ... SignalField("sig10", default=0, start=63, size=2, fmt=">B") ... ] ... >>> pkt = testFrame4() >>> >>> pkt.sig0 = 1 >>> pkt.sig1 = 35 >>> pkt.sig2 = 0 >>> pkt.sig3 = 2048 >>> pkt.sig4 = 256 >>> pkt.sig5 = 1 >>> pkt.sig6 = 0 >>> pkt.sig7 = 520 >>> pkt.sig8 = 0 >>> pkt.sig9 = 0 >>> pkt.sig10 = 0 >>> >>> assert bytes(pkt) == b'\x8d\x00\x10\x01\x00\x82\x01\x00' ###(056)=[passed] Packet with little endianness signals >>> class testFrame5(SignalPacket): ... fields_desc = [ ... SignalField("secSig1", default=0, start=60, size=2, fmt=">> pkt = testFrame5() >>> >>> pkt.secSig1 = 0 >>> pkt.secSig2 = 0 >>> pkt.secSig3 = 0 >>> pkt.secSig4 = 2 >>> pkt.secSig5 = 0 >>> pkt.secSig6 = 0 >>> pkt.secSig7 = 0 >>> pkt.secSig8 = 3 >>> pkt.secSig9 = 1 >>> pkt.secSig10 = 1280 >>> pkt.secSig11 = -144 >>> pkt.secSig12 = 12 >>> >>> assert bytes(pkt) == b'\x0c\x00\x05p\x03\x00\x10\x83' ###(057)=[passed] Packet with float signals build test >>> class testFrame6(SignalPacket): ... fields_desc = [ ... SignalField("floatSignal2", default=0, start=32, size=32, fmt=">> pkt = testFrame6() >>> >>> pkt.floatSignal1 = 5.424999835668132e-05 >>> pkt.floatSignal2 = 6.176799774169922 >>> >>> assert bytes(pkt) == b'8c\x8a~X\xa8\xc5@' ###(058)=[passed] Packet with float signals dissect test >>> pkt = testFrame6(b'8c\x8a~X\xa8\xc5@') >>> >>> assert pkt.floatSignal1 == 5.424999835668132e-05 >>> assert pkt.floatSignal2 == 6.176799774169922 ###(059)=[passed] Packet with float signals build test 2 >>> class testFrame6(SignalPacket): ... fields_desc = [ ... LEFloatSignalField("floatSignal2", default=0, start=32), ... BEFloatSignalField("floatSignal1", default=0, start=7) ... ] ... >>> pkt = testFrame6() >>> >>> pkt.floatSignal1 = 5.424999835668132e-05 >>> pkt.floatSignal2 = 6.176799774169922 >>> >>> assert bytes(pkt) == b'8c\x8a~X\xa8\xc5@' ###(060)=[passed] Packet with float signals dissect test 2 >>> pkt = testFrame6(b'8c\x8a~X\xa8\xc5@') >>> >>> assert pkt.floatSignal1 == 5.424999835668132e-05 >>> assert pkt.floatSignal2 == 6.176799774169922 ###(061)=[passed] Packet with float signals randval >>> assert pkt.fields_desc[0].randval() != 6.176799774169922 >>> assert pkt.fields_desc[1].randval() != 5.424999835668132e-05 ###(062)=[passed] Packet with float signals fuzz >>> pkt = testFrame6() >>> >>> f = fuzz(pkt) >>> assert bytes(f) != bytes(f) ###(063)=[passed] Test signal fuzzing offset 1 >>> test_offset = 100 >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... BEUnsignedSignalField("muxSig7", default=0, start=2, size=8, scaling=1, offset=test_offset), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> li = [pkt.muxSig7._fix() for x in range(100000)] >>> >>> assert abs(round(sum(li) / len(li)) - 128 - test_offset) < 2 ###(064)=[passed] Test signal fuzzing offset 2 and scaling >>> test_offset = 100 >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... BEUnsignedSignalField("muxSig7", default=0, start=2, size=8, scaling=0.1, offset=test_offset), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> li = [pkt.muxSig7._fix() for x in range(100000)] >>> >>> assert abs(round(sum(li) / len(li)) - 12.8 - test_offset) < 2 ###(065)=[passed] Test signal fuzzing offset 3 >>> test_offset = -100 >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... BESignedSignalField("muxSig7", default=0, start=2, size=8, scaling=1, offset=test_offset), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> li = [pkt.muxSig7._fix() for x in range(100000)] >>> >>> assert abs(round(sum(li) / len(li)) - test_offset) < 2 ###(066)=[passed] Test signal fuzzing offset 4 and scaling >>> test_offset = 10 >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... LESignedSignalField("muxSig7", default=0, start=2, size=8, scaling=10, offset=test_offset), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> li = [pkt.muxSig7._fix() for x in range(100000)] >>> >>> assert abs(round(sum(li) / len(li)) - test_offset) < 20 ###(067)=[passed] Test signal fuzzing offset 5 and scaling >>> test_offset = 10 >>> >>> class testFrame3(SignalPacket): ... fields_desc = [ ... BESignedSignalField("muxSig7", default=0, start=2, size=8, scaling=0.271, offset=test_offset), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> li = [pkt.muxSig7._fix() for x in range(100000)] >>> >>> assert abs(round(sum(li) / len(li)) - test_offset) < 2 ###(068)=[passed] Test FloatSignal fuzzing 1 >>> class testFrame3(SignalPacket): ... fields_desc = [ ... BEFloatSignalField("muxSig7", default=0, start=7), ... ] ... >>> pkt = testFrame3() >>> pkt = fuzz(pkt) >>> >>> testlen = 10000 >>> >>> li = [pkt.muxSig7._fix() for x in range(testlen)] >>> gz = [x for x in li if math.isnan(x) == False and x >= 0] >>> lz = [x for x in li if math.isnan(x) == False and x < 0] >>> nan = [x for x in li if math.isnan(x)] >>> >>> assert len(nan) >= 0 >>> assert abs(len(gz) - len(lz)) < (testlen // 10) ###### ## SECOC CANFD ###### ###(069)=[passed] Load SecOC_CANFD >>> load_contrib("automotive.autosar.secoc_canfd", globals_dict=globals()) ###(070)=[passed] Test SecOC_CANFD build >>> pkt = SecOC_CANFD(identifier=0x123, pdu_payload=bytes.fromhex("1122334455667788AABBCCDDEEFF0011")) >>> pkt.show2() ###[ CANFD ]### flags = identifier= 0x123 length = 20 fd_flags = fd_frame reserved = 0 data = b'\x11"3DUfw\x88\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x00\x00\x00\x00' >>> canfd = CANFD(bytes(pkt)) >>> canfd.show2() ###[ CANFD ]### flags = identifier= 0x123 length = 20 fd_flags = fd_frame reserved = 0 data = b'\x11"3DUfw\x88\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x00\x00\x00\x00' >>> pkt = SecOC_CANFD(bytes(pkt)) >>> >>> assert pkt.identifier == canfd.identifier >>> assert pkt.data == canfd.data >>> assert pkt.length == canfd.length >>> >>> SecOC_CANFD.register_secoc_protected_pdu(0x123) >>> >>> pkt = CANFD(identifier=0x123, data=bytes.fromhex("1122334455667788AABBCCDDEEFF001122334455")) >>> canfd = CANFD(bytes(pkt)) >>> canfd.show2() ###[ CANFD ]### flags = identifier= 0x123 length = 20 fd_flags = fd_frame reserved = 0 data = b'\x11"3DUfw\x88\xaa\xbb\xcc\xdd\xee\xff\x00\x11"3DU' >>> pkt = SecOC_CANFD(bytes(pkt)) >>> pkt.show2() ###[ SecOC_CANFD ]### flags = identifier= 0x123 length = 20 fd_flags = fd_frame reserved = 0 \pdu_payload\ |###[ Raw ]### | load = b'\x11"3DUfw\x88\xaa\xbb\xcc\xdd\xee\xff\x00\x11' tfv = 0x22 tmac = 334455 >>> >>> assert pkt.identifier == canfd.identifier >>> assert bytes(pkt.pdu_payload) == bytes(canfd.data)[:-4] >>> assert pkt.length == canfd.length >>> assert pkt.tfv == 0x22 >>> assert pkt.tmac == b"\x33\x44\x55" >>> >>> pkt.secoc_authenticate() >>> >>> assert pkt.tfv == 0 >>> assert pkt.tmac != b"\x33\x44\x55" >>> >>> if conf.crypto_valid: ... from cryptography.hazmat.primitives import cmac ... from cryptography.hazmat.primitives.ciphers import algorithms ... c = cmac.CMAC(algorithms.AES128(b"\x00" * 16)) ... c.update(bytes.fromhex("1122334455667788AABBCCDDEEFF0011") + bytes.fromhex("00000000")) ... mac = c.finalize() ... assert pkt.tmac == mac[:3] ... Same as in dcerpc.rst ━ Run at 04:11:33 from [test/scapy/layers/dcerpc.uts] by UTscapy in 5.734943866729736 └ Passed=57 └ Failed=0 ###### ## Syntax check ###### ###(000)=[passed] Import the DCE/RPC layer >>> import re >>> from scapy.layers.dcerpc import * >>> from uuid import UUID >>> >>> old_debug_dissector = conf.debug_dissector >>> conf.debug_dissector = 2 >>> True True ###### ## Check EField ###### ###(001)=[passed] Little Endian IntField getfield >>> f = EField(IntField('f', 0), '<') >>> f.getfield(None, hex_bytes('0102030405')) == (b'\x05', 0x04030201) True ###(002)=[passed] Little Endian IntField addfield >>> f = EField(IntField('f', 0), '<') >>> f.addfield(None, b'\x01', 0x05040302) == hex_bytes('0102030405') True ###(003)=[passed] Big Endian IntField getfield >>> f = EField(IntField('f', 0), '>') >>> f.getfield(None, hex_bytes('0102030405')) == (b'\x05', 0x01020304) True ###(004)=[passed] Big Endian IntField addfield >>> f = EField(IntField('f', 0), '>') >>> f.addfield(None, b'\x01', 0x02030405) == hex_bytes('0102030405') True ###(005)=[passed] Little Endian StrField getfield >>> f = EField(StrField('f', 0), '<') >>> f.getfield(None, '0102030405') == (b'', '0102030405') True ###(006)=[passed] Little Endian StrField addfield >>> f = EField(StrField('f', 0), '<') >>> f.addfield(None, b'01', '02030405') == b'0102030405' True ###(007)=[passed] Big Endian StrField getfield >>> f = EField(StrField('f', 0), '>') >>> f.getfield(None, '0102030405') == (b'', '0102030405') True ###(008)=[passed] Big Endian StrField addfield >>> f = EField(StrField('f', 0), '>') >>> f.addfield(None, b'01', '02030405') == b'0102030405' True ###(009)=[passed] Little Endian UUIDField getfield The endianness of a UUIDField should be apply by block on each block in parenthesis '(01234567)-(89ab)-(cdef)-(01)(23)-(45)(67)(89)(ab)(cd)(ef)' >>> f = EField(UUIDField('f', None), '<') >>> f.getfield(None, hex_bytes('0123456789abcdef0123456789abcdef')) == (b'', UUID('67452301-ab89-efcd-0123-456789abcdef')) True ###(010)=[passed] Little Endian UUIDField addfield >>> f = EField(UUIDField('f', '01234567-89ab-cdef-0123-456789abcdef'), '<') >>> f.addfield(None, b'', f.default) == hex_bytes('67452301ab89efcd0123456789abcdef') True ###(011)=[passed] Big Endian UUIDField getfield >>> f = EField(UUIDField('f', None), '>') >>> f.getfield(None, hex_bytes('0123456789abcdef0123456789abcdef')) == (b'', UUID('01234567-89ab-cdef-0123456789abcdef')) True ###(012)=[passed] Big Endian UUIDField addfield >>> f = EField(UUIDField('f', '01234567-89ab-cdef-0123-456789abcdef'), '>') >>> f.addfield(None, b'', f.default) == hex_bytes('0123456789abcdef0123456789abcdef') True ###### ## DCE/RPC v5 ###### ###(013)=[passed] Dissect DCE/RPC v5 Request with Kerberos GSSAPI/RFC1964 >>> pkt = DceRpc(b"\x05\x00\x00\x03\x10\x00\x00\x00\xcd\x00-\x00\x01\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00j\x87\xb4\xa8DrE3\xfa\xc1\x1d\x9e\xb7\x8a_\xffr\xbe\x13\xc4<\x85\xf0\xf2'y\x84t%u|e\xef/\x04\xb0m\x98\xb1\xd2\x00KwW#P\x8f2\xecB\x81\x19\xf3g\xd2o[\x07L-\xb8\x89\x05\xcf?\xcf\t\xeb\xb3&&6\xb7\x84\xb6\xcd8Ao\x8c\x94\xca\x03\xe3\x0e\x86'-\xfaHj\xcez\xf0A\x83\x9dX\r\xe8\x96\x07Bs\xaf\x9c[=2\x9eS\xb1\x18\x84 \xb4y\n9\xdf\x92\x1c\xd8\xe2e\xd3^,\t\x06\x08\x00pj\x8f\x04`+\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\x02\x01\x11\x00\x10\x00\xff\xffp\xc0\\m\xfe\xa4\xe1!\xf7\xdf\xbf\xa4\xad\xdf\xcb\x16\x1e\xb5+{\x97\xaf\xd5~") >>> assert pkt.auth_verifier.auth_type == 9 >>> pkt.show() ###[ DCE/RPC v5 ]### rpc_vers = 5 (connection-oriented) rpc_vers_minor= 0 ptype = request pfc_flags = PFC_FIRST_FRAG+PFC_LAST_FRAG endian = little encoding = ASCII float = IEEE reserved1 = 0 reserved2 = 0 frag_len = 205 auth_len = 45 call_id = 1 \auth_verifier\ |###[ Common Authentication Verifier ]### | auth_type = GSS_NEGOTIATE | auth_level= PKT_PRIVACY | auth_pad_length= 8 | auth_reserved= 0 | auth_context_id= 0x48f6a70 | \auth_value\ | |###[ GSSAPI_BLOB_SIGNATURE ]### | | MechType = | | \innerToken\ | | |###[ Kerberos v5 InnerToken ]### | | | TOK_ID = b'\x02\x01' (GSS_Wrap-RFC1964) | | | \root \ | | | |###[ Kerberos v5 GSS_Wrap (RFC1964) ]### | | | | SGN_ALG = HMAC | | | | SEAL_ALG = RC4 | | | | Filler = 0xffff | | | | SND_SEQ = 70c05c6dfea4e121 | | | | SGN_CKSUM = f7dfbfa4addfcb16 | | | | CONFOUNDER= 1eb52b7b97afd57e auth_padding= b'\x92\x1c\xd8\xe2e\xd3^,' vt_trailer= None ###[ DCE/RPC v5 - Request ]### alloc_hint= 120 cont_id = 0 opnum = 0 ###[ Raw ]### load = b"j\x87\xb4\xa8DrE3\xfa\xc1\x1d\x9e\xb7\x8a_\xffr\xbe\x13\xc4<\x85\xf0\xf2'y\x84t%u|e\xef/\x04\xb0m\x98\xb1\xd2\x00KwW#P\x8f2\xecB\x81\x19\xf3g\xd2o[\x07L-\xb8\x89\x05\xcf?\xcf\t\xeb\xb3&&6\xb7\x84\xb6\xcd8Ao\x8c\x94\xca\x03\xe3\x0e\x86'-\xfaHj\xcez\xf0A\x83\x9dX\r\xe8\x96\x07Bs\xaf\x9c[=2\x9eS\xb1\x18\x84 \xb4y\n9\xdf" >>> assert pkt.auth_verifier.auth_value.MechType.oidname == 'Kerberos 5' >>> assert isinstance(pkt.auth_verifier.auth_value.innerToken, KRB_InnerToken) >>> assert DceRpc5Request in pkt >>> assert pkt[DceRpc5Request].alloc_hint == 120 >>> assert pkt[DceRpc5Request].opnum == 0 ###(014)=[passed] Dissect DCE/RPC v5 Request EPM map request >>> pkt = Ether(b'\x00\x0c)\xe1\xde{\x00\x0c)\x05\xe0\xd9\x08\x00E\x00\x00\xc4"\x92@\x00\x80\x06\xb3\x86\n\x01\x0f\x19\n\x01\x01\x01\x05=\x00\x87\x1e\x1b\x8f\x12\x02\x8ee\x19P\x18\xff\xb7 ^\x00\x00\x05\x00\x00\x03\x10\x00\x00\x00\x9c\x00\x00\x00\x01\x00\x00\x00\x84\x00\x00\x00\x00\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00K\x00\x00\x00K\x00\x00\x00\x05\x00\x13\x00\r5BQ\xe3\x06K\xd1\x11\xab\x04\x00\xc0O\xc2\xdc\xd2\x04\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\x00\x87\x01\x00\t\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00') >>> assert pkt.auth_verifier is None >>> assert pkt[DceRpc5Request].alloc_hint == 132 >>> assert pkt[DceRpc5Request].opnum == 3 ###(015)=[passed] Dissect DCE/RPC v5 Bind request with NETLOGON secure channel >>> pkt = DceRpc(b'\x05\x00\x0b\x07\x10\x00\x00\x00\xe4\x00(\x00\x02\x00\x00\x00\xd0\x16\xd0\x16\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x01\x00xV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x00\x00\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x00\x00\x01\x00\x01\x00xV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x00\x003\x05qq\xba\xbe7I\x83\x19\xb5\xdb\xef\x9c\xcc6\x01\x00\x00\x00\x02\x00\x01\x00xV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x00\x00,\x1c\xb7l\x12\x98@E\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00D\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00DOMAIN\x00WIN1\x00\x06domain\x05local\x00\x04WIN1\x00') >>> >>> assert pkt.auth_verifier.auth_value.NetbiosDomainName == b"DOMAIN" >>> assert pkt.auth_verifier.auth_value.DnsDomainName == b"domain.local." >>> >>> assert pkt.n_context_elem == 3 >>> assert pkt[DceRpc5Bind].context_elem[0].transfer_syntaxes[0].sprintf("%if_uuid%") == 'NDR 2.0' >>> assert pkt[DceRpc5Bind].context_elem[1].transfer_syntaxes[0].sprintf("%if_uuid%") == 'NDR64' >>> assert pkt[DceRpc5Bind].context_elem[2].transfer_syntaxes[0].sprintf("%if_uuid%") == 'Bind Time Feature Negotiation' ###(016)=[passed] Dissect DCE/RPC v5 Bind Response with NETLOGON secure channel >>> pkt = DceRpc(b'\x05\x00\x0c\x07\x10\x00\x00\x00\x80\x00\x0c\x00\x02\x00\x00\x00\xd0\x16\xd0\x16=F\x00\x00\x06\x0049676\x00\x03\x00\x00\x00\x02\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x003\x05qq\xba\xbe7I\x83\x19\xb5\xdb\xef\x9c\xcc6\x01\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00D\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert pkt[DceRpc5BindAck].sec_addr.port_spec == b'49676\x00' >>> assert pkt[DceRpc5BindAck].results[1].result == 0 >>> assert pkt[DceRpc5BindAck].results[1].transfer_syntax.sprintf("%if_uuid%") == 'NDR64' ###(017)=[passed] Dissect DCE/RPC v5 Response with NETLOGON secure channel >>> pkt = DceRpc(b'\x05\x00\x02\x03\x10\x00\x00\x00\x98\x038\x00\x02\x00\x00\x004\x03\x00\x00\x01\x00\x00\x00\x88\xd6k\xac\xab^\xafqA^\xee\x8e\xce\x16\x86i\xe5A\xafK#\xeb%\'l\x88\xd4A\x0f\xa6>\xaf\xed\xf65\xf0\xf9\xf25\x89\xf5\xc5r\xe6;t\xf5\x80 \x80~\xf6\x0cRQ\x0b\xea\xc2}\x8a>\x08\xc9\x04\x9c\xdcOj\xa3\x0c\x82~\xfe\xa6\xa3\x01^ \xee\xd3\xd2yf\xfa\xfbL\xec&\x8b60\xb9\x83j\x84\xa0\xbc*G\xe25\x1a\r\xf3\xc8\xa6ib9\x87\xcbt%\x17\xf8g\x17\x1cIR\xd5\'wW\xbedZbXv\xb7\xe5?#$(\xae\x06\x9e\xce\xe1K\xd9\'\x9fG\xde\xff\xc9j\xd7\xa4\x04\xcb]-\xbcr\xb9+\xdax\xee\xa3\xce\x9c\x15\x0c/\xb2\xcb\xaaF\t\x07/AQM\x18t\xdc\xea\x019\x11TOy\xf7\x7f\xd1\x87\xc7m\xea>\x84Y\xc3\xef\xd0\xa6e\xb0g\xc3\x12\xd9\xc4~$\xb8\xfc/0\x86\x0e0\x8c`5lU\xd1\xbf8\xd2\xcb\xb1%\xfa\xfabr\x10\x9a\xf8\xb7\xb1\x01$wU\x17r\x03Z\xdc\xdd^\xecU\xc1\xf1\x87\xad\xa1\xea\xd8\xf2\x82\xa8\x95\xd4\xd2\xc6\x8e\xf1\xcfN1k\xdc\xc3\xf7o]q\'a\xa3Y\r97\xfe.8O\xf9\xa7\x93\xd3\x99?K\x8bv.\xac=t\r\xba\xca\xd0\x82\xd8\x81\xaf\xe6cv\xbe\xcbN\x93\x9d\x0e\xd4\x119d\x83/u\xc8\xb2\x1c/q\xf0"\xc4\x04\xadB\xe3N\xed\xbbR\xc4yO\x1fQ\xdd}\xd2\xe3c\x1e\xec\xc7\xc4\xf8\xf6OV\xe5\x00*\xb0\t\xbd\xf0\xe5j\xbf\xa3\xe0\x85\xa0\x81\xc6\xb96\xb9\xec\xd7I\x16_\xe7K\xb2D\xad\xb5\x7fG\xb9\x9by\xe2\xd9\xcf\xe7J\x83Y-\xa7:\xa3\x16\xe7\xce\xf9\xf5\xeb\x88z&Je\xcb\x94\'\xdc?\xbf\xed!\x1a\xb3sI\xb5o\x00\x8dJ\xd9\xed\x160+\x11nD\xd0QIo]A\xc0\x89\xa8\xb2\xc9\xb6\xc7,\xf0V\x8a\xae\xa6\x97\x8e\x91tO\x8c\x94\x08\xf1ru\x87e\x0bq6\x8aZ\xb9\xf3\xb7\xbb\xaf;\x89\xdf\x8b\xbf\tA\xef\xe3\x07\x0fT\xed\xbb\x072\x8eQ\xf4\xce\x194A\\w\xb4\x88\xff[\xcf\x91N\x1b\xfb\xe3\xcb~\xe9\xfc\x195\x0f&96\x05\x9a\xe4\xc0~\xd9\x0b\xfd\xbc\xc9\x8fTXY\x9f\xe4\x87e!\x93$$\x0b\xfc\xe7Jm8\x18\xb5\xad\xff\x85\xc3\xe2%\xd5{\x8bs\xa7\xb0\x1e\x0ei>> assert pkt.auth_verifier.auth_value.sprintf("%SignatureAlgorithm%") == 'HMAC-SHA256' >>> assert pkt.auth_verifier.auth_value.SequenceNumber == b'\xd2\xd27\xc2sC\xc4"' >>> assert len(pkt.load) == pkt.alloc_hint >>> assert len(pkt.auth_padding) == pkt.auth_verifier.auth_pad_length >>> assert pkt.alloc_hint == 820 ###(018)=[passed] Build and dissect DCE/RPC with auth_pad >>> pkt = DceRpc(b'\x05\x00\x00\x03\x10\x00\x00\x00\xa8\x038\x00\x03\x00\x00\x00L\x03\x00\x00\x01\x000\x00C\x00\x8e\xa5mX*\xf4\xaa\x0c\xfd\xf3\x182\xbe\x96\xbe\xfa\xad%\xa4\x85\x10nz\xa1t\xe5\xd7&Vl\xcd8X,\x82\xb4:D\x8ff\x9ft\x07\xa9W\x01#\x92t~\x15\xf0\n\xa7|\xae\xe3\xe6\xf6(J\x80\'\'\xc5\xe0\x9cm[\\\x94\x9at\x14\xf3\x03qFV:\xd5\xd6\xa5\x85\x12\x1e\xd6\x81\xa4#\xe1\x80\xf4r\x82\x82]\xb1\xddK!\x0b\xba\xf6\x9e\xa9\xc7\xd0\x16^\xaa\x9e\xe5\xb8\x9c\xf2M\x00\xebZ\xdb\xe4\xe8\xeb\x01\x1e\x90\xd4hE\x04\xd9\xc5\xb7\x8eL7\x0c\x058u\xd2\xdf\x91DJ\x0c;\xb8\x80\x84\xe0J\x8f\xcc\xa5TR\xd4\xf8\x16Xd\x93\x1a\x8a\xa4=\x96\xc7\x97\xado\xdb\x8b5\x8e\x0f\xc8\xa9\x93\xdd\xa2\xa0\xc54\xea\x0c4b\x8a\xb0r.\xeb=o8\xe3\xd4\x1d\xe4o\x83Pf_GJU\x9d&\xdf\x1c\xa2\xfd,\xcd\xd4\xbe\\Hh\x17\xbe\x02\xc5\xa0\xd53(\xc9\xbbI\xbd\x1e\xf1\xb0\xe5|\x1d\x03\xc0\xab\xae\'NU\xf2\xc5\xc5\xfe\xabs\x8c\xc2-\x04\xd9\xac|\xb0\xf4\xd9\x00\x8b\xa8\x1d+\x01[\x98\xc9\x98L\x9a\xd464\xe0\x02\x07F\xff\xa1t\xa0VQX\xb9\xfa\xcdg\xed\x87\x8e\xe3\xceh\x9f\xd3:`}z\xb0\n\xdc\xeb=\x1a\x98\x06\xcb,\xba\x18\xa3>\xfc\xc2\x9d\x95\xd4\x83\xba"\x80\xee7^\xda\x02\x8b\x01\'\xe5e\x18\xa9}i\xbe\x86\xf4\x93\x9c\xe6\xe5\xf3\xd2\xa8\x8dH\\\x14\x89+yc\xa7kZ\x80\xe0\xb1\xc3\xd1\xa5\x8a9\xd9\xe7\x8d\xfd\x90\x04B\xce0\xeaK\xa1\xbc\xc1*\x8a\xfd*oX\xa0\x8b\x04D\xbc\x87\xacH\x97\x89\x85\xb2b\xf4F\xa2\xf1m\x06\xfe\x01\xd2\xcbT\x01+\x89<\x05q0ibL\x99[C\xeb\xcfx#i4\x8b\xbb\xb5ZP\x12?\x8b\xa5\x0e\x91"@aJ\t\t\x86\xa5*\t\xbf\x01Q\xa5\x85y\xad\xc0\xa7\xb2l5R\xd4\x85\xf4\xab\n\t\rJb\xf2\x875\xfcL\x16\xb0e\x17\xe1\xdc<\xd1\xee\x86\x01\xefHD\x1eb\xd1\xd1\xbby\xd41\xb7#\xef$DN\xda)\x8f\xb9\xffEa\xfe\xd8C\xb9\xff}\x85ra\xca\xec\xe1\xf6\x99\t\xa1\xc9H\x97\xd7\xc2\xa7\xbbW_\x1a\x92\xed\xb7\xde\xba*\r\x1e%h\xbdu)/\xd8m\xc0\xa9\xfb\xa1\xb5\xa3\xc3\x81\x18\xcd6\xd8t\x06\xa7\xd8\x84\xf5\x80\xb3\xaaX&\x8a\x7fPZ\x04\xcbsn.,b\xdfW\xd0\x7f\xc5\xc90 \x95S\x13*42R\x16fY\xeb\xd2\x05\xbd\x18Wm\xc0\xa1\x9dpYk\xaa\xd9\xd9+\x030\x9a\xe4IMlbfL\x81\xef[H]\xc6:\x88\x9cjE\x11\xce%\xd6\xe2<\x7f\xaaDO\x06\xaf\x13g&FX\x05\x90\xefl\x14\x12P;\xdc\xe7N\x0fU1C\xd1u#\xca\xf9\x12\xe6\xf7\x1bT\x17z\x97\xf2\xf5GH\xe3e\xbe\xe0\xeb?\xc2u\x9e#\x1c\xed\xcf7\x04c\x14\x90\xfc\x07\x1b\xedX\x1a\xd4\xbf\x96T\xee\xe7\x01^@\xcfSG\xd5\x899\x01\xf9\xc3\xf3(\xc2?^\xcd[,\xd85*\xdd\xab\xb6t\xc7p\xc4\xd3\x95\x9d\x02 \x9a^\x81\xb1.y\x9d\xc8\xe7\xb46\xfc\xc7,\x9fI\x03\\R\x83Y3+\xa7\x1f\x00\xd0\x16J\x10\x9a\xc5\'9)\xab\x93\x05\xd7\xb6\x12\xde \r\xc5b\x8bKo36\xfej\xa7\t\xd1{}a\x7f\xa4\xc3\xdc\xaaA\xe5\xe3\x91Uzw\xb2w\xee^\xcd\xd0i\xb7\xc0\xff`D\x06\x04\x00\x00\x00\x00\x00\x13\x00\x1a\x00\xff\xff\x00\x00\xb6\xb0D"\x11h\x92_\xe2 +\x06b%\x7f\xf5\x87O\x00\x08\x81\ro\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert pkt.auth_verifier.auth_pad_length == 4 >>> >>> pkt.auth_verifier.auth_pad_length = None >>> pkt.auth_padding = None >>> pkt = DceRpc(bytes(pkt)) >>> assert pkt.auth_verifier.auth_pad_length == 4 ###(019)=[passed] Build and dissect DCE/RPC with vt_trailer >>> pkt = DceRpc(b'\x05\x00\x00\x83\x10\x00\x00\x00\x80\x00\x10\x00\x02\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00t\xc0\xd8\xcc\xe5\xd0@J\x92\xb4\xd0t\xfa\xa6\xba(\x8a\xe3\x13q\x02\xf46q\x01\x00\x04\x00\x01\x00\x00\x00\x02@(\x00t\xc0\xd8\xcc\xe5\xd0@J\x92\xb4\xd0t\xfa\xa6\xba(\x01\x00\x01\x00\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x00\x00\x00\x00\x00\x00\n\x05\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbe\x1a\xfd*\x9c\xd3R \x00\x00\x00\x00') >>> >>> assert pkt.auth_padding == b"\x00\x00\x00\x00" >>> assert len(pkt.vt_trailer.commands) == 2 >>> assert pkt.vt_trailer.commands[0].sprintf("%Command%") == "SEC_VT_COMMAND_BITMASK_1" >>> assert pkt.vt_trailer.commands[0].bits == 1 >>> assert pkt.vt_trailer.commands[1].sprintf("%Command%") == "SEC_VT_COMMAND_PCONTEXT" >>> assert pkt.vt_trailer.commands[1].InterfaceId == pkt[DceRpc5Request].object >>> assert pkt.vt_trailer.commands[1].Version == 0x10001 >>> assert DCE_RPC_TRANSFER_SYNTAXES[pkt.vt_trailer.commands[1].TransferSyntax] == "NDR 2.0" >>> assert pkt.vt_trailer.commands[1].TransferVersion == 2 >>> >>> pkt.auth_padding = None >>> pkt.auth_verifier.auth_pad_length = None >>> pkt = DceRpc(bytes(pkt)) >>> assert pkt.auth_padding == b"\x00\x00\x00\x00" >>> assert pkt.auth_verifier.auth_pad_length == 4 >>> assert pkt.vt_trailer.commands[1].TransferVersion == 2 ###(020)=[passed] Dissect DCE/RPC containing two fragments: Auth3 and a Request >>> pkt = DceRpc(b'\x05\x00\x10\x07\x10\x00\x00\x00\xe2\x01\xc6\x01\x02\x00\x00\x00\xd0\x16\xd0\x16\n\x05\x00\x00\x00\x00\x00\x00NTLMSSP\x00\x03\x00\x00\x00\x18\x00\x18\x00z\x00\x00\x00$\x01$\x01\x92\x00\x00\x00\x0c\x00\x0c\x00X\x00\x00\x00\x0c\x00\x0c\x00d\x00\x00\x00\n\x00\n\x00p\x00\x00\x00\x10\x00\x10\x00\xb6\x01\x00\x00\x15\x82\x88\xe2\n\x00aJ\x00\x00\x00\x0f\x857\xcfG\xcc\x98\x029\x01\n\xedc\x18\xea\xec\xc3D\x00O\x00M\x00A\x00I\x00N\x00W\x00I\x00N\x001\x000\x00$\x00W\x00I\x00N\x001\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\xa4\x829p_\xa8\xdc\x15+7+\xb4\x8d\x97~\x01\x01\x00\x00\x00\x00\x00\x00\xe0\x91\xd8\xa5\x91\x82\xd9\x01\xb8/\xcf\xac\t\x1c$\xb3\x00\x00\x00\x00\x02\x00\x0c\x00D\x00O\x00M\x00A\x00I\x00N\x00\x01\x00\n\x00W\x00I\x00N\x001\x000\x00\x04\x00\x18\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x03\x00$\x00W\x00I\x00N\x001\x000\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x05\x00\x18\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x07\x00\x08\x00\xe0\x91\xd8\xa5\x91\x82\xd9\x01\x06\x00\x04\x00\x06\x00\x00\x00\x08\x000\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00Z3!\xf8xx\x02\xa0\xcc\xcb\xa0\xbb|\xa5\x0c\xd3\x93Ib_\x8f\xa6j\xe1\x82\xd3\xec?\xaa\xae\x0e\x8a\n\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x12\x00C\x00I\x00F\x00S\x00/\x00t\x00r\x00u\x00c\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xdc\xa8\xa5\x96\xd0k7\xdd\x84\xdb\x029\x1e+\x97\x05\x00\x00\x83\x10\x00\x00\x00\x80\x00\x10\x00\x02\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00t\xc0\xd8\xcc\xe5\xd0@J\x92\xb4\xd0t\xfa\xa6\xba(\x8a\xe3\x13q\x02\xf46q\x01\x00\x04\x00\x01\x00\x00\x00\x02@(\x00t\xc0\xd8\xcc\xe5\xd0@J\x92\xb4\xd0t\xfa\xa6\xba(\x01\x00\x01\x00\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x00\x00\x00\x00\x00\x00\n\x05\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00/L\xb5\\\xfc\x83\xecF\x00\x00\x00\x00') >>> assert DceRpc5Auth3 in pkt >>> assert pkt.pad == b'\xd0\x16\xd0\x16' >>> assert pkt.auth_verifier.auth_value.UserName == "WIN10$" >>> assert pkt.auth_verifier.auth_value.NtChallengeResponse.getAv(9).Value == 'CIFS/truc' >>> >>> pkt2 = DceRpc(pkt[conf.padding_layer].load) >>> assert DceRpc5Request in pkt2 >>> assert conf.padding_layer not in pkt2 >>> assert pkt2.vt_trailer.commands[1].InterfaceId == pkt2.object ###### ## Check DCE/RPC 4 layer ###### ###(021)=[passed] DCE/RPC 4 default values >>> assert bytes(DceRpc4()) == b'\x04\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00' ###(022)=[passed] DCE/RPC 4: payload length computation >>> assert bytes(DceRpc4() / b'\x00\x01\x02\x03') == b'\x04\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x01\x02\x03' ###(023)=[passed] DCE/RPC 4: Guess payload class fallback with no possible payload >>> p = DceRpc(hex_bytes('04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff00040000000000010203')) DCE/RPC payload class not found or undefined (using Raw) >>> p.payload.__class__ == conf.raw_layer True ###(024)=[passed] DCE/RPC 4: Guess payload class to a registered heuristic payload A payload to be valid must implement the method can_handle and be registered to DceRpcPayload >>> from scapy.layers.dcerpc import *; import binascii, re >>> class DummyPayload(Packet): ... fields_desc = [StrField('load', '')] ... @classmethod ... def can_handle(cls, pkt, dce): ... if pkt[0] in [b'\x01', 1]: # support for py3 bytearray ... return True ... else: ... return False ... >>> DceRpc4Payload.register_possible_payload(DummyPayload) >>> p = DceRpc(hex_bytes('04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff00040000000001020304')) >>> p.payload.__class__ == DummyPayload True ###(025)=[passed] DCE/RPC 4: Guess payload class fallback with possible payload classes >>> p = DceRpc(hex_bytes('04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff00040000000000010203')) DCE/RPC payload class not found or undefined (using Raw) >>> p.payload.__class__ == conf.raw_layer True ###(026)=[passed] DCE/RPC 4: little-endian build >>> bytes(DceRpc4(ptype='response', endian='little', opnum=3) / b'\x00\x01\x02\x03') == hex_bytes('04020000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000300ffffffff04000000000000010203') True ###(027)=[passed] DCE/RPC 4: little-endian dissection >>> p = DceRpc(hex_bytes('04020000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000300ffffffff04000000000000010203')) more DCE/RPC payload class not found or undefined (using Raw) >>> p.ptype == 2 and p.opnum == 3 and p.len == 4 True ###### ## NDR tests ###### ###(028)=[passed] DCE/RPC 5 NDR: Create NDR Packet >>> class LPSHARE_INFO_1(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRFullPointerField( ... NDRConfVarStrNullFieldUtf16("shi1_netname", ""), ... ), ... NDRIntField("shi1_type", 0), ... NDRFullPointerField( ... NDRConfVarStrNullFieldUtf16("shi1_remark", ""), ... ), ... ] ... ###(029)=[passed] DCE/RPC 5 NDR: Check user friendliness >>> pkt = LPSHARE_INFO_1(shi1_netname="ADMIN1$", ndr64=True) >>> val = pkt.fields['shi1_netname'] >>> assert isinstance(val, NDRPointer) >>> assert isinstance(val.value, NDRConformantArray) >>> assert isinstance(val.value.value[0], NDRVaryingArray) >>> assert val.value.value[0].value == b"ADMIN1$" >>> assert pkt.valueof("shi1_netname") == b"ADMIN1$" ###(030)=[passed] DCE/RPC 5 NDR: Try building it >>> assert bytes(pkt) == b'\x00\x00\x02\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00A\x00D\x00M\x00I\x00N\x001\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ###(031)=[passed] DCE/RPC 5 NDR: Re-dissect >>> z = LPSHARE_INFO_1(bytes(pkt), ndr64=True) >>> val = z.fields['shi1_netname'] >>> assert val.value.max_count == 8 >>> assert val.value.value[0].actual_count == 8 >>> assert val.value.value[0].value == b"ADMIN1$" >>> assert z.valueof("shi1_netname") == b"ADMIN1$" ###(032)=[passed] DCE/RPC 5 NDR: Same thing with NDR32 >>> pkt = LPSHARE_INFO_1(shi1_netname="ADMIN1$", ndr64=False) >>> assert bytes(pkt) == b'\x00\x00\x02\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00A\x00D\x00M\x00I\x00N\x001\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> z = LPSHARE_INFO_1(bytes(pkt), ndr64=False) >>> val = z.fields['shi1_netname'] >>> assert val.value.max_count == 8 >>> assert val.value.value[0].actual_count == 8 >>> assert val.value.value[0].value == b"ADMIN1$" >>> assert z.valueof("shi1_netname") == b"ADMIN1$" ###### ## Real tests on complex packets ###### ###(033)=[passed] DCE/RPC 5 NDR: Define structs >>> class LPWKSTA_USER_INFO_0(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRFullEmbPointerField( ... NDRConfVarStrNullFieldUtf16("wkui0_username", "") ... ) ... ] ... >>> >>> class LPWKSTA_USER_INFO_0_CONTAINER(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRIntField("EntriesRead", 0), ... NDRFullEmbPointerField( ... NDRConfPacketListField( ... "Buffer", ... [LPWKSTA_USER_INFO_0()], ... LPWKSTA_USER_INFO_0, ... count_from=lambda pkt: pkt.EntriesRead, ... ), ... ), ... ] ... >>> >>> class LPWKSTA_USER_INFO_1(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRFullEmbPointerField( ... NDRConfVarStrNullFieldUtf16("wkui1_username", "") ... ), ... NDRFullEmbPointerField( ... NDRConfVarStrNullFieldUtf16("wkui1_logon_domain", "") ... ), ... NDRFullEmbPointerField( ... NDRConfVarStrNullFieldUtf16("wkui1_oth_domains", "") ... ), ... NDRFullEmbPointerField( ... NDRConfVarStrNullFieldUtf16("wkui1_logon_server", "") ... ), ... ] ... >>> >>> class LPWKSTA_USER_INFO_1_CONTAINER(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRIntField("EntriesRead", 0), ... NDRFullEmbPointerField( ... NDRConfPacketListField( ... "Buffer", ... [LPWKSTA_USER_INFO_1()], ... LPWKSTA_USER_INFO_1, ... count_from=lambda pkt: pkt.EntriesRead, ... ) ... ), ... ] ... >>> >>> class LPWKSTA_USER_ENUM_STRUCT(NDRPacket): ... ALIGNMENT = (4, 8) ... fields_desc = [ ... NDRIntField("Level", 0), ... NDRUnionField( ... [ ... ( ... NDRFullEmbPointerField( ... NDRPacketField( ... "WkstaUserInfo", ... LPWKSTA_USER_INFO_0_CONTAINER(), ... LPWKSTA_USER_INFO_0_CONTAINER, ... ), ... ), ... ( ... (lambda pkt: getattr(pkt, "Level", None) == 0), ... (lambda _, val: val.tag == 0), ... ), ... ), ... ( ... NDRFullEmbPointerField( ... NDRPacketField( ... "WkstaUserInfo", ... LPWKSTA_USER_INFO_1_CONTAINER(), ... LPWKSTA_USER_INFO_1_CONTAINER, ... ), ... ), ... ( ... (lambda pkt: getattr(pkt, "Level", None) == 1), ... (lambda _, val: val.tag == 1), ... ), ... ), ... ], ... StrFixedLenField("WkstaUserInfo", "", length=0), ... align=(4, 8), ... switch_fmt=("L", "L"), ... ), ... ] ... >>> >>> class NetrWkstaUserEnum_Request(NDRPacket): ... fields_desc = [ ... NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")), ... NDRPacketField( ... "UserInfo", LPWKSTA_USER_ENUM_STRUCT(), LPWKSTA_USER_ENUM_STRUCT ... ), ... NDRIntField("PreferredMaximumLength", 0), ... NDRFullPointerField(NDRIntField("ResumeHandle", 0)), ... ] ... >>> >>> class NetrWkstaUserEnum_Response(NDRPacket): ... fields_desc = [ ... NDRPacketField( ... "UserInfo", LPWKSTA_USER_ENUM_STRUCT(), LPWKSTA_USER_ENUM_STRUCT ... ), ... NDRIntField("TotalEntries", 0), ... NDRFullPointerField(NDRIntField("ResumeHandle", 0)), ... NDRIntField("status", 0), ... ] ... ###(034)=[passed] DCE/RPC 5 NDR: Build test >>> pkt = NetrWkstaUserEnum_Request( ... ServerName="test", ... UserInfo=LPWKSTA_USER_ENUM_STRUCT( ... WkstaUserInfo=NDRUnion( ... tag=0, ... value=LPWKSTA_USER_INFO_0_CONTAINER( ... EntriesRead=1, ... Buffer=[ ... LPWKSTA_USER_INFO_0(wkui0_username="test") ... ] ... ) ... ) ... ), ... ndr64=True ... ) >>> >>> print(repr(bytes(pkt))) b'\x00\x00\x02\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00t\x00e\x00s\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00t\x00e\x00s\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> assert bytes(pkt) == b'\x00\x00\x02\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00t\x00e\x00s\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00t\x00e\x00s\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ###(035)=[passed] DCE/RPC 5 NDR: Dissect test >>> pkt = NetrWkstaUserEnum_Request(bytes(pkt), ndr64=True) >>> pkt.ServerName ] |> |> >>> assert pkt.ServerName.value.value[0].value == b"test" >>> assert pkt.UserInfo.WkstaUserInfo.value.value.Buffer.value.value[0].wkui0_username.value.value[0].value == b"test" >>> assert pkt.PreferredMaximumLength == 0 >>> assert pkt.ResumeHandle is None ###(036)=[passed] DCE/RPC 5 NDR: Dissect packet with NDRVarStrLenField >>> from scapy.layers.msrpce.raw.ept import ept_lookup_Response >>> from scapy.layers.msrpce.ept import protocol_tower_t >>> import zlib >>> data = zlib.decompress(b'x\x9c\xed\x9dw\x9c\x13\xd5\xfa\xffg\xe9K\xdb\x05D\x8a\x94(Udq2-\x13@$uY\xb6\xb2K\x17\x81\xc9\xccd\t[\x12\x92\xb0\x14\x15dY\x90*\xbdw\x10iJG\xe9 ^T@DDl\xc0\x15\xb9(`\xa1\xd8\x81\x8b~\x93%\x08\t$\xcf\x9c3s\xff\xf9\xfd\xc8\xeb\xb5\xafA?\x9fy\xe7\xccs\xce<\xcf\xcc\x99\x12\x82\xb8\xff\xb3>\x8e ~\x8d\xbb\xfb\xef\x9d3\xb3\x8bv\xf7\xdf\xdei\xfa\xa5\xf1\xb7\x86\x14-\x9a\x16\x92\x88;\xcbH\xbd\x0c\xa0\x97\x05\xf4r\x11\xfae\xd7\xd8\x8d\xdb&\xad\xb4,\xadS\xf2W\xf0\xbf\xcb\x03z\x05@\xaf\x18\xa1\x1f<\xd2}1\xf3]\xaey\xd4\xab\x7f\xaf:\xfd\xcd\x8d\xb1\x95\x00=\x1e\xd0+\x03z\x15@\xaf\n\xe8\xd5\x00\xbd:\xa0\'\x00z"\xa0\xd7\x88\xd0#?5\x01\xbd\x16\xa0?\x02\xe8\xb5\x01\xfdQ@\xaf\x03\xe8u\x01\xbd\x1e\xa0\xd7\x8f\xd0\x85\x1fz\x9cZ^\xbfB\xca\x8c\xd9M.n/\x93F=\x06\xe8\r\x00\xbd!\xa07\x02\xf4\xc6\x80\xae\x03\xf4\xc7\x01\xfd\t >M\x00\xbd)\xa07\x03\xf4\xe6\x80\xde\x02\xd0[\x02\xfa\x93\x80\xde*B\x9f\xf0\xfa\xa7/\xf6\xcd\xca\xb3mjt\xb8h\xe5\x99\x94\x06O\x01zk@O\x02\xf46\x80\xfe4\xa0\x93\x80\xae\x07\xb6\x9f\x02t\x1a\xd0\x19@g\x01\x9d\x03t\x03\xa0\xf3\x80n\x04\xf4\xb6\x80\xde\x0e\xd0\xdb\x03\xfa3\x80\xde\x01\xd0\x9f\x05\xf4\x8e\x80n\x02t3\xa0[\x00\xdd\n\xe86@\xb7\x03z2\xa0w\x02\xf4\x14@\xef\x0c\xe8\xa9\x80\x9e\x06\xe8\xe9\x80\x9e\x01\xe8\x99\x80\x9e\x05\xe8]\x00=\x1b\xd0s\x00\xbd+\xa0w\x03\xf4\xee\x80\xde\x03\xd0{\x02z/@\xef\r\xe8\xcf\x01z\x1f@\x7f\x1e\xd0\xfb\x02z?@\xef\x0f\xe8\x02\xa0;\x00]\x04t\t\xd0e@w\x02z.\xa0\x0f\x00t\x17\xa0\x0f\x04\xf4<@\xcf\x07\xf4\x02@/\x04t7\xa0{\x00}\x10\xa0{\x01\xdd\x07\xe8~@\x1f\x0c\xe8E\x80>\x04\xd0\x87\x02\xfa0@\x1f\x0e\xe8/D\xe8~\xd9[\xe0\xf3\x16\xfd\xa3\xbf\x18Z\x06\xcf\x93R\n<\xf9:\xa7\xd7%\x17J\xf9\xc3t\x85B\x81|\xdf\xf9l\xdcK\xc0\xf7\x8d\x08-\x83\xc7\xa5\x19\xb2\x7f\x88\xdb\x9b\xa7\xb3\xb8\x0b\x0be\xd1\xefr\x17\xea\xcc^w\x9e\xec\xd5\xf9doQ`\x11\xf8"\x8f\xdbU\xe8\x7f\x00g\xa4F\x9c\x975\xe2\x8c\xd2\x88S\x1cZ\x06\xcf\x1bSMY)\xba\x9c\xc0*.Q\x8e\xb5\xceh\x8cuJ0\xd6\x19\x83\xb1\xce\xd8\xd0\xf2Y\x94\xb8\xe8\x9cn\xaf.\xc3b\xd6e\xcb>\xd9\xaf+pK\x83\xf3\xe5\xfb\xd9\xafh\xc8~o\xde\xc7\xb7*|].e\xf4\xd6\xd5\xc3[Lm\xef\x19\x17bG\x1b\xc7\xe3\x01}B\x84~\xe5\xe4\x87\xdbxs\x15\xeb\xae\xa5\xf3\x96\x14Oi\xf0\xd7D`\xfdI\xa1ep\xfe!#;\x0b\x1c9\x93\xef\xf5\xe7\xa4\x80\xfeWC\xcb\xe0\xfc\x8a\xadH\x0e\xc4%\xdf\x9d\xab\xebj\xc9J\xc9\xba\xcf;\x05\xc1;\x15\xc1;-\xb4\x0c\xce1X;Y\xb2\x8a8\x9d%\xdf\x15\\\'-;\xcb\xa2\xb3Ek\xfbt\xcc\xf5f\x84\x96\xf5C\xebE[\xeb\xfd?\x8e7\xddP\xd42s\xe1\xd1\x91\xf9o\xd9\xc7\xc6\xcd\x0c\xad\x17\x9c+I\xf6\xba\x07{tY\xee|\x978L\x17\\/\xa50\x902\x9d\x82\x18\x18C\xb9\x1e\xb1\x14x\xe7\xfbf\x85\x96\xd1r\xa7\xc7\xebv\xba\xf2\xe5;%\x88\x98\r\xf8}r\xe1?\xde\xe0g\x0e\xa2\x7f.\xe0\x8f\xfc\xcc\x0b-\xa3\x8d\xd1\xf9\x80\xbe\x00\xd0\x17\x02\xfa"@_\x0c\xe8K\x00})\xa0/\x03\xf4\xe5\x80\xbe\x02\xd0_\x03\xf4\x95\x80\xfe:\xa0\xaf\x02\xf4\xd5\x80\xbe\x06\xd0\xd7\x02\xfa:@\x7f#\xb4\x0c\xeeW=\\\x85\x9d\xfc~\x8f\xce4\xd8\xefN\xca\xf2\xba\x87\x0e\xbbS]\xee_\xefM\xcc\xf5\xd6\x87\x96\xc19\xefn\x81\x04\x99\x9e\xeb\rd\x80\xfb}\x1b\x14\xfa6*\xf4mR\xe8\xdb\x1cZ\x06\xe7\xfc\xedCt\x81\n\xeb\xbb\xcf\xb3E\x81g\xab\x02\xcf6\x05\x9e\xb7\x14x\xdeV\xe0\xd9\xae\xc0\xb3C\x81g\xa7\x02\xcf\xae\xd028/n\x16|\xb2\xce\xee\xf2\xcaC\x84\xfc\xfc@\x82\xcfu\x15\xca\xc1\xb5\xee[)\xf0\xd9\x1dZ\x06\xafWX\x9d>\xab\xaf\xb4\x82>p\x18\x11{\x10\xbc{C\xcb\xe0\x0e-\x83\xd7/n\xa7\xcdt\xa1P\xc8\r\x1c2\xde>\x86Qp\xaaB\x1c\xd7\x80\xf1\x89\x06\x8c\x13\xa1e\x8b\xfb\x18\x81#\xac"\x97\xa4\xe4\xc4\xebS\r\x18\'5`|vO\r\xd0\xa7\x87\x84\xd2\xfb\xc2\xd2\xfb\xf5p\x15J\xee!\xa1K\xf0\xd9Y\x96>\xd1\xee\x96\x99\x01pg\x02\xfa\xac\x90\x10\xbc\xe7\xa2\xbb\xa70\xea=\x17\xb3\x15\xfa\xe6(\xf4\xcd\x8d\xe2s\xaei\x917zz\xcf\xb4U\xe3\xc7\xfe\xfdJ\xe2\xce\xc5\xf3"\xda\x1f\xa9\xcf\x8f\xd0OU\x95\xcc\xcf\xb3\xc6\xcc\x05sV\xd1S+V\x18\xbf B\xb7\x97;;|\x89\xef-[\xf1\x91W\xe6\x0cJ\x1c;la\x84\xce2\xba\xdcn\xee\xda\xb6\x89SV1\x1b\x9b?\xfa\xc8" ~\x8b\x01}\t\xa0/\x05\xf4e\x80\xbe\x1c\xd0WD\xe8K{\x9dj\xc7}nM\x9f\xea\x7f\'xi4\xee5`\xfd\x95\x80\xfe:\xa0\xaf\x02\xf4\xd5\x80\xbe&B\xaf\xf8\xd3;\xcf\xfd\xf6[\xbfN\x8bn\xb9?~\xe3\xfa\xf2\xf6kCB\xf0Y~\xbb\xd7G\xdd{\xe1,\xd2\xbb.\x867\xf2\xf3\x06\xd0\xae7\x01}}H\x08^\x1f\xc9\x12\x85\x9c"\xf1\xf6\xf3\x8a\xc1\xbf\xf2\x81\x8c]\xcd\xf3W\xef/O\xbe\xde\xcb\\\xdc\xa6u\xc9W\rOU\x8b#\x82\xaf{\x08\x08\xe5\x9e\x1f7\xe1\x87\x06\x87j,\xb9X\x89x*\xb1S\xff2\xa5B\x1cQ\xe5\xf6\xa2b\x19\xe2@`\x11_\x8e\xd8\xbf\x9a\x90J\x9f1\x0c\xfe\x95\xc3bV\xbd\xbdHL$n\'\x1c_\xce\x80\xc1\xfe\xc0\xb2\xb0\xf4\xd9\xb7\xbej\xdb\x9aP\x8b\xe8\x93\x95\x92e\xeb\x93R\xe8\xf2\xff\x83\x8e#jT \xfa\xf4\xb1Z\x82\xcf?g\x86\xfe\xd4\xb5?!\x903}\xb9\xa9\xd9\x1e\x914P\x06\x03I\x84\xc7\xe5\xdd\xe6?\x17=\xf2c3\xcb\x84y\x03\xedLI\xdd\rZ\xc5\x05\x99\x8b\x19\x17\xec\xf6\xdf\x1f\x97\xe03\xb9\x9d\xeep\xb7\xfd{\xc1\xc7\x83\x04\xa6\xf3\xbes\x15n\x14\xcb\xcd\x06(\xe6V"D\x9f\xec\xf0\x0cv\x94>\xe3\xd9S5\xaf.\x11|\x8e!\xc9\xc1\xc92/K\x94\x91eX\x916:EN[\xbe\xec4R\x06=\xe948E\x07\xc5\x18)J\xd0\x96op2<\'\x91F\xbdL3\x06R\xefp\x8a\xda\xf2Y\x92\xe2\x1c\x92\xc0\x93\x1c-R$GQFm\xf9zFt\xb2\x06\xd6\xe1`$Jp\xf2\xa2\x91)}\x86\xb5\xbfj\xbe\x8e\xc8L\xb3\xd9(\x1bI[\xf4\x9c\x89\xb2\x1b\xf5\xa4\xc1\xce\x1b,,e\xd2\xdb\xedv\x9e\xd7v;H#gt\xb2N\'\xa9\xa7\x05#\xc7\x8b4\xd6\xd5\xf2\xa1\xb1\xae\x96\x0f\x8dul>\xe2XW\xbb\x1d\xd0X\xc7\xe6\xc7\x18\xeb\xd8\xcc\xffQ^\x7f\x98w\x1f\xe6]\x15y7\x8c\xf7X\xc5^gjS\xbd\xd2JF\xcdi\xf3\xd5\xe9\x84\x81jy/\xc4%Wk\xb7\xe5M\xfb\xe2\xba\x7f\xcd\xb6\xe5g\rU\xcb\xab\xe2\xee8\xcb\xb8\xb9\xaee\xda\xae\x8fV\xbc\xe6\xbezZ-\xef\xc3u_d\x9c\xbb6\xd12\xb7\xf1\xae\xea\x13v\xc7UU\xcb\xb3\xff~-aW\xad\xca\x1d\xd7e\xcd\x1f\xfa\xf3\xdb\xab{\xab\xe5\x15.-v\x9d\xeb\xb7\xc9\xbee\xe1\xf2\x83\xb6}K]jy\x83\x98V\x95\xde\xd2\xb72\xef\xd0\xaf\xb4\xc6\xcd\xae\xeaP\xcb\xdb\xc8\x9d\xbf!m\x7f\xa5\xf3\xe2\xaf\x9e\x1c\x93|\xb4\xf8g\xb5\xbc\xc33\x9f\xf9V\xf2\x1b;m\xb4\xc6/\xbf9\xb1\xed\xb7jy{K&\xd7\x996}fJ\xf1{\xcfN\x9d\x7f\xb8wY\xb5<\xe7\xa57\xd2-\xcb\xb3\xac\xeb\x9f]\xf0\xc2\x91\x9c\xda\xdb\xcb\xa8\xe4\xfd\xbe\x9b\xaa\xbb\xfd\xf0\xa7\xa61\x9f\x1c2U\x94\xfeP=^\x8e\xddx\xfc\xe0\x9a\xf8\x83\xe6M\xdd\xbc\xfc\x98YG\xae\x12*y\x1f}9\xb2u\x85\x0b\x1dS\xb7\xd6\x9c\xa5\xafxe\xc1F\x0c^X\x8e}\xf7\xc8\xbaq\xdf3\xeb\x8b\x8ak\x17\r\xd6\xc9\xbd\x9b(\xe6)\xacEj\xf9P-\xc2\xe6#\xd6"\xb5\xdb\x01\xd5"l~\x8cZ\x84\xcd\x8c2Vv\xd79P\xb4\xf5\x838\xf3*\x9b\xa1\xed\x97e\x9f\xaa\xaf\xf5q\x8bZ>4V\xb0\xf9\x88cE\xedv@c\x05\x9b\x1fc\xac`3\xa3\x8c\x15j\xc7w\xdd\x86\xd5\xfb\xcc6\xf5\xe0H\x87\xc7k\xaa\xa9\xf5XQ\xcb\x87\xc6\n6\x1fq\xac\xa8\xdd\x0eh\xac`\xf3c\x8c\x15lf\x94\xb1\xb2w\xd3\xc81\x99\x95\xb6en[\x98\xda:\xf5\xdb\xab\xc7\xb4\xeeKl>b_\xaa\xdd\x0e\xa8/\xb1\xf91\xfa\x12\x9b\x19\xa5/7\x9c:\xbc=\xf5\xe2\x0e{\xc9\xcf\xeeA\xfb\x9f]\xdcM\xeb\xbe\xc4\xe6#\xf6\xa5\xda\xed\x80\xfa\x12\x9b\x1f\xa3/\xb1\x99Q\xfarV\x99\x7f\xe9vN\xfe\xae\xd3\xfa}\x1d\x86^i\xb7\xc9\xaau_b\xf3\x11\xfbR\xedv@}\x89\xcd\x8f\xd1\x97\xd8\xcch9vw\xadf\x9f\xe6w\xb2\x8c\xe9;\xe2f{\xba\xe0\x84\xe69\x16\x97\x8f\x9acUn\x07\x98cq\xf9\xb1r,.3J_\xb2-:T[\xfa\xd1\x87\x19k\xce\x99\x96\x7fQ\xff\xa7\x0c\xadc\x80\xcd\x8f\x11\x03lf\x94\x18\xdc\xbc^\xfe\xbd\x15W[e,\xf5\xf9\xba\'L^\xdcA\xeb\x18`\xf3c\xc4\x00\x9b\x19%\x06\xd3\x0e\x1b\x1e\xdbT\xd47s\xc5\xfb\xad\xf6\xbd\xd7\xf8\xa9\x8dZ\xc7\x00\x9b\x1f#\x06\xd8\xcc(1\xf8\xa6\xdd\x7f\'^)H\xca\xd8\xe0\x7f1\xf9h\xe5\x7fw\xd6:\x06\xd8\xfc\x181\xc0fF\x89A\xc7Us\x93\x1a\xf6\xdcaZ[m\xf5\xc4E}.\xf1Z\xc7\x00\x9b\x1f#\x06\xd8\xcc(\xf3b3\xd7\x0be\x1f-\x9b\x9f6\xe1\x8b\x833\r=\x89sjy\xedF7\xedY\xbf\xfd\'\x9d\xf7\xdcz\xb7a\xbds\x1dp\xee\x15\x08\xe3y\xe2\xd7\xeeig\xea\xd0y\xf1\xf3\xbf\x9f^4\xa2b\x7f\xb5\xbc\xf1\x93\xe9v7\xf2\xb7[KF\xe4\xd4\xd6\xef\x9e7]-o\xc7\x89\xe2W\xf6\xfc`\xb5\xaf\xf8\xe2\xa27g\xd4\xb4\x05jyL\xd9\xe7*u=?-}\xc1$\x13s\xfd\xc2\x8c_\xd4\xf2\xb6\xe7\xfd\x98z`\x9b;u\xf3;\xcf\xaf<6\xfd\xe3/U_\xe3+x\xe3\xd0\xdb\xc5\xdd2\xd6O8/\xfd\xf4\x82y\x08\xf2\xf5l\x03O\xd12)\x89N\x92b$F\x14\xc4\xff\xc1\xbd\x95\xacE\xaf\x8fhw\x8f\x17\x12\xce7\x1b~"m\x19;\xf2\xa5g\xae\x1f\xcfCm7\xcf3NQ\x12DR&I\x9a\xd4\x0b\x066\xfc8\x0e\x9b_z\x1c\xc7\x1a\r\xbc\x9e4Q6\x83\x9d\xb2\x9bi\x13G\xf2&\x83\x81d9\x96\xa4\xb4\xdd\x0e\x87\x18\x8c?\xcd\xf1\x0e\x86%e\x9a\xa7Hm\xf9\xfa@\xb7\x8a,K\xb1\x94\x9118\x1c\x923\xe2\x9e\xd4\xbe\'\x13\xc6\xed\xb0\x9c\xad\xb1i\xf5\xb1\x8c\xaf?\xd7\x8d\xd1\xba\x1f\xb0\xf9\x88\xfd\xa0v;\xa0~P\xcb\x87\xfa\xa1q\xf1\x13\xd9\xe7N\x8e\xe9Tr\xad\x9f0f\xe9\x8f&\xad\xdb\xaf\x96\x0f\xb5_\xf5\xb5z\x80\xff\xde\xa7\xc4\xca\xe3\xd5,\xb6\xddUO^g\xc6~\xff\'\xfa\xb1A\xe0\xc4\xcf)\xf2\x92\x93"I\xc9\xc8\x90Fm\xf92\'3\x12-\x08\xa4\xd1ht\xca\x02\xad\xd7\xf8\x1e8\x88_\xf5\xe0\x9b\xe4\xee>\x1f\xd9\xe7W\x9f6-y\xfc\xb9\xf6\xa8|\'\xc3\x1aE\x07\xcd\xf3N\x83\x81rH")\x85\xf3\x8fUY5bC\xa7\x81\x99\xe3\x07\x0c\xb4V\xecz\xf2\x06r\xffR\x82(r\xa4^b\x04\')\xcb\x81\x7f\x87?\xef\xf1\xc7\x86\xbd\xbf\xd7k\xb4+s\xc9\x94\xed\x8buu\xe9\x17\x95>+\x10|\xde#\xee\xee\xf3\x1e\xc1\xdfD\xea\xad\x96\x99\x90@\xf4\xf1\xb8\xac\xfd\x1b\xb3_5\xac\xd9\x7f\xacFq\x12\xb1\x96\xe8r>A\xeb\xb1\x83\xccGl\x7fq\x85?\x1aw\xa9|\x91\xacX\xe0\xafr\xf1\xa3K\x13\xb5n?2\x1fq\xec7\xb8\xe2\xaf\xfc\x9a\xa9B\xc6\xe8\xf5\xa7\xfd7\x1b\x9c\xc9\xd1\x80\x1f|HZ\xbe\xc3O?\xe3c\xc6\xb5\xa9\xd0q\xe1\xce\'z\xc4\xc7\x9fI,\x1f\xc0\xc4)\xe17#H\xd9IR2\xcf\'\xc9\x0e\x9aNb\x18=\x97\xc4S\x14\x95\x148\xb3&\r$\xed\x08\xeck\xc2}\xc7L\xd8\xdfw\xe7\xdcHp\xf2\x1c-\x88\xce\xc0\x169dJd\xd8p\xbend\xfbj\x93\x1bt\xb5/\xdb\xd2\xa5{\xbb\'\'~\x85|\xcc\xc4p\x06\x03\xc712\xeb`\x03Gd\x8c\xde\x18>G\x80\xcd\xbf}\xcd\xcd\xc22\x16\xcefb\xad\xac\xd1`dm\xa4EO\x1b\xf5\xb4IO[#\x9e\xe9{k\xe7\x94M\x7fv/\x93\\r\xd6T\x9e\x9a\xb1Z\xf9=\xaf\n\xb7\x03\x9b\x8f\xb8\x1d\xc5\xcdw<=O>m^_kO\xeb\xd5\x0b\x8e7@\xae\x9bFY\x12D\x81!y\xde@\xd3\xbc\xc09\xb5\xe5;\x04\x87@\n\xb23p$\xaeg\xf5\xa4\xc0;\xb4\xe5\x8b\x0c/\xd1\x0c\xcbI\xa4\x9ebX)\xb01\xda\xf2\xe9 \x94"%\xde\x118\xc6\xd7\x1beg\xe4\xbd\xa0\xb4\xff\xd7E\x1dz\x98\xd6~:zm\xe3>IiZ\xc7G-\x1f\x8a\x8fZ>\x14\x9f}5\x16\x8d\xdc12\xcf\xb2\xba\xe6\xe6\x93U\x9fOS~o\xb4\xc2\xf6\xab\xe5C\xedoV.\xe5L\xb3\x1c\xd9\xf6\xb6\x7fD\x8b\xcf\xf6/l\xaa!\xbf\xb4~\xfee\xa95rMV\x8b\x94UC\xab\xf6\xec\xd5\xe5\x857\x14\xd7\xcfj\xa1\xfa9$\xcf\x17Q@\xc3\xda\x8f\xcc\x8f\x8c\xbf^\x96\x1c<\x1f8\xbbu\n\xc1\x19\'*"\xffT\xab_\xe9\x87\xcb\x89\x13\x92\x97\x9d\xc9\x9a\x97=\xfa\xc2\xea\xb2\x1a\xf3\xe3\xb7\x1e\xfa\xf9\xd0;\x84i\xac\xf1\x8bu\x8f\x8cu!_\x0b\x85\xf8g\xb6\x1d?0\xeaF\x7f\xeb\xa2\xcf.\xc8\x13\xc7\xd8R\x91\xf9\xb2\xc8K\x0e\x87S\xa6(\x89\x97E\x83\x1cQ\x07\xb0\xf9\xa5u\xc0L\x19\x18\xbd\x9e\xe2\xf4V\x0be5\x18H\xd2\xa6\xe7X\xab\x857\xd9-\x11\xe3t\x83#\xe3\xd7M_\x1d\xb0\xbe\\\xab\xdc\xfcE\xe7\xeb(\x9f\xd3Q\xb8\x1d\xd8|\xc4\xed(\x9f\xfb\xc3\xf0\xef\xda\xd6O\x1e\x97\xf4\xcb\xc2\xc4\xc5\xa7\x91\xef\x1d\x85\xb6\x03\x9b\x8f\xb8\x1d\x8c\xf0\xc7\x85\xdf\x16\xa7\xa4,\xff\x8c\x1e\xf0a\xfc8\xe5\xd7\n\x15n\x076\x1fq;*O\x1d\xb9\xe5\xfc\xf7\xe5,\xcb\xd7\xd5\xdc\xe5\x9c\x147N\xeb\xed\xc0\xe6#n\xc7\x8a\xfc\x9b\xeb\xfaVe\x92\xa7\x8f\xa9|\xd9\xfb\xd7d\xf4\xe3\x0c`;\xb0\xf9\xf0v\x84}\x8f\xa7\xf7\xfc\x7f\x8d\x9c\xe0\xc9\xd8\xf9h\xa3)\x8d\xebu\xb8\x86\xf6=V+\xc3\xf1\xa4\xd9\xcc[\xadz\xce@2F\x93\xc1\x1c8\xb0\xd4\x9b)J\x1f>w\x89\xfd=\xd5\x89\xae\xb2W\x96\xdc\x16w\xa1\xdf\xeb\x0e\xde#\x91\x1d\xfaS\xc7\xad\x19\xe2Z]Bn\xa1\xdb\xe7w\x89>"\xe2\xdc\x07\x9b}\xe7\xba\x87\xcc\xd0\x06\x9ee\x9d\x92\xa4g\x04V\x16\xc5\xf0\x98\x0c9\x9b\xf7n\xea7\x972\'\xec\xbe\xd8\xfdJf9\xe5\xe7\xa2@L\xb0\xb9\nb\x82\xcdV\x18\x93\xcdl\xff6\xd7.\xae2-\xb5\xcay\x96\x85i\x8cV1\xc1\xe6*\x88\t6;zL\xc2\xf8\x03+&u{\xf2\x885c\xe2\xc0\xe3}{\x9d\xdb\xaf\xfc>\x89\xe8\xfc\xb0\xf9\xd7\xf5-\x96wy\xae\xf8g\xd3\xd65\xf5\x0fu\x1b\x9eX\x17e\xfe\xb5\xe6\xdd\xf9\xd7\xb0~Df\xde\xed\xc7\x0c[\xd7\xb4\xcc\xe4\xcc\x8c~\xc1\xc6\x13\x84vm\xad|\xb7\xad\x8e\xc0\xfft\xa8e&\xd4\t]\xcb\xd3;8Q\x96\xf4F#+\xc8\x82\x931\x84M?i\xd3\xfe\xc6\x81\xf6\xc7\xdfm\x7f\xd8\xb52\xecX\xc7\x13\x19]\xad9\xfd\xd2J\xc3\x1c^\x17\xb0\x99\xa5u\xc1nd\xecf\xc6h\xb0\x99\x98@\x0cL\xb4\xd1\xce\xf06\xcaH2v\xce\xa6]\x7f\x96\xbd\x1b\x8f\xb0k\x9c\xd8m\xafL\xf8\x84\x02\x9fO\x97\xef\t^<\xbc3/\xa9\x8eY\x87\xc8qI\xc1\x9f\x15Ks\x8bB\xf0\xe7\x84%]\xd6\xed_\xe0\x0c\xcbO\xd8\xfc\x9a\xc1\xdf\x83\xf7\xcb\xa2_\x96\xfa\xf9\xfcn\xaf\x90+\xdf3\xe6\xd4\xb1\xab\x10\xf9>\xc1\xe7\xf3\xb8\xbc\xc1\x80\x84\xbd\xd7\x0f\x9b\x99\x18dz\xdc\xf9.qX\xbe\xdb\x9d7\xd8Ct\t\x08]Tsk\x10i9\xa6~6SN?[\x865+3%#x\xb9\x80H\x0e\xfd\xa9cW\x0c\xb6Y\x14<\xda\xc5 \xd0\xd6@r\xbb\xdbT\xadr\xa7O\x16\x07{]\xfea\xa5\xd7\xff\x03\xff\xd3\x1e\xfaS\xc7\xad@\x08\x83%\x97\xff\x9e}B]\xde\xac\x1a\xca\x9b\xa5\xa3+,Y\x86\xe5\x06k\xf2\xdbS\xfe\xdeL\xa4\xed\xad\xb6\xf8\xfa\xb2i\x7f=\xa6E]Bf*\xacKj\xda\x1a\xad.\xe12q\xea\x12\xeew\xc5\xaaK\xd8\xb1\x8eQ\x97\xb0\x99\x88uIM\x7fF\xabK\xd8m\x8fQ\x97\xb0\x99\n\xeb\x126_A]\xc2f\xc7\xa8K\xd8L\xa0.as\x15\xd4%lv\x94\xba\xa4"\x061\xeb\x92\x8a\xdc\x19\xb3.as\xa3\xd4%\xec\xbc\xa9\xb0.\xed\xcb\xee\xbd\xf9\xcc\xb7\x9d3\xd7\xbf>iU\x8bV\xd5\xc7*\xbdG V]Bf*\xacKj\xda\x1a\xad.\xe12q\xea\x12\xeew\xc5\xaaK\xd8\xb1\x8eQ\x97\xb0\x99\x88uIM\x7fF\xabK\xd8m\x8fQ\x97\xb0\x99\n\xeb\x126_A]\xc2f\xc7\xa8K\xd8L\xa0.as\x15\xd4%lv\x94\xba\xa4"\x061\xeb\x92\x8a\xdc\x19\xb3.as\xa3\xd4%\xec\xbc\xa9\xb0.\r\xed\xce\xd4dj\x1e]w\x85\x88kb\xcb=vS\x8b\xf3%d\xa6\xc2\xba\xa4\xa6\xad\xd1\xea\x12.\x13\xa7.\xe1~W\xac\xba\x84\x1d\xeb\x18u\t\x9b\x89X\x97\xd4\xf4g\xb4\xba\x84\xdd\xf6\x18u\t\x9b\xa9\xb0.a\xf3\x15\xd4%lv\x8c\xba\x84\xcd\x04\xea\x126WA]\xc2fG\xa9K*b\x10\xb3.\xa9\xc8\x9d1\xeb\x1267J]\xc2\xce\x9b\xd1\xebR\xf8\xb5\xdf\xc7\x1bT\xa1zT\xcf\x98t\xe2\xcbM\xeev%\x9f+~\xc7\x1ePC\x90\xb9\nj\x08.\x13\xa7\x86\xe0~W\xac\x1a\x82\x1d\xeb\x185\x04\x9b\x89XC\xd4\xf4g\xb4\x1a\x82\xdd\xf6\x185\x04\x9b\xa9\xb0\x86`\xf3\x15\xd4\x10lv\x8c\x1a\x82\xcd\x04j\x086WA\r\xc1fG\xa9!*b\x10\xb3\x86\xa8\xc8\x9d1k\x0867J\r\xc1\xce\x9b\x0fk\xc8\xc3\x1a\xf2\xb0\x86<\xac!\x0fk\xc8\xc3\x1a\xa2}\r\t\x9f\xa3\xe8q\xefy\xce\xf8uZ\xe4z\\&\xd6\x9c\x13\xe6w\xc5\x9csBe*\x99s\xc2e\xa2\xce9\xa9\xe8\xcf\xa8sN\xb8m\x8f5\xe7\x84\xcbT:\xe7\x84\xcbW2\xe7\x84\xcb\x8e5\xe7\x84\xcb\x84\xe6\x9cp\xb9J\xe6\x9cp\xd9\xd1\xe6\x9c\xf0c\x10{\xce\t\x97\x0b\xcd9\xe1r\xa3\xcd9\xe1\xe6M\xbc\\\xaf\xf898\x84\\\xaf\xfc\xd9:\xf5\xb9^\xf1w!\xe4z\xe5\xcf\xee)\xcf\xf5\xca\x99\xear=R\x7f*\xcc\xf5\xca\xdb\xae<\xd7+g\xe2\xe5z\xe5|\xf4\\\xaf\x9c\xad<\xd7+g\xa2\xe5z\xe5\\\xf4\\\xaf\x9c\xad,\xd7\xa3\xc4\x00%\xd7+\xe7\xa2\xe5z\xe5\\e\xb9^y\xde\x8c\x9e\xeb\xc3\xf22k\xee\xf2\x9f\n\xa9\xc7k\xac\x0b\xec\xe4\x99\x07N\x7fR\xee\x7f\x98\x97q\xbf+V^Ff*\xc8\xcb\xd8L\xc4\xbc\x8c\x1b\x8fXy\x19\xbb\xed1\xf226Sa^\xc6\xe6+\xc8\xcb\xd8\xec\x18y\x19\x9b\t\xe4el\xae\x82\xbc\x8c\xcd\x8e\x92\x97U\xc4 f^\xc6\xe6\x02y\x19\x9b\x1b%/c\xe7\xcd\xe8y9,\x07a\xbf\xf7\x0f1\x07!\x7f\x8f\x82\x1c\x84\xdd\xf6\x189\x08\x9b\xa90\x07a\xf3\x15\xe4 lv\x8c\x1c\x84\xcd\x04r\x106WA\x0e\xc2fG\xc9A*b\x103\x07\xa9xWh\xcc\x1c\x84\xcd\x8d\x92\x83p\xf7\xdd\x189(\xec\xd9\xe9\x84\xb8j\xf5\xe9\x06\xad-\x1b\x7f\x9b\xf4\xeb\xc5\xf2\xe4<\xd4g\xa7%I\xe4%\xd6!\x1b\x05J`E#GG\xbc\x07\xa2l\xc1\xa0\xb9o\x8c\x7f\xdf\xbakR\xcb\x9eM\xbfm\x80\xfc>\x99\x07\xf0\xc3r\xdb\xecg\xaf\x16\xdd:\xfa_\xeb\xf2\xd6\xd2\xac\xcaD\xcdx\x94\xdcV5\xca\xbb1\x91\x99\x11m\x96%#/Q\xa2$8I\x96\xd1\xb32\x15\xf1<\xb9\xd0\xdc\xd6yj1\x97:e\xef\xc8\x8e3\xd6\xa4\xc0\xbf\x9f\xac\xa0\xcd\xc8L\xc46/\xa8@\xaf_\xbd\xfc\xb2}9{\xe6\x16\xbd\xe0\xdc(-\xda\x8c\xccDl\xf3\x8dS\x85U\x9av~/sB\x93\x99O5:,\x1f\xd7\xa2\xcd\xc8L\xc46\x87\xdfk6~\x9d\x16mFf\xc2m\x0e\xe3\xb7\xfd#\xfd\xeb\xa4\x83m3^.[b\xb8\xf5\'\xd9\n\xf5wm)\xd9)\xc9\xb2\x835\xb0N\xbdS\x08\xec\xee\x11\xef\x8cl\xb3t\xc2\xb6\x92\x96s2F\x15e\x9c-\x18f*An?\xcd\xf1\xa4\xdeH\x8a\x82$Q\x1c)\x91dx\xccG\xed\x1a\xceY\xe7^c\xdf\xa4\xe6^\xe5\x89\xc4\xb2e\x10b\x9e\x10%\xe6\xcdGT\x96\xb7\x7fOw\xfb\xc8\xb2\xb0\xe1\x7f\xbf\xa9]\x03\xb9\xcdFV\xe4\r$ep\x90<\xcb;E\'\x1f~\xfc\x85\xcd\xafLt\xf7\x14\xba\xf2\xe4\xec\xd2\xe3\xaf\xb0c\x18lf\x15"[\xf0\x15\x08\x85i\xa5\xc70a\xef[CfF\xbeo-;\xb3[W[6\x11\xed}kg\xab\xe6M\xad\xf2~n\xe2\x96:\xc4\x99\xb8\n\x0e\xe4\xf7c\n\x06\x07\xc7J\x8c\xe0\xe0i\x89b\xf4F\x86\x0f?F\xc7\xe6\x97\x1e\xa3\xf3\x8c\x85\xb4r6\xd2`\xb0\x18\x18\xbb\xc5j\xb5\xd8lV=\xa3\xa7h\xde\xac\xedv\xe8\x8d\x9cAtr\x0e\xdeh\xe0i\x83\xc3@S\xffo\xf1\x1b\x15\x1d\x9d\xfb\xd2\x85\x0fL+\xf6\'\xbc\xdd\xfd\xcb\xea\x07P\xf9\x9c(\xb1\xa4\xa4\xd7;\x04Jd\r\x82DF\xbc\x97\xee\xca\xac\x96\x9f\xfc\xba\xe1\xa0y\xe5\xe6MV\xe7\x89\xce[\xb5\xe6\xf7\xcf\x99\xf2\x1f\xef\x98\x0e\xc9o\xcd~\xcc\xfeJ\xbb\xcb\xc89\x18\xe2\x7f\xd07~\xd6\xf7\xd4\xc6\x8c\x15\xe7\xca5\x9e\xb3E@\xfe\x8d\x0b\x88\xff\xd4\x85\x89\xb7\x8e\xaei\x9d\xba\xe6p\xfaOM\x9f\xde\x9b\xae5\xbf\xde\xbeEi\x8bO\xecH\x9dzy\xca\xa0a\x9b\xcb\x8c\xd6\x9a\x7fk\xc9\xd5_\x8e\xdd\x9cf\x9e\x99\xeey\xb3\xb0\xbao\x172_\xef\xe0\r2\'\tFI\xa6h\x92\x95\x9c\xe15DW\xa7\xf8\xb9v\xbf\x7f\\c\xed\'\xc4\xfe\xccw\x9b\x9eB\xa9\xdb\xb5\xee\xd6\x90\xb0\xdc\x83\xcc\x0c\xcb=\x94\x99\xa5H\x93\x853\x99\x8d&=i\xe3\xcc\xb4\xcdn\xd4\xf3\x16\x8e7\xe9\xc3\xdb>\xf7\xe3\xbf\xf3j.K\xe4\xe6\xd2\xf6w\xff\xf4\xe7$i\xd1vd&f\xdb_;\xb0.+\xbd\xc7\x96\x8e\x8b\x9c\x973O\xde\\ZT\x1e\xa1\xedu\xef\xb6=\x8c\xd9\xaf\xcd\x88\xf1\xbf\xcc(\xb2,\\x\xeb\x89!)}Z\xa0\xc4\xa3e\x94x 3\xc3\xe2\xc1\xf2f+e\xb5\x18\xacV\xdef\xe3Y;\xcf\xb0\xb4\x91\xe5X\xbdIO\x87\x8f\xf3\x9a\x87\xd2\xf7=\xfdm\xb9\x94W\xf7\xce\xa8\xf3\xce\x9eO\xe7\xa0\x8es\xd6H2\x12)\x894\xcd\x18YI\x10\xe4\x88\xdf\x94\xc2\xe6\x97n\x87\xc1h0q\x94\x8d\xa5-\xa4\xcd`\xe7\xcd\x81\xe3I\xda\xac7\x98)\x13e\x0f\xdf\x0enin\xc5\'\xaa\xad\xed\xb4\xd3\xf5V\xbdN\t\xfc\x11\xe4wz\x91T`\x1f%9\xbd s\xb2\x18\xf8W\xe9\xab\xbb\x89\xff\x03\x056\xf1\x00') >>> >>> conf.max_list_count = 500 >>> pkt = ept_lookup_Response(data) >>> towers = [protocol_tower_t(x.valueof("tower").tower_octet_string) for x in pkt.valueof("entries")] >>> >>> assert len(towers) == 430 >>> assert [x.floors[3].rhs.decode().rstrip("\x00") for x in towers if x.floors[3].protocol_identifier == 15] == [ ... '\\PIPE\\InitShutdown', ... '\\PIPE\\InitShutdown', ... '\\pipe\\eventlog', ... '\\PIPE\\atsvc', ... '\\PIPE\\atsvc', ... '\\PIPE\\atsvc', ... '\\PIPE\\atsvc', ... '\\PIPE\\atsvc', ... '\\PIPE\\wkssvc', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\1b6ced1995aeaf47', ... '\\pipe\\lsass', ... '\\pipe\\lsass', ... '\\PIPE\\ROUTER', ... ] >>> >>> tower = next(x for x in towers if x.floors[3].protocol_identifier == 15 and x.floors[3].rhs == b"\\PIPE\\ROUTER\x00") >>> assert tower.floors[0].uuid ###(037)=[passed] DCE/RPC 5 NDR: Test length_is with size_is with after-the-fact size >>> class BaseRegQueryValue_Response(NDRPacket): ... fields_desc = [ ... NDRFullPointerField(NDRIntField("lpType", 0)), ... NDRFullPointerField( ... NDRConfVarStrLenField( ... "lpData", ... "", ... size_is=lambda pkt: (pkt.lpcbData if pkt.lpcbData else 0), ... length_is=lambda pkt: (pkt.lpcbLen if pkt.lpcbLen else 0), ... ) ... ), ... NDRFullPointerField(NDRIntField("lpcbData", 0)), ... NDRFullPointerField(NDRIntField("lpcbLen", 0)), ... NDRIntField("status", 0), ... ] ... >>> >>> pkt = BaseRegQueryValue_Response(b'\x00\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00U\x00s\x00e\x00r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00', ndr64=True) >>> >>> assert pkt.valueof("lpType") == 1 >>> assert pkt.valueof("lpData").decode("utf-16le") == 'Windows User\x00' >>> assert pkt.valueof("lpcbData") == 26 >>> assert pkt.valueof("lpcbLen") == 26 >>> assert pkt.status == 0 ###(038)=[passed] DCE/RPC 5 NDR: Test DEPORTED_CONFORMANTS with offsetted padding >>> from scapy.layers.msrpce.mseerr import * >>> >>> pkt = DceRpc5ExtendedErrorInfo(b'\x01\x10\x08\x00\xcc\xcc\xcc\xcc\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x04\x00\x02\x00\x01\x00\x01\x00\x04\x00\x00\x00\x08\x00\x02\x00\xc0\x03\x00\x00\x00\x00\x00\x00\xa5\xcfq`,\xea\xd9\x01\x02\x00\x00\x00!\x07\x00\x00L\x06\x00\x00\x01\x00\x00\x00\x03\x00\x03\x00\xc4\xfe\xfc\x99\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\x00\xc0\x03\x00\x00\x00\x00\x00\x00)fo`,\xea\xd9\x01\x03\x00\x00\x00\x00\x00\x00\x00G\x00\x00\x00\x03\x00\x00\x00\x03\x00\x03\x00\n\x00\x00\x00\x03\x00\x03\x00\x06\x00\x00\x00\x03\x00\x03\x00!\x07\x00\x00\x04\x00\x00\x00D\x00C\x001\x00\x00\x00\x00\x00\x00\x00', ExtendedErrorInfo) >>> >>> assert isinstance(pkt.extended_error.value, ExtendedErrorInfo) >>> assert pkt.extended_error.value.max_count == 1 >>> assert pkt.extended_error.value.Next.value.ProcessID == 960 >>> assert pkt.extended_error.value.Next.value.TimeStamp == 133395140301514281 >>> assert [x.Type for x in pkt.extended_error.value.Next.value.Params] == [3, 3, 3] >>> >>> assert pkt.extended_error.value.ComputerName.value.value.valueof("pString") == b'D\x00C\x001\x00\x00\x00' >>> assert pkt.extended_error.value.ProcessID == 960 >>> assert pkt.extended_error.value.TimeStamp == 133395140301672357 >>> assert pkt.extended_error.value.Status == 1825 >>> assert pkt.extended_error.value.DetectionLocation == 1612 >>> assert pkt.extended_error.value.Params[0].Type == 3 ###(039)=[passed] [MS-EERR] test show() >>> with ContextManagerCaptureOutput() as cmco: ... pkt.show() ... result = cmco.get_output() ... >>> EXPECTED = """# Extended Error Information ... PID: 960 - 18/09/2023 12:33:50.167234 (1695040430) ... | ComputerName: DC1\x00 ... | Generating Component: Runtime ... | Status: 1825 ... | DetectionLocation: OSF_SCALL__DoSecurityCallbackAndAccessCheck ... | Flags 0 ... | Params: [('eeptiLongVal', 2583494340)] ... PID: 960 - 18/09/2023 12:33:50.151428 (1695040430) ... | Generating Component: Security Provider ... | Status: STATUS_SUCCESS ... | DetectionLocation: AcceptThirdLeg10 ... | Flags 0 ... | Params: [('eeptiLongVal', 10), ('eeptiLongVal', 6), ('eeptiLongVal', 1825)] ... """ >>> >>> result "# Extended Error Information\nPID: 960 - 18/09/2023 12:33:50.167234 (1695040430)\n | ComputerName: DC1\x00\n | Generating Component: Runtime\n | Status: 1825\n | DetectionLocation: OSF_SCALL__DoSecurityCallbackAndAccessCheck\n | Flags 0\n | Params: [('eeptiLongVal', 2583494340)]\nPID: 960 - 18/09/2023 12:33:50.151428 (1695040430)\n | Generating Component: Security Provider\n | Status: STATUS_SUCCESS\n | DetectionLocation: AcceptThirdLeg10\n | Flags 0\n | Params: [('eeptiLongVal', 10), ('eeptiLongVal', 6), ('eeptiLongVal', 1825)]\n" >>> assert result.strip() == EXPECTED.strip() ###### ## [PASSIVE] Passive sniffing ###### ###(040)=[passed] [PASSIVE] Passive sniffing of DCE/RPC packets encrypted with SPNEGOSSP[NTLMSSP] >>> from scapy.libs.rfc3961 import * >>> import uuid >>> >>> bind_bottom_up(TCP, DceRpc5, dport=49679) >>> bind_bottom_up(TCP, DceRpc5, sport=49679) >>> >>> conf.dcerpc_session_enable = True >>> conf.winssps_passive = [ ... SPNEGOSSP( ... [ ... NTLMSSP( ... IDENTITIES={ ... "Administrator": MD4le("Password123!"), ... }, ... ) ... ] ... ) ... ] >>> pkts = sniff(offline=scapy_path('test/pcaps/dcerpc_privacy_ntlm.pcapng.gz'), session=TCPSession) Unknown RPC interface 367abb81-9844-35f1-ad32-98f038001003. Try loading the IDL Unknown RPC interface 367abb81-9844-35f1-ad32-98f038001003. Try loading the IDL Unknown call_id 2 in DCE/RPC session >>> pkts.show() 0000 Ether / IP / TCP 192.168.0.101:49757 > 192.168.0.100:epmap S 0001 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49757 SA 0002 Ether / IP / TCP 192.168.0.101:49757 > 192.168.0.100:epmap A 0003 Ether / IP / TCP 192.168.0.101:49757 > 192.168.0.100:epmap PA / DceRpc5 / DceRpc5Bind 0004 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49757 PA / DceRpc5 / DceRpc5BindAck 0005 Ether / IP / TCP 192.168.0.101:49757 > 192.168.0.100:epmap PA / DceRpc5 / DceRpc5Request / ept_map_Request 0006 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49757 PA / DceRpc5 / DceRpc5Response / ept_map_Response 0007 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 S 0008 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 SA 0009 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 A 0010 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Bind 0011 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5BindAck 0012 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Auth3 0013 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Request / Raw 0014 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 A 0015 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Fault / DceRpc5ExtendedErrorInfo 0016 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Request / Raw 0017 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response / Raw 0018 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Request / Raw 0019 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49757 PA / DceRpc5 / DceRpc5Response / Raw 0020 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 A 0021 Ether / IP / TCP 192.168.0.101:49757 > 192.168.0.100:epmap A 0022 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response / Raw 0023 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 PA / DceRpc5 / DceRpc5Request / Raw 0024 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response 0025 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response 0026 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 A 0027 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response 0028 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 A 0029 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response 0030 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 A 0031 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response 0032 Ether / IP / TCP 192.168.0.100:49679 > 192.168.0.101:49758 PA / DceRpc5 / DceRpc5Response / Raw 0033 Ether / IP / TCP 192.168.0.101:49758 > 192.168.0.100:49679 A >>> >>> conf.dcerpc_session_enable = False >>> >>> assert pkts[16].vt_trailer.commands[0].Command == 2 >>> assert pkts[16].vt_trailer.commands[0].TransferSyntax == uuid.UUID('8a885d04-1ceb-11c9-9fe8-08002b104860') >>> assert pkts[16].load == b'\x00\x00\x02\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x001\x009\x002\x00.\x001\x006\x008\x00.\x000\x00.\x001\x000\x000\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00' >>> >>> assert pkts[22].load == b'0\x00\x00\x00&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00D\x00W\x00S\x00\x00\x00\xee`\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\xea\x00\x00\x00' >>> assert pkts[23].load == b'\x00\x00\x00\x00\xad\xb3\xf5\xd1\x8eJ\xdeG\xa9\xa5\x85\xccvb\x8b\x970\x00\x00\x00\x03\x00\x00\x00\x1d\x83\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00' >>> >>> assert pkts[32].auth_padding == b'\x00\x00\x00\x00\x00\x00\x00\x00' >>> assert len(pkts[32].load) == 33592 # reassembled >>> assert hashlib.sha256(pkts[32].load).digest() == b"\xc0\xb5\xde\x1c0\\\x02\x04\x1c\x7f\x05\xcc\xde\xd7\x01\xa5{\x917\xb4\xff\xc7\xa4\xd1\x89\xcd\x1cQ\xa1'3!" ###(041)=[passed] [PASSIVE] Passive sniffing of DCE/RPC packets encrypted with SPNEGOSSP[KerberosSSP] with AES >>> from scapy.libs.rfc3961 import * >>> >>> bind_bottom_up(TCP, DceRpc5, dport=49701) >>> bind_bottom_up(TCP, DceRpc5, sport=49701) >>> >>> conf.dcerpc_session_enable = True >>> conf.winssps_passive = [ ... SPNEGOSSP( ... [ ... KerberosSSP( ... KEY=Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("85abb9b61dc2fa49d4cc04317bbd108f8f79df28239155ed7b144c5d2ebcf016")), ... SPN="ldap/dc1.domain.local", ... ) ... ] ... ) ... ] >>> pkts = sniff(offline=scapy_path('test/pcaps/dcerpc_privacy_krb.pcapng.gz'), session=TCPSession) more Unknown RPC interface e3514235-4b06-11d1-ab04-00c04fc2dcd2. Try loading the IDL >>> pkts.show() 0000 Ether / IP / TCP 192.168.0.101:49700 > 192.168.0.100:epmap S 0001 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49700 SA 0002 Ether / IP / TCP 192.168.0.101:49700 > 192.168.0.100:epmap A 0003 Ether / IP / TCP 192.168.0.101:49700 > 192.168.0.100:epmap PA / DceRpc5 / DceRpc5Bind 0004 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49700 PA / DceRpc5 / DceRpc5BindAck 0005 Ether / IP / TCP 192.168.0.101:49700 > 192.168.0.100:epmap PA / DceRpc5 / DceRpc5Request / ept_map_Request 0006 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49700 PA / DceRpc5 / DceRpc5Response / ept_map_Response 0007 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 S 0008 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 SA 0009 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 A 0010 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Bind 0011 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 A 0012 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5BindAck 0013 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5AlterContext 0014 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5AlterContextResp 0015 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0016 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw 0017 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0018 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw 0019 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0020 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw 0021 Ether / IP / TCP 192.168.0.101:49700 > 192.168.0.100:epmap PA / DceRpc5 / DceRpc5Request / ept_map_Request 0022 Ether / IP / TCP 192.168.0.100:epmap > 192.168.0.101:49700 PA / DceRpc5 / DceRpc5Response / ept_map_Response 0023 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0024 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw 0025 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0026 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw 0027 Ether / IP / TCP 192.168.0.101:49701 > 192.168.0.100:49667 PA / DceRpc5 / DceRpc5Request / Raw 0028 Ether / IP / TCP 192.168.0.100:49667 > 192.168.0.101:49701 PA / DceRpc5 / DceRpc5Response / Raw >>> >>> conf.dcerpc_session_enable = False >>> >>> assert pkts[15].vt_trailer.commands[0].Command == 2 >>> assert pkts[15].load == b'\x00\x00\x02\x00\x00\x00\x00\x00\x1a M\xe2\xd6O\xd1\x11\xa3\xda\x00\x00\xf8u\xae\r\x00\x00\x02\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x004\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> assert pkts[21].obj.referent_id == 0x1 >>> assert pkts[21].map_tower.value.tower_octet_string == b'\x05\x00\x13\x00\r5BQ\xe3\x06K\xd1\x11\xab\x04\x00\xc0O\xc2\xdc\xd2\x04\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\x00\x87\x01\x00\t\x04\x00\x00\x00\x00\x00' >>> assert pkts[21].max_towers == 4 >>> >>> assert pkts[22].num_towers == 1 >>> assert pkts[22].ITowers.max_count == 4 >>> assert pkts[22][ept_map_Response].valueof("ITowers")[0].max_count == 75 >>> assert pkts[22][ept_map_Response].valueof("ITowers")[0].tower_length == 75 >>> assert pkts[22][ept_map_Response].valueof("ITowers")[0].tower_octet_string == b'\x05\x00\x13\x00\r5BQ\xe3\x06K\xd1\x11\xab\x04\x00\xc0O\xc2\xdc\xd2\x04\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\xc2\x03\x01\x00\t\x04\x00\xc0\xa8\x00d' ###### ## MS-RPC client and server ###### ###(042)=[passed] Functional: Define a MS-RPC server >>> from scapy.layers.dcerpc import * >>> from scapy.layers.msrpce.all import * >>> from scapy.layers.msrpce.raw.ms_wkst import * >>> >>> class MyRPCServer(DCERPC_Server): ... @DCERPC_Server.answer(NetrWkstaGetInfo_Request) ... def handle_NetrWkstaGetInfo(self, req): ... """ ... NetrWkstaGetInfo [MS-SRVS] ... "returns information about the configuration of a workstation." ... """ ... req = req[NetrWkstaGetInfo_Request] ... req.show() ... if req.Level != 0x00000064: ... return None ... return NetrWkstaGetInfo_Response( ... WkstaInfo=NDRUnion( ... tag=100, ... value=LPWKSTA_INFO_100( ... wki100_platform_id=500, # NT ... wki100_ver_major=5, ... wki100_computername=req.valueof("ServerName") + b"Server" ... ), ... ), ... ndr64=self.ndr64, ... ) ... @DCERPC_Server.answer(NetrEnumerateComputerNames_Request) ... def handle_NetrEnumerateComputerNames(self, req): ... """ ... NetrWkstaGetInfo [MS-SRVS] ... "returns information about the configuration of a workstation." ... """ ... req = req[NetrEnumerateComputerNames_Request] ... req.show() ... return NetrEnumerateComputerNames_Response( ... ComputerNames=PNET_COMPUTER_NAME_ARRAY( ... ComputerNames=[PUNICODE_STRING(Buffer=x) for x in ["Scapy", "Foo", "Bar"]] ... ), ... ndr64=self.ndr64, ... ) ... ###(043)=[passed] Functional: Define wrapper over samba's rpcclient >>> import subprocess >>> >>> TEMP_DIR = pathlib.Path(get_temp_dir()) >>> TEMP_DIR.chmod(0o0755) >>> print(TEMP_DIR) /tmp/scapym9kdtjhz >>> >>> LOGS_DIR = TEMP_DIR / "logs" >>> LOCK_DIR = TEMP_DIR / "lock" >>> PRIVATE_DIR = TEMP_DIR / "private" >>> PID_DIR = TEMP_DIR / "pid" >>> CACHE_DIR = TEMP_DIR / "cache" >>> STATE_DIRECTORY = TEMP_DIR / "state" >>> NCALRPC_DIR = TEMP_DIR / "ncalrpc" >>> >>> for dir in [LOGS_DIR, LOCK_DIR, PRIVATE_DIR, PID_DIR, CACHE_DIR, STATE_DIRECTORY, NCALRPC_DIR]: ... dir.mkdir() ... >>> SMBD_LOG = LOGS_DIR / "log.smbd" >>> SMBD_LOG.touch() >>> >>> CONF_FILE = get_temp_file(autoext=".conf") >>> CONF = """ ... ... [global] ... lock directory = %s ... private directory = %s ... cache directory = %s ... ncalrpc dir = %s ... pid directory = %s ... state directory = %s ... """ % ( ... LOCK_DIR, ... PRIVATE_DIR, ... CACHE_DIR, ... NCALRPC_DIR, ... PID_DIR, ... STATE_DIRECTORY, ... ) >>> >>> print(CONF) [global] lock directory = /tmp/scapym9kdtjhz/lock private directory = /tmp/scapym9kdtjhz/private cache directory = /tmp/scapym9kdtjhz/cache ncalrpc dir = /tmp/scapym9kdtjhz/ncalrpc pid directory = /tmp/scapym9kdtjhz/pid state directory = /tmp/scapym9kdtjhz/state >>> >>> with open(CONF_FILE, "w") as fd: ... fd.write(CONF) ... 283 >>> def run_rpcclient(transport, command, debug=False): ... args = [ ... "rpcclient", ... "-c", ... command, ... "%s:127.0.0.1[12345%s]" % ( ... transport, ... ",seal" ... if transport == "ncacn_ip_tcp" ... else "" ... ), ... "-p", "12345", ... "-U", "User", "--password", "Password", ... "--configfile", CONF_FILE, ... ] ... if debug: ... args += ["-d 5"] ... print(" ".join(args)) ... proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) ... return proc.communicate(timeout=10)[0] ... ###(044)=[passed] Functional: Start the MS-RPC server over NCACN_IP_TCP with NTLMSSP >>> ssp = NTLMSSP( ... UPN="User", ... HASHNT=MD4le("Password"), ... IDENTITIES={ ... "User": MD4le("Password"), ... }, ... ) >>> >>> rpcserver = MyRPCServer.spawn( ... DCERPC_Transport.NCACN_IP_TCP, ... iface=conf.loopback_name, ... ssp=ssp, ... port=12345, ... bg=True, ... ) Server MyRPCServer started. Waiting... ###(045)=[passed] Functional: Connect to it with DCERPC_Client over NCACN_IP_TCP with NTLMSSP >>> client = DCERPC_Client( ... DCERPC_Transport.NCACN_IP_TCP, ... auth_level=DCE_C_AUTHN_LEVEL.PKT_INTEGRITY, ... ssp=ssp, ... ndr64=False, ... ) >>> client.connect(get_if_addr(conf.loopback_name), port=12345) ┃ Connecting to 127.0.0.1 on port 12345 via ... └ Connected from ('127.0.0.1', 58714) >>> client.bind(find_dcerpc_interface("wkssvc")) >> DceRpc5Bind on (with NTLMSSP) ┃ Connection received from ('127.0.0.1', 58714) << DceRpc5Bind (with NTLMSSP) >> DceRpc5BindAck wkssvc is on port '12345' using NDR 2.0 << DceRpc5BindAck port '12345' using NDR32 True >>> >>> req = NetrWkstaGetInfo_Request( ... ServerName="Nice", ... Level=0x00000064, # WKSTA_INFO_100 ... ndr64=False ... ) >>> resp = client.sr1_req(req) >> REQUEST: NetrWkstaGetInfo_Request << DceRpc5Auth3 (with NTLMSSP - PKT_INTEGRITY) << REQUEST: NetrWkstaGetInfo_Request ###[ NetrWkstaGetInfo_Request ]### \ServerName\ |###[ NDRPointer ]### | referent_id= 0x20000 | \value \ | |###[ NDRConformantArray ]### | | max_count = 5 | | \value \ | | |###[ NDRVaryingArray ]### | | | offset = 0 | | | actual_count= 5 | | | value = b'Nice' Level = 100 >> RESPONSE: NetrWkstaGetInfo_Response << RESPONSE: NetrWkstaGetInfo_Response >>> >>> assert isinstance(resp.valueof("WkstaInfo"), LPWKSTA_INFO_100) >>> assert resp.valueof("WkstaInfo").valueof("wki100_computername") == b"NiceServer" ###(049)=[passed] Functional: Close the server >>> client.close() X Connection closed >>> try: ... rpcserver.shutdown(socket.SHUT_RDWR) ... except OSError: ... pass ... >>> rpcserver.close() X Server closed. ###(050)=[passed] Functional: Re-Start the same MS-RPC server over NCACN_IP_TCP with KerberosSSP Server SSP Client SSP >>> load_module("ticketer") >>> SRVKEY = Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("85abb9b61dc2fa49d4cc04317bbd108f8f79df28239155ed7b144c5d2ebcf016")) >>> >>> srvssp = KerberosSSP( ... KEY=SRVKEY, ... SPN="ldap/dc1.domain.local", ... ) >>> >>> t = Ticketer() >>> t.import_krb( ... KRB_Ticket(bytes.fromhex("618204ae308204aaa003020105a10e1b0c444f4d41494e2e4c4f43414ca2233021a003020103a11a30181b046c6461701b106463312e646f6d61696e2e6c6f63616ca382046c30820468a003020112a10302010ea282045a04820456280c76dee773a1c5e5bd966094201dc028c76f36bbcb9b04c6bb15e02893834f92c694b26bd627fb3f17c2b7eb3ccc57f926e28a9b578b75d1a179c2ce5cba08c67d6b8529f4988490a86a25ec181615e29a344df498ee5ab11a76ff34d862a09b457f6ed528aeb3ad7e7f075f5a02513830554d17edd00554c8f80bab69b80dec86a55111e7ac476d5f099f2ae374378f814a7b85d60f3ce3cff003ff82dd81a7a91a38ff79e5f51e8576de6aba5c86cc7ae2baf13038a8b4b554ff07b9873f19a0c682e83a57811475688e93b2ff53d232a037a19aab83d741204f088fb711c883ce66f4f989752b2c8b18b5cc3fffecbfd9076c25ee39cb13856c09e2ff4958c26e5ecade8c47a2adfd5ceab9d458617b6d3998dd8ee99d0eb57765d0976031a5eb618b076b1e3f6565b4370f238e8829b13deccf5ec35279946816969d5e307e33820f98efb6f601f79c16344d891a415babc6d4d01f992d15ebbf12fb5948cdbef6ed1ba2e5303ca2b0afd0ef1e5231458571bb2e7f463ce539faef5706ac1f8fb34668b6dff101c2fdb4f231fa75c24bb5aff7ee4349ce1948c42fdb91863772bd6c0dac26f47fe6ab1e617cdc85d9e015898fb5d6a0d8a38423c2ef49ec42e200f983fa45526b8cd205db3015e9d37de9cdd5b5befe519f22b7e65780f251215f3ca618f136f73200dd719c23dd3d4072b185e58628b2408377d688ab4540d1395af818a609d3f4df611483a77cd13511978eacf7acc91dd9740d97a9cbbb1299898219650d5ae0d3c0d0521e32132c889a65819ead424ec4f2be1d930f022f27b88078d301a1ce73070062ddf2259b839211e9f83d4585242328e310656f188f3f4cec5d5a61f08f9f0c2a15992a5aa65c4da838a5fd8df426fc4c7679d6af4a261d943a2501ba7221a0af1bc2db19bdfda44064efd94db45231b89035db904b3361afb0c0da0ab4c17857e86a820027f274e01a60388931520db0d667b5453e985152ebd382872122415ec13a88eaaf8522e18b54f580365742ce5884c5fe1d719b752788ff283725c446739686c9f76c850800016287f7cb85390c045fd250104d44f641d62ce1c7882bad72b574e10e1521d843938f30ab7064b007479f2bdc5e8d0aaf26b89993bf2c7c413aec8b8cad4c8d4714904125b868a807329d54674eff909a690bfd735d2c7134c9e819e48a66385a4d48d13ea710f45df9605d727a3d28e5bd09f7385bcab92bc1903ce888571309ffaf370024c5cc527730d256b20ba19511df8f0aa970b638a4393a45db03969b7415270887ef7ec94abbda98632a8d14b0d73f855e416e6d167269d04ec2489c843f11db04074c60c7ea9a13d2d1aca94379e84529bbd96a73f0cd6d8d9d85b5e06272e8739d0d2607d0b57b6e763118996aa8bf903bbaf4ce2ebc20b071e1dbbd48102634823059d4a37d73c054d0e066a09b6c53fe7319a7fcde0f4624461c8b584743d40dc334b34230d56c338bab40426ce7ade90f05a01cb0c0b8963860e4156831e8aecfb8721bf437ab71af74c426acfe7f9134163364a7ee2e")), ... key=SRVKEY, ... ) >>> clissp = t.ssp(0) >>> >>> rpcserver = MyRPCServer.spawn( ... DCERPC_Transport.NCACN_IP_TCP, ... iface=conf.loopback_name, ... ssp=srvssp, ... port=12345, ... bg=True, ... ) Server MyRPCServer started. Waiting... ###(051)=[passed] Functional: Connect to it with DCERPC_Client over NCACN_IP_TCP with KerberosSSP >>> client = DCERPC_Client( ... DCERPC_Transport.NCACN_IP_TCP, ... auth_level=DCE_C_AUTHN_LEVEL.PKT_INTEGRITY, ... ssp=clissp, ... ndr64=False, ... ) >>> client.connect(get_if_addr(conf.loopback_name), port=12345) ┃ Connecting to 127.0.0.1 on port 12345 via ... └ Connected from ('127.0.0.1', 58716) >>> client.bind(find_dcerpc_interface("wkssvc")) >> DceRpc5Bind on (with KerberosSSP) ┃ Connection received from ('127.0.0.1', 58716) << DceRpc5Bind (with KerberosSSP) >> DceRpc5BindAck wkssvc is on port '12345' using NDR 2.0 << DceRpc5AlterContext (with KerberosSSP - PKT_INTEGRITY) >> DceRpc5AlterContextResp wkssvc is on port '12345' using NDR 2.0 << DceRpc5AlterContextResp port '12345' using NDR32 True >>> >>> req = NetrWkstaGetInfo_Request( ... ServerName="Nice", ... Level=0x00000064, # WKSTA_INFO_100 ... ndr64=False ... ) >>> resp = client.sr1_req(req) >> REQUEST: NetrWkstaGetInfo_Request << REQUEST: NetrWkstaGetInfo_Request ###[ NetrWkstaGetInfo_Request ]### \ServerName\ |###[ NDRPointer ]### | referent_id= 0x20000 | \value \ | |###[ NDRConformantArray ]### | | max_count = 5 | | \value \ | | |###[ NDRVaryingArray ]### | | | offset = 0 | | | actual_count= 5 | | | value = b'Nice' Level = 100 >> RESPONSE: NetrWkstaGetInfo_Response << RESPONSE: NetrWkstaGetInfo_Response >>> >>> assert isinstance(resp.valueof("WkstaInfo"), LPWKSTA_INFO_100) >>> assert resp.valueof("WkstaInfo").valueof("wki100_computername") == b"NiceServer" ###(052)=[passed] Functional: Close the server >>> client.close() X Connection closed >>> try: ... rpcserver.shutdown(socket.SHUT_RDWR) ... except OSError: ... pass ... >>> rpcserver.close() X Server closed. ###(053)=[passed] Functional: Re-Start the same MS-RPC server over NCACN_NP >>> rpcserver = MyRPCServer.spawn( ... DCERPC_Transport.NCACN_NP, ... iface=conf.loopback_name, ... port=12345, ... bg=True, ... ) Server SMB_Server started listening on ('127.0.0.1', 12345) ###(054)=[passed] Functional: Connect to it with DCERPC_Client over NCACN_NP >>> client = DCERPC_Client( ... DCERPC_Transport.NCACN_NP, ... ndr64=False, ... ) >>> client.connect(get_if_addr(conf.loopback_name), port=12345) ┃ Connecting to 127.0.0.1 on port 12345 via ... └ Connected from ('127.0.0.1', 58726) ┃ Connection received from ('127.0.0.1', 58726) >>> client.open_smbpipe("wkssvc") > User authenticated as guest! > Tree Connect on: IPC$ > Opened: wkssvc >>> client.bind(find_dcerpc_interface("wkssvc")) >> DceRpc5Bind on << DceRpc5Bind >> DceRpc5BindAck wkssvc is on port '\\PIPE\\wkssvc' using NDR 2.0 << DceRpc5BindAck port '\\PIPE\\wkssvc' using NDR32 True >>> >>> req = NetrWkstaGetInfo_Request( ... ServerName="Nice", ... Level=0x00000064, # WKSTA_INFO_100 ... ndr64=False ... ) >>> resp = client.sr1_req(req) >> REQUEST: NetrWkstaGetInfo_Request << REQUEST: NetrWkstaGetInfo_Request ###[ NetrWkstaGetInfo_Request ]### \ServerName\ |###[ NDRPointer ]### | referent_id= 0x20000 | \value \ | |###[ NDRConformantArray ]### | | max_count = 5 | | \value \ | | |###[ NDRVaryingArray ]### | | | offset = 0 | | | actual_count= 5 | | | value = b'Nice' Level = 100 >> RESPONSE: NetrWkstaGetInfo_Response << RESPONSE: NetrWkstaGetInfo_Response >>> >>> client.close() X Connection closed >>> try: ... rpcserver.shutdown(socket.SHUT_RDWR) ... except OSError: ... pass ... >>> rpcserver.close() >>> >>> assert isinstance(resp.valueof("WkstaInfo"), LPWKSTA_INFO_100) >>> assert resp.valueof("WkstaInfo").valueof("wki100_computername") == b"NiceServer" X Server closed. ###(055)=[passed] Functional: Re-Start the same MS-RPC server over NCACN_NP with SPNEGOSSP+NTLMSSP >>> from scapy.layers.spnego import SPNEGOSSP >>> >>> ssp = SPNEGOSSP( ... [ ... NTLMSSP( ... UPN="User", ... HASHNT=MD4le("Password"), ... IDENTITIES={ ... "User": MD4le("Password"), ... } ... ) ... ] ... ) >>> >>> rpcserver = MyRPCServer.spawn( ... DCERPC_Transport.NCACN_NP, ... iface=conf.loopback_name, ... ssp=ssp, ... port=12345, ... bg=True, ... ) Server SMB_Server started listening on ('127.0.0.1', 12345) ###(056)=[passed] Functional: Connect to it with DCERPC_Client over NCACN_NP with NTLMSSP >>> client = DCERPC_Client( ... DCERPC_Transport.NCACN_NP, ... ssp=ssp, ... ndr64=False, ... ) >>> client.connect(get_if_addr(conf.loopback_name), port=12345, smb_kwargs={"debug": 5}) ┃ Connecting to 127.0.0.1 on port 12345 via ... └ Connected from ('127.0.0.1', 58740) ┃ Connection received from ('127.0.0.1', 58740) Starting control thread [tid=3950664512] Received command RUN ## state=[BEGIN] Trying Condition [continue_smb2] Condition [continue_smb2] not taken Trying Condition [send_negotiate] Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] Select on [, ] Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Trying Receive condition [receive_negotiate_response] Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Trying Condition [send_negotiate_smb2] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] Select on [, ] Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Trying Receive condition [receive_negotiate_response] Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Trying Condition [should_send_session_setup_request] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] Select on [, ] Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Trying Receive condition [receive_session_setup_response] Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Trying Condition [should_send_session_setup_request] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] Select on [, ] > User authenticated ! Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Trying Receive condition [receive_session_setup_response] Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Trying Condition [authenticated_post_actions] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] Trying Condition [start_smb_socket] Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] >>> client.open_smbpipe("wkssvc") Selected [] Looking at IOEVENT on smbpipe Trying I/O event [outgoing_data_received_smb] I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / Raw switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] > Tree Connect on: IPC$ Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Trying Receive condition [incoming_data_received_smb] Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] Selected [] Looking at IOEVENT on smbpipe Trying I/O event [outgoing_data_received_smb] I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / Raw switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] > Opened: wkssvc Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Trying Receive condition [incoming_data_received_smb] Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] >>> client.bind(find_dcerpc_interface("wkssvc")) >> DceRpc5Bind on (with SPNEGOSSP) Selected [] Looking at IOEVENT on smbpipe Trying I/O event [outgoing_data_received_smb] I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / Raw switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] << DceRpc5Bind >> DceRpc5BindAck wkssvc is on port '\\PIPE\\wkssvc' using NDR 2.0 Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Response Trying Receive condition [incoming_data_received_smb] Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] << DceRpc5BindAck port '\\PIPE\\wkssvc' using NDR32 True >>> >>> req = NetrWkstaGetInfo_Request( ... ServerName="Nice", ... Level=0x00000064, # WKSTA_INFO_100 ... ndr64=False ... ) >>> resp = client.sr1_req(req) >> REQUEST: NetrWkstaGetInfo_Request Selected [] Looking at IOEVENT on smbpipe Trying I/O event [outgoing_data_received_smb] I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / Raw switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] << REQUEST: NetrWkstaGetInfo_Request ###[ NetrWkstaGetInfo_Request ]### \ServerName\ |###[ NDRPointer ]### | referent_id= 0x20000 | \value \ | |###[ NDRConformantArray ]### | | max_count = 5 | | \value \ | | |###[ NDRVaryingArray ]### | | | offset = 0 | | | actual_count= 5 | | | value = b'Nice' Level = 100 >> RESPONSE: NetrWkstaGetInfo_Response Selected [] Looking at RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Response Trying Receive condition [incoming_data_received_smb] Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Select on [, , ] << RESPONSE: NetrWkstaGetInfo_Response >>> >>> assert isinstance(resp.valueof("WkstaInfo"), LPWKSTA_INFO_100) >>> assert resp.valueof("WkstaInfo").valueof("wki100_computername") == b"NiceServer" ###(057)=[passed] Functional: Connect to the server with samba's rpcclient over NCACN_NP with NTLMSSP >>> result = run_rpcclient("ncacn_np", "wkssvc_enumeratecomputernames") /usr/lib/python3.14/subprocess.py:277: ResourceWarning: unclosed file <_io.BufferedReader name=6> for inst in _active[:]: ResourceWarning: Enable tracemalloc to get the object allocation traceback /usr/lib/python3.14/subprocess.py:831: ResourceWarning: unclosed file <_io.BufferedReader name=7> _cleanup() ResourceWarning: Enable tracemalloc to get the object allocation traceback ┃ Connection received from ('127.0.0.1', 58746) > User authenticated ! > Tree Connect on: IPC$ > Opened: wkssvc << DceRpc5Bind >> DceRpc5BindAck wkssvc is on port '\\PIPE\\wkssvc' using NDR 2.0 << REQUEST: NetrEnumerateComputerNames_Request ###[ NetrEnumerateComputerNames_Request ]### \ServerName\ |###[ NDRPointer ]### | referent_id= 0x20000 | \value \ | |###[ NDRConformantArray ]### | | max_count = 10 | | \value \ | | |###[ NDRVaryingArray ]### | | | offset = 0 | | | actual_count= 10 | | | value = b'127.0.0.1' NameType = NetAllComputerNames Reserved = 0 >> RESPONSE: NetrEnumerateComputerNames_Response >>> print(result.decode()) name: 0 Scapy name: 1 Scapy name: 2 Scapy >>> assert b"Scapy" in result ###(058)=[passed] Functional: Close the server >>> client.close() X Connection closed Selected [] Looking at Received command STOP Stopping control thread (tid=3950664512) >>> try: ... rpcserver.shutdown(socket.SHUT_RDWR) ... except OSError: ... pass ... >>> rpcserver.close() X Server closed. ###### ## Cleanup ###### ###(059)=[passed] Restore conf.debug_dissector >>> conf.debug_dissector = old_debug_dissector DHCP regression tests for Scapy ━ Run at 04:11:33 from [test/scapy/layers/dhcp.uts] by UTscapy in 0.09184646606445312 └ Passed=7 └ Failed=0 ###### ## DHCP ###### ###(000)=[passed] BOOTP - misc >>> assert BOOTP().answers(BOOTP()) >>> assert BOOTP().hashret() == b"\x00\x00\x00\x00" >>> >>> import random >>> random.seed(0x2809) >>> o = str(RandDHCPOptions(size=1)) >>> assert o in [r"[('NIS_server', '215.226.221.106')]", r"[('tcp_keepalive_interval', 3853054080)]", r"[('tcp_keepalive_interval', 3853054080L)]"] ###(001)=[passed] DHCPOptionsField >>> value = [("hostname", "scapy")] >>> dhcpoptfield = DHCPOptionsField("options", "") >>> assert dhcpoptfield.i2repr("", value) == "[hostname='scapy']" >>> assert dhcpoptfield.i2repr("", ["opt", "opt2"]) == "[opt opt2]" >>> assert dhcpoptfield.i2m("", value) == b'\x0c\x05scapy' >>> assert dhcpoptfield.m2i("", b'\x0cunknown') == [b'\x0cunknown'] >>> assert dhcpoptfield.m2i("", b'\x0c\x05scapy') == [('hostname', b'scapy')] >>> >>> unknown_value_end = b"\xfe" + b"\xff"*257 >>> udof = DHCPOptionsField("options", unknown_value_end) >>> assert udof.m2i("", unknown_value_end) == [(254, b'\xff'*255), 'end'] >>> >>> unknown_value_pad = b"\xfe" + b"\xff"*256 + b"\x00" >>> udof = DHCPOptionsField("options", unknown_value_pad) >>> assert udof.m2i("", unknown_value_pad) == [(254, b'\xff'*255), 'pad'] ###(002)=[passed] DHCP - build >>> s = raw(IP(src="127.0.0.1")/UDP()/BOOTP(chaddr="00:01:02:03:04:05")/DHCP(options=[("message-type","discover"),"end"])) >>> assert s == b'E\x00\x01\x10\x00\x01\x00\x00@\x11{\xda\x7f\x00\x00\x01\x7f\x00\x00\x01\x00C\x00D\x00\xfc\x04}\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x01\xff' >>> >>> s2 = raw(IP(src="127.0.0.1")/UDP()/BOOTP(chaddr="05:04:03:02:01:00")/DHCP(options=[("param_req_list",[12,57,45,254]),("requested_addr", "192.168.0.1"),"end"])) >>> assert s2 == b'E\x00\x01\x19\x00\x01\x00\x00@\x11{\xd1\x7f\x00\x00\x01\x7f\x00\x00\x01\x00C\x00D\x01\x05\xd5\x83\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x04\x03\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc7\x04\x0c9-\xfe2\x04\xc0\xa8\x00\x01\xff' >>> >>> s3 = raw(IP(src="127.0.0.1")/UDP()/BOOTP(chaddr="05:04:03:02:01:00")/DHCP(options=[("time_zone",123),("uap-servers","www.example.com"),("netinfo-server-address","10.0.0.1"), ... ("ieee802-3-encapsulation", 2),("max_dgram_reass_size", 120), ("pxelinux_path_prefix","/some/path"), "end"])) >>> assert s3 == b'E\x00\x01=\x00\x01\x00\x00@\x11{\xad\x7f\x00\x00\x01\x7f\x00\x00\x01\x00C\x00D\x01)\xa1\x01\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x04\x03\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc\x02\x04\x00\x00\x00{b\x0fwww.example.comp\x04\n\x00\x00\x01$\x01\x02\x16\x02\x00x\xd2\n/some/path\xff' >>> >>> s4 = raw(IP(src="127.0.0.1")/UDP()/BOOTP(chaddr="00:01:02:03:04:05")/DHCP(options=[("mud-url", "https://example.org"), ("captive-portal", "https://example.com"), ("ipv6-only-preferred", 0xffffffff), "end"])) >>> assert s4 == b'E\x00\x01=\x00\x01\x00\x00@\x11{\xad\x7f\x00\x00\x01\x7f\x00\x00\x01\x00C\x00D\x01)\xeai\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc\xa1\x13https://example.orgr\x13https://example.coml\x04\xff\xff\xff\xff\xff' >>> >>> s5 = raw(IP(src="127.0.0.1")/UDP()/BOOTP(chaddr="00:01:02:03:04:05")/DHCP(options=[("classless_static_routes", "192.168.123.4/32:10.0.0.1", "169.254.254.0/24:10.0.1.2"), ("rapid_commit", b""), ("forcerenew_nonce_capable", [1, "HMAC-MD5"]), "end"])) >>> assert s5 == b'E\x00\x01&\x00\x01\x00\x00@\x11{\xc4\x7f\x00\x00\x01\x7f\x00\x00\x01\x00C\x00D\x01\x12D\xf6\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Scy\x11 \xc0\xa8{\x04\n\x00\x00\x01\x18\xa9\xfe\xfe\n\x00\x01\x02P\x00\x91\x02\x01\x01\xff' ###(003)=[passed] DHCP - fuzz >>> pkt = fuzz(DHCP()) >>> assert isinstance(pkt.options, RandDHCPOptions) >>> pkt = DHCP(bytes(pkt)) >>> pkt.show() ###[ DHCP options ]### options = [perform-mask-discovery=207 path-mtu-plateau-table=34700 classless_static_routes=['152.83.8.0/18:33.232.19.8', '53.48.56.0/20:172.11.197.68', '242.208.12.0/22:220.96.187.11', '148.10.0.0/15:232.251.146.25'] WWW_server=197.22.36.153 static-routes=149.13.59.50 sip_ua_service_domains=b'\r\x90\xa9>\x06\x93\x15\xf5\xe4B\xce\xbc#\xf2\x890\xb3\xf6\xaf\xf4\xcf\x9bG\x15\x13\xc7WB\xcb6\x9e\xc5/xz\xe2\xd8\x08\xdf#\xf3o\xd5\xbb@\xb0LrSk\',\xd6\x04\xc1\x0e\x82\xf6\x19\xc0\xf4\xebv\x1bT\x14\x9c\xbe\xec\xf9\xc2\x9bwjdpN_@:\xa9\xbd\xd4>\xbf_\xb2\x99\xed\x05\x92\xdd\xdd3\xd4\x87\xcc\xf9\xe5\xf2\xb4\x04\xc7HN"\xdf6M\xbf\xc4\x88\x89\xda\x06`\x97=Mk\x8f\x05\x90\xd1\xe5\x06\xfc6\xe4\xc3\xcc\xddkI4\x07Y\x05\x91&\x11B\x9c:>\xcf\xf0\xe9\x1f\xa4\xcf\xb9\xa2\x12\xb9\xe9\xf7Q\xaf+\x14\x8c\x1buR\x13\x11\x19\xaf\xc1\xb9' IRC_server=96.188.165.185 StreetTalk_server=227.126.228.21 broadcast_address=186.119.81.4 time_server=206.243.199.87 domain=b'\xf95j\x8a\xdf\xbfO\x86\x06R\x92D\xe7\xb3\xbb\t\xabinU\x8b\xeb\x17\xb2\xabcT\xef\x14Tk\t[\xfc\x03\xb2\xd6P\n\x93\x88f\xf4\x81\x07(\x85am\xb5\xe5Z\xea\x887\xda\xef\xdckd)\xb6I\xb9L\xcaZ\xfe\xbf\xcb\xcd\xd0\xfe\x14\xd8\x8d\x1d\r\xe4\xd9Yww\xfd4\xc8\x15g\xd2\xa4\xb5Vce\xc0G/\x8e\xb3\xa0\xebdI\xa9\xf5\xea\xea\x85\xff\x0f\xf1s\xf4`\xf6F\xcf\xc4\xf5/J=b\xfcd\x06~@!"0.\xe5U\x134\x9ag"\x17\xe2\x01UA\x0b\xbf\xa55BVl\x8e\xa9\x19\x00\x9a\xd1\x01\xa8\x00\xf1\x9b\x91\xc9\xa9\x07k\xbf\xfa1\x8c9s_x\x97A\xef>+a\x98\xe9A\xea\x1c}\x1aG\xb3\xed\x8cm\x85^[\x8bE\x04-\xf2]U\x11\xae?\xa5' mobile-ip-home-agent=246.158.85.237 domain=b'_g{[\xf8\xe8\xac%\xa3\x12\xbc8W\xa7\xbe\x15\x08\xd1t\x8a\x8f\x9e\x1a\xb1\xb8W\xe7.s\xb8\xb3\xba\x80x\xe4n\x13\x99|J\x80\xb77' user_class=b'u\xc9(\x84S5\xa5\x9f\xa1\x89J\xa9\x81!\n0\x9f\xafBc\xb0\xf1\x9a \xffr\xc2\xb0q\xfc\x00H\xa3\xe9\xd2\xe8\x90\x9a+\xda\xe1\xfe\xca\xda\x01Y(,0y\xf2\x0c4\x1a\xcbsV\x01-\xfd\xdb\xce\xd6\xf5:\xc6\x8af\x99\t\xc9\xc63\xd1\xb84\xb4\xb1\xf6Ox5\xfb\x13\x1f9\x90\xa4\xf9\xeb\xb8F^\xbe\xd0(M\xfd2\xf9)\xcf\xe4$_\xb0(1b\xef\x8f\xeb\xa5;(\x0bJ>> p = IP(s) >>> assert DHCP in p and p[DHCP].options[0] == ('message-type', 1) >>> >>> p2 = IP(s2) >>> assert DHCP in p2 >>> assert p2[DHCP].options[0] == ("param_req_list",[12,57,45,254]) >>> assert p2[DHCP].options[1] == ("requested_addr", "192.168.0.1") >>> >>> p3 = IP(s3) >>> assert DHCP in p3 >>> assert p3[DHCP].options[0] == ("time_zone",123) >>> assert p3[DHCP].options[1] == ("uap-servers", b'www.example.com') >>> assert p3[DHCP].options[2] == ("netinfo-server-address", "10.0.0.1") >>> assert p3[DHCP].options[3] == ("ieee802-3-encapsulation", 2) >>> assert p3[DHCP].options[4] == ("max_dgram_reass_size", 120) >>> assert p3[DHCP].options[5] == ("pxelinux_path_prefix", b'/some/path') >>> assert p3[DHCP].options[6] == "end" >>> >>> p4 = IP(s4) >>> assert DHCP in p4 >>> assert p4[DHCP].options[0] == ("mud-url", b"https://example.org") >>> assert p4[DHCP].options[1] == ("captive-portal", b"https://example.com") >>> assert p4[DHCP].options[2] == ("ipv6-only-preferred", 0xffffffff) >>> >>> p5 = IP(s5) >>> assert DHCP in p5 >>> assert p5[DHCP].options[0] == ("classless_static_routes", ["192.168.123.4/32:10.0.0.1", "169.254.254.0/24:10.0.1.2"]) >>> assert p5[DHCP].options[1] == ("rapid_commit", b"") >>> assert p5[DHCP].options[2] == ("forcerenew_nonce_capable", [1, 1]) >>> >>> repr(DHCP(b"\x01\x00")) '\x1b[0m<\x1b[0m\x1b[31m\x1b[1mDHCP\x1b[0m \x1b[34moptions\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[..]\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m' >>> assert DHCP(b"\x01\x00").options == [b"\x01\x00"] >>> assert DHCP(b"\x28\x00").options == [("NIS_domain", b"")] >>> assert DHCP(b"\x37\x00").options == [("param_req_list", [])] >>> assert DHCP(b"\x50\x00").options == [("rapid_commit", b"")] >>> assert DHCP(b"\x79\x00").options == [("classless_static_routes", [])] >>> assert DHCP(b"\x91\x00").options == [("forcerenew_nonce_capable", [])] >>> assert DHCP(b"\x01\x0C\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b").options == [("subnet_mask", "0.1.2.3", "4.5.6.7", "8.9.10.11")] >>> >>> b = b"\x79\x01\xff" >>> p = DHCP(b) >>> assert p.options == [b] >>> p.clear_cache() >>> assert raw(p) == b >>> >>> b = b"\x79\x0a\x21\x01\x02\x03\x04\x05\x06\x07\x08\x09" >>> p = DHCP(b) >>> assert p.options == [b] >>> p.clear_cache() >>> assert raw(p) == b >>> >>> b = b"\x79\x09\x20\x01\x02\x03\x04\x05\x06\x07\x08\xff" >>> assert DHCP(b).options == [("classless_static_routes", ["1.2.3.4/32:5.6.7.8"]), "end"] ###(005)=[passed] DHCPOptions >>> assert DHCPOptions[33].name == "static-routes" >>> assert DHCPOptions[46].name == "NetBIOS_node_type" >>> assert DHCPRevOptions['static-routes'][0] == 33 ###(006)=[passed] Check that the dhcpd alias is properly defined and documented >>> assert dhcpd >>> import IPython >>> assert IPython.lib.pretty.pretty(dhcpd) == '' DHCPv6 regression tests for Scapy ━ Run at 04:11:33 from [test/scapy/layers/dhcp6.uts] by UTscapy in 0.6288175582885742 └ Passed=342 └ Failed=0 ###### ## Test DHCP6 DUID_LLT ###### ###(000)=[passed] DUID_LLT basic instantiation >>> a=DUID_LLT() ###(001)=[passed] DUID_LLT basic build >>> raw(DUID_LLT()) == b'\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(002)=[passed] DUID_LLT build with specific values >>> raw(DUID_LLT(lladdr="ff:ff:ff:ff:ff:ff", timeval=0x11111111, hwtype=0x2222)) == b'\x00\x01""\x11\x11\x11\x11\xff\xff\xff\xff\xff\xff' True ###(003)=[passed] DUID_LLT basic dissection >>> a=DUID_LLT(raw(DUID_LLT())) >>> a.type == 1 and a.hwtype == 1 and a.timeval == 0 and a.lladdr == "00:00:00:00:00:00" True ###(004)=[passed] DUID_LLT dissection with specific values >>> a=DUID_LLT(b'\x00\x01""\x11\x11\x11\x11\xff\xff\xff\xff\xff\xff') >>> a.type == 1 and a.hwtype == 0x2222 and a.timeval == 0x11111111 and a.lladdr == "ff:ff:ff:ff:ff:ff" True ###### ## Test DHCP6 DUID_EN ###### ###(005)=[passed] DUID_EN basic instantiation >>> a=DUID_EN() ###(006)=[passed] DUID_EN basic build >>> raw(DUID_EN()) == b'\x00\x02\x00\x00\x017' True ###(007)=[passed] DUID_EN build with specific values >>> raw(DUID_EN(enterprisenum=0x11111111, id="iamastring")) == b'\x00\x02\x11\x11\x11\x11iamastring' True ###(008)=[passed] DUID_EN basic dissection >>> a=DUID_EN(b'\x00\x02\x00\x00\x017') >>> a.type == 2 and a.enterprisenum == 311 True ###(009)=[passed] DUID_EN dissection with specific values >>> a=DUID_EN(b'\x00\x02\x11\x11\x11\x11iamarawing') >>> a.type == 2 and a.enterprisenum == 0x11111111 and a.id == b"iamarawing" True ###### ## Test DHCP6 DUID_LL ###### ###(010)=[passed] DUID_LL basic instantiation >>> a=DUID_LL() ###(011)=[passed] DUID_LL basic build >>> raw(DUID_LL()) == b'\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00' True ###(012)=[passed] DUID_LL build with specific values >>> raw(DUID_LL(hwtype=1, lladdr="ff:ff:ff:ff:ff:ff")) == b'\x00\x03\x00\x01\xff\xff\xff\xff\xff\xff' True ###(013)=[passed] DUID_LL basic dissection >>> a=DUID_LL(raw(DUID_LL())) >>> a.type == 3 and a.hwtype == 1 and a.lladdr == "00:00:00:00:00:00" True ###(014)=[passed] DUID_LL with specific values >>> a=DUID_LL(b'\x00\x03\x00\x01\xff\xff\xff\xff\xff\xff') >>> a.hwtype == 1 and a.lladdr == "ff:ff:ff:ff:ff:ff" True ###### ## Test DHCP6 DUID_UUID ###### ###(015)=[passed] DUID_UUID basic instantiation >>> a=DUID_UUID() ###(016)=[passed] DUID_UUID basic build >>> raw(DUID_UUID()) == b"\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" True ###(017)=[passed] DUID_UUID build with specific values >>> raw(DUID_UUID(uuid="272adcca-138c-4e8d-b3f4-634e953128cf")) == \ ... b"\x00\x04'*\xdc\xca\x13\x8cN\x8d\xb3\xf4cN\x951(\xcf" True ###(018)=[passed] DUID_UUID basic dissection >>> a=DUID_UUID(raw(DUID_UUID())) >>> a.type == 4 and str(a.uuid) == "00000000-0000-0000-0000-000000000000" True ###(019)=[passed] DUID_UUID with specific values >>> a=DUID_UUID(b"\x00\x04'*\xdc\xca\x13\x8cN\x8d\xb3\xf4cN\x951(\xcf") >>> a.type == 4 and str(a.uuid) == "272adcca-138c-4e8d-b3f4-634e953128cf" True ###### ## Test DHCP6 Opt Unknown ###### ###(020)=[passed] DHCP6 Opt Unknown basic instantiation >>> a=DHCP6OptUnknown() ###(021)=[passed] DHCP6 Opt Unknown basic build (default values) >>> raw(DHCP6OptUnknown()) == b'\x00\x00\x00\x00' True ###(022)=[passed] DHCP6 Opt Unknown - len computation test >>> raw(DHCP6OptUnknown(data="shouldbe9")) == b'\x00\x00\x00\tshouldbe9' True ###### ## Test DHCP6 Client Identifier option ###### ###(023)=[passed] DHCP6OptClientId basic instantiation >>> a=DHCP6OptClientId() ###(024)=[passed] DHCP6OptClientId basic build >>> raw(DHCP6OptClientId()) == b'\x00\x01\x00\x00' True ###(025)=[passed] DHCP6OptClientId instantiation with specific values >>> raw(DHCP6OptClientId(duid="toto")) == b'\x00\x01\x00\x04toto' True ###(026)=[passed] DHCP6OptClientId instantiation with DUID_LL >>> raw(DHCP6OptClientId(duid=DUID_LL())) == b'\x00\x01\x00\n\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00' True ###(027)=[passed] DHCP6OptClientId instantiation with DUID_LLT >>> raw(DHCP6OptClientId(duid=DUID_LLT())) == b'\x00\x01\x00\x0e\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(028)=[passed] DHCP6OptClientId instantiation with DUID_EN >>> raw(DHCP6OptClientId(duid=DUID_EN())) == b'\x00\x01\x00\x06\x00\x02\x00\x00\x017' True ###(029)=[passed] DHCP6OptClientId instantiation with specified length >>> raw(DHCP6OptClientId(optlen=80, duid="somestring")) == b'\x00\x01\x00Psomestring' True ###(030)=[passed] DHCP6OptClientId basic dissection >>> a=DHCP6OptClientId(b'\x00\x01\x00\x00') >>> a.optcode == 1 and a.optlen == 0 True ###(031)=[passed] DHCP6OptClientId instantiation with specified length >>> raw(DHCP6OptClientId(optlen=80, duid="somestring")) == b'\x00\x01\x00Psomestring' True ###(032)=[passed] DHCP6OptClientId basic dissection >>> a=DHCP6OptClientId(b'\x00\x01\x00\x00') >>> a.optcode == 1 and a.optlen == 0 True ###(033)=[passed] DHCP6OptClientId dissection with specific duid value >>> a=DHCP6OptClientId(b'\x00\x01\x00\x04somerawing') >>> a.optcode == 1 and a.optlen == 4 and isinstance(a.duid, Raw) and a.duid.load == b'some' and isinstance(a.payload, DHCP6OptUnknown) True ###(034)=[passed] DHCP6OptClientId dissection with specific DUID_LL as duid value >>> a=DHCP6OptClientId(b'\x00\x01\x00\n\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00') >>> a.optcode == 1 and a.optlen == 10 and isinstance(a.duid, DUID_LL) and a.duid.type == 3 and a.duid.hwtype == 1 and a.duid.lladdr == "00:00:00:00:00:00" True ###(035)=[passed] DHCP6OptClientId dissection with specific DUID_LLT as duid value >>> a=DHCP6OptClientId(b'\x00\x01\x00\x0e\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 1 and a.optlen == 14 and isinstance(a.duid, DUID_LLT) and a.duid.type == 1 and a.duid.hwtype == 1 and a.duid.timeval == 0 and a.duid.lladdr == "00:00:00:00:00:00" True ###(036)=[passed] DHCP6OptClientId dissection with specific DUID_EN as duid value >>> a=DHCP6OptClientId(b'\x00\x01\x00\x06\x00\x02\x00\x00\x017') >>> a.optcode == 1 and a.optlen == 6 and isinstance(a.duid, DUID_EN) and a.duid.type == 2 and a.duid.enterprisenum == 311 and a.duid.id == b"" True ###### ## Test DHCP6 Server Identifier option ###### ###(037)=[passed] DHCP6OptServerId basic instantiation >>> a=DHCP6OptServerId() ###(038)=[passed] DHCP6OptServerId basic build >>> raw(DHCP6OptServerId()) == b'\x00\x02\x00\x00' True ###(039)=[passed] DHCP6OptServerId basic build with specific values >>> raw(DHCP6OptServerId(duid="toto")) == b'\x00\x02\x00\x04toto' True ###(040)=[passed] DHCP6OptServerId instantiation with DUID_LL >>> raw(DHCP6OptServerId(duid=DUID_LL())) == b'\x00\x02\x00\n\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00' True ###(041)=[passed] DHCP6OptServerId instantiation with DUID_LLT >>> raw(DHCP6OptServerId(duid=DUID_LLT())) == b'\x00\x02\x00\x0e\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(042)=[passed] DHCP6OptServerId instantiation with DUID_EN >>> raw(DHCP6OptServerId(duid=DUID_EN())) == b'\x00\x02\x00\x06\x00\x02\x00\x00\x017' True ###(043)=[passed] DHCP6OptServerId instantiation with specified length >>> raw(DHCP6OptServerId(optlen=80, duid="somestring")) == b'\x00\x02\x00Psomestring' True ###(044)=[passed] DHCP6OptServerId basic dissection >>> a=DHCP6OptServerId(b'\x00\x02\x00\x00') >>> a.optcode == 2 and a.optlen == 0 True ###(045)=[passed] DHCP6OptServerId dissection with specific duid value >>> a=DHCP6OptServerId(b'\x00\x02\x00\x04somerawing') >>> a.optcode == 2 and a.optlen == 4 and isinstance(a.duid, Raw) and a.duid.load == b'some' and isinstance(a.payload, DHCP6OptUnknown) True ###(046)=[passed] DHCP6OptServerId dissection with specific DUID_LL as duid value >>> a=DHCP6OptServerId(b'\x00\x02\x00\n\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00') >>> a.optcode == 2 and a.optlen == 10 and isinstance(a.duid, DUID_LL) and a.duid.type == 3 and a.duid.hwtype == 1 and a.duid.lladdr == "00:00:00:00:00:00" True ###(047)=[passed] DHCP6OptServerId dissection with specific DUID_LLT as duid value >>> a=DHCP6OptServerId(b'\x00\x02\x00\x0e\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 2 and a.optlen == 14 and isinstance(a.duid, DUID_LLT) and a.duid.type == 1 and a.duid.hwtype == 1 and a.duid.timeval == 0 and a.duid.lladdr == "00:00:00:00:00:00" True ###(048)=[passed] DHCP6OptServerId dissection with specific DUID_EN as duid value >>> a=DHCP6OptServerId(b'\x00\x02\x00\x06\x00\x02\x00\x00\x017') >>> a.optcode == 2 and a.optlen == 6 and isinstance(a.duid, DUID_EN) and a.duid.type == 2 and a.duid.enterprisenum == 311 and a.duid.id == b"" True ###### ## Test DHCP6 IA Address Option (IA_TA or IA_NA suboption) ###### ###(049)=[passed] DHCP6OptIAAddress - Basic Instantiation >>> raw(DHCP6OptIAAddress()) == b'\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(050)=[passed] DHCP6OptIAAddress - Basic Dissection >>> a = DHCP6OptIAAddress(b'\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 5 and a.optlen == 24 and a.addr == "::" and a.preflft == 0 and a. validlft == 0 and a.iaaddropts == [] True ###(051)=[passed] DHCP6OptIAAddress - Instantiation with specific values >>> raw(DHCP6OptIAAddress(optlen=0x1111, addr="2222:3333::5555", preflft=0x66666666, validlft=0x77777777, iaaddropts="somestring")) == b'\x00\x05\x11\x11""33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUffffwwwwsomestring' True ###(052)=[passed] DHCP6OptIAAddress - Instantiation with specific values (default optlen computation) >>> raw(DHCP6OptIAAddress(addr="2222:3333::5555", preflft=0x66666666, validlft=0x77777777, iaaddropts="somestring")) == b'\x00\x05\x00"""33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUffffwwwwsomestring' True ###(053)=[passed] DHCP6OptIAAddress - Dissection with specific values >>> a = DHCP6OptIAAddress(b'\x00\x05\x00"""33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUffffwwwwsomerawing') >>> a.optcode == 5 and a.optlen == 34 and a.addr == "2222:3333::5555" and a.preflft == 0x66666666 and a. validlft == 0x77777777 and a.iaaddropts[0].load == b"somerawing" True ###### ## Test DHCP6 Identity Association for Non-temporary Addresses Option ###### ###(054)=[passed] DHCP6OptIA_NA - Basic Instantiation >>> raw(DHCP6OptIA_NA()) == b'\x00\x03\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(055)=[passed] DHCP6OptIA_NA - Basic Dissection >>> a = DHCP6OptIA_NA(b'\x00\x03\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 3 and a.optlen == 12 and a.iaid == 0 and a.T1 == 0 and a.T2==0 and a.ianaopts == [] True ###(056)=[passed] DHCP6OptIA_NA - Instantiation with specific values (keep automatic length computation) >>> raw(DHCP6OptIA_NA(iaid=0x22222222, T1=0x33333333, T2=0x44444444)) == b'\x00\x03\x00\x0c""""3333DDDD' True ###(057)=[passed] DHCP6OptIA_NA - Instantiation with specific values (forced optlen) >>> raw(DHCP6OptIA_NA(optlen=0x1111, iaid=0x22222222, T1=0x33333333, T2=0x44444444)) == b'\x00\x03\x11\x11""""3333DDDD' True ###(058)=[passed] DHCP6OptIA_NA - Instantiation with a list of IA Addresses (optlen automatic computation) >>> raw(DHCP6OptIA_NA(iaid=0x22222222, T1=0x33333333, T2=0x44444444, ianaopts=[DHCP6OptIAAddress(), DHCP6OptIAAddress()])) == b'\x00\x03\x00D""""3333DDDD\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(059)=[passed] DHCP6OptIA_NA - Dissection with specific values >>> a = DHCP6OptIA_NA(b'\x00\x03\x00L""""3333DDDD\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 3 and a.optlen == 76 and a.iaid == 0x22222222 and a.T1 == 0x33333333 and a.T2==0x44444444 and len(a.ianaopts) == 2 and isinstance(a.ianaopts[0], DHCP6OptIAAddress) and isinstance(a.ianaopts[1], DHCP6OptIAAddress) True ###(060)=[passed] DHCP6OptIA_NA - Instantiation with a list of different opts: IA Address and Status Code (optlen automatic computation) >>> raw(DHCP6OptIA_NA(iaid=0x22222222, T1=0x33333333, T2=0x44444444, ianaopts=[DHCP6OptIAAddress(), DHCP6OptStatusCode(statuscode=0xff, statusmsg="Hello")])) == b'\x00\x03\x003""""3333DDDD\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x07\x00\xffHello' True ###### ## Test DHCP6 Identity Association for Temporary Addresses Option ###### ###(061)=[passed] DHCP6OptIA_TA - Basic Instantiation >>> raw(DHCP6OptIA_TA()) == b'\x00\x04\x00\x04\x00\x00\x00\x00' True ###(062)=[passed] DHCP6OptIA_TA - Basic Dissection >>> a = DHCP6OptIA_TA(b'\x00\x04\x00\x04\x00\x00\x00\x00') >>> a.optcode == 4 and a.optlen == 4 and a.iaid == 0 and a.iataopts == [] True ###(063)=[passed] DHCP6OptIA_TA - Instantiation with specific values >>> raw(DHCP6OptIA_TA(optlen=0x1111, iaid=0x22222222, iataopts=[DHCP6OptIAAddress(), DHCP6OptIAAddress()])) == b'\x00\x04\x11\x11""""\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(064)=[passed] DHCP6OptIA_TA - Dissection with specific values >>> a = DHCP6OptIA_TA(b'\x00\x04\x11\x11""""\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 4 and a.optlen == 0x1111 and a.iaid == 0x22222222 and len(a.iataopts) == 2 and isinstance(a.iataopts[0], DHCP6OptIAAddress) and isinstance(a.iataopts[1], DHCP6OptIAAddress) True ###(065)=[passed] DHCP6OptIA_TA - Instantiation with a list of different opts: IA Address and Status Code (optlen automatic computation) >>> raw(DHCP6OptIA_TA(iaid=0x22222222, iataopts=[DHCP6OptIAAddress(), DHCP6OptStatusCode(statuscode=0xff, statusmsg="Hello")])) == b'\x00\x04\x00+""""\x00\x05\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x07\x00\xffHello' True ###### ## Test DHCP6 Option Request Option ###### ###(066)=[passed] DHCP6OptOptReq - Basic Instantiation >>> raw(DHCP6OptOptReq()) == b'\x00\x06\x00\x04\x00\x17\x00\x18' True ###(067)=[passed] DHCP6OptOptReq - optlen field computation >>> raw(DHCP6OptOptReq(reqopts=[1,2,3,4])) == b'\x00\x06\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04' True ###(068)=[passed] DHCP6OptOptReq - instantiation with empty list >>> raw(DHCP6OptOptReq(reqopts=[])) == b'\x00\x06\x00\x00' True ###(069)=[passed] DHCP6OptOptReq - Basic dissection >>> a=DHCP6OptOptReq(b'\x00\x06\x00\x00') >>> a.optcode == 6 and a.optlen == 0 and a.reqopts == [] True ###(070)=[passed] DHCP6OptOptReq - Dissection with specific value >>> a=DHCP6OptOptReq(b'\x00\x06\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04') >>> a.optcode == 6 and a.optlen == 8 and a.reqopts == [1,2,3,4] True ###(071)=[passed] DHCP6OptOptReq - repr >>> a.show() ###[ DHCP6 Option Request Option ]### optcode = ORO optlen = 8 reqopts = [CLIENTID, SERVERID, IA_NA, IA_TA] ###### ## Test DHCP6 Option - Preference option ###### ###(072)=[passed] DHCP6OptPref - Basic instantiation >>> raw(DHCP6OptPref()) == b'\x00\x07\x00\x01\xff' True ###(073)=[passed] DHCP6OptPref - Instantiation with specific values >>> raw(DHCP6OptPref(optlen=0xffff, prefval= 0x11)) == b'\x00\x07\xff\xff\x11' True ###(074)=[passed] DHCP6OptPref - Basic Dissection >>> a=DHCP6OptPref(b'\x00\x07\x00\x01\xff') >>> a.optcode == 7 and a.optlen == 1 and a.prefval == 255 True ###(075)=[passed] DHCP6OptPref - Dissection with specific values >>> a=DHCP6OptPref(b'\x00\x07\xff\xff\x11') >>> a.optcode == 7 and a.optlen == 0xffff and a.prefval == 0x11 True ###### ## Test DHCP6 Option - Elapsed Time ###### ###(076)=[passed] DHCP6OptElapsedTime - Basic Instantiation >>> raw(DHCP6OptElapsedTime()) == b'\x00\x08\x00\x02\x00\x00' True ###(077)=[passed] DHCP6OptElapsedTime - Instantiation with specific elapsedtime value >>> raw(DHCP6OptElapsedTime(elapsedtime=421)) == b'\x00\x08\x00\x02\x01\xa5' True ###(078)=[passed] DHCP6OptElapsedTime - Basic Dissection >>> a=DHCP6OptElapsedTime(b'\x00\x08\x00\x02\x00\x00') >>> a.optcode == 8 and a.optlen == 2 and a.elapsedtime == 0 True ###(079)=[passed] DHCP6OptElapsedTime - Dissection with specific values >>> a=DHCP6OptElapsedTime(b'\x00\x08\x00\x02\x01\xa5') >>> a.optcode == 8 and a.optlen == 2 and a.elapsedtime == 421 True ###(080)=[passed] DHCP6OptElapsedTime - Repr >>> a.show() ###[ DHCP6 Elapsed Time Option ]### optcode = ELAPSED_TIME optlen = 2 elapsedtime= 4.21 sec ###### ## Test DHCP6 Option - Server Unicast Address ###### ###(081)=[passed] DHCP6OptServerUnicast - Basic Instantiation >>> raw(DHCP6OptServerUnicast()) == b'\x00\x0c\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(082)=[passed] DHCP6OptServerUnicast - Instantiation with specific values (test 1) >>> raw(DHCP6OptServerUnicast(srvaddr="2001::1")) == b'\x00\x0c\x00\x10 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(083)=[passed] DHCP6OptServerUnicast - Instantiation with specific values (test 2) >>> raw(DHCP6OptServerUnicast(srvaddr="2001::1", optlen=42)) == b'\x00\x0c\x00* \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(084)=[passed] DHCP6OptServerUnicast - Dissection with default values >>> a=DHCP6OptServerUnicast(b'\x00\x0c\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 12 and a.optlen == 16 and a.srvaddr == "::" True ###(085)=[passed] DHCP6OptServerUnicast - Dissection with specific values (test 1) >>> a=DHCP6OptServerUnicast(b'\x00\x0c\x00\x10 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 12 and a.optlen == 16 and a.srvaddr == "2001::1" True ###(086)=[passed] DHCP6OptServerUnicast - Dissection with specific values (test 2) >>> a=DHCP6OptServerUnicast(b'\x00\x0c\x00* \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 12 and a.optlen == 42 and a.srvaddr == "2001::1" True ###### ## Test DHCP6 Option - Status Code ###### ###(087)=[passed] DHCP6OptStatusCode - Basic Instantiation >>> raw(DHCP6OptStatusCode()) == b'\x00\r\x00\x02\x00\x00' True ###(088)=[passed] DHCP6OptStatusCode - Instantiation with specific values >>> raw(DHCP6OptStatusCode(optlen=42, statuscode=0xff, statusmsg="Hello")) == b'\x00\r\x00*\x00\xffHello' True ###(089)=[passed] DHCP6OptStatusCode - Automatic Length computation >>> raw(DHCP6OptStatusCode(statuscode=0xff, statusmsg="Hello")) == b'\x00\r\x00\x07\x00\xffHello' True ###### ## Test DHCP6 Option - Rapid Commit ###### ###(090)=[passed] DHCP6OptRapidCommit - Basic Instantiation >>> raw(DHCP6OptRapidCommit()) == b'\x00\x0e\x00\x00' True ###(091)=[passed] DHCP6OptRapidCommit - Basic Dissection >>> a=DHCP6OptRapidCommit(b'\x00\x0e\x00\x00') >>> a.optcode == 14 and a.optlen == 0 True ###### ## Test DHCP6 Option - User class ###### ###(092)=[passed] DHCP6OptUserClass - Basic Instantiation >>> raw(DHCP6OptUserClass()) == b'\x00\x0f\x00\x00' True ###(093)=[passed] DHCP6OptUserClass - Basic Dissection >>> a = DHCP6OptUserClass(b'\x00\x0f\x00\x00') >>> a.optcode == 15 and a.optlen == 0 and a.userclassdata == [] True ###(094)=[passed] DHCP6OptUserClass - Instantiation with one user class data rawucture >>> raw(DHCP6OptUserClass(userclassdata=[USER_CLASS_DATA(data="something")])) == b'\x00\x0f\x00\x0b\x00\tsomething' True ###(095)=[passed] DHCP6OptUserClass - Dissection with one user class data rawucture >>> a = DHCP6OptUserClass(b'\x00\x0f\x00\x0b\x00\tsomething') >>> a.optcode == 15 and a.optlen == 11 and len(a.userclassdata) == 1 and isinstance(a.userclassdata[0], USER_CLASS_DATA) and a.userclassdata[0].len == 9 and a.userclassdata[0].data == b'something' True ###(096)=[passed] DHCP6OptUserClass - Instantiation with two user class data rawuctures >>> raw(DHCP6OptUserClass(userclassdata=[USER_CLASS_DATA(data="something"), USER_CLASS_DATA(data="somethingelse")])) == b'\x00\x0f\x00\x1a\x00\tsomething\x00\rsomethingelse' True ###(097)=[passed] DHCP6OptUserClass - Dissection with two user class data rawuctures >>> a = DHCP6OptUserClass(b'\x00\x0f\x00\x1a\x00\tsomething\x00\rsomethingelse') >>> a.optcode == 15 and a.optlen == 26 and len(a.userclassdata) == 2 and isinstance(a.userclassdata[0], USER_CLASS_DATA) and isinstance(a.userclassdata[1], USER_CLASS_DATA) and a.userclassdata[0].len == 9 and a.userclassdata[0].data == b'something' and a.userclassdata[1].len == 13 and a.userclassdata[1].data == b'somethingelse' True ###### ## Test DHCP6 Option - Vendor class ###### ###(098)=[passed] DHCP6OptVendorClass - Basic Instantiation >>> raw(DHCP6OptVendorClass()) == b'\x00\x10\x00\x04\x00\x00\x00\x00' True ###(099)=[passed] DHCP6OptVendorClass - Basic Dissection >>> a = DHCP6OptVendorClass(b'\x00\x10\x00\x04\x00\x00\x00\x00') >>> a.optcode == 16 and a.optlen == 4 and a.enterprisenum == 0 and a.vcdata == [] True ###(100)=[passed] DHCP6OptVendorClass - Instantiation with one vendor class data rawucture >>> raw(DHCP6OptVendorClass(vcdata=[VENDOR_CLASS_DATA(data="something")])) == b'\x00\x10\x00\x0f\x00\x00\x00\x00\x00\tsomething' True ###(101)=[passed] DHCP6OptVendorClass - Dissection with one vendor class data rawucture >>> a = DHCP6OptVendorClass(b'\x00\x10\x00\x0f\x00\x00\x00\x00\x00\tsomething') >>> a.optcode == 16 and a.optlen == 15 and a.enterprisenum == 0 and len(a.vcdata) == 1 and isinstance(a.vcdata[0], VENDOR_CLASS_DATA) and a.vcdata[0].len == 9 and a.vcdata[0].data == b'something' True ###(102)=[passed] DHCP6OptVendorClass - Instantiation with two vendor class data rawuctures >>> raw(DHCP6OptVendorClass(vcdata=[VENDOR_CLASS_DATA(data="something"), VENDOR_CLASS_DATA(data="somethingelse")])) == b'\x00\x10\x00\x1e\x00\x00\x00\x00\x00\tsomething\x00\rsomethingelse' True ###(103)=[passed] DHCP6OptVendorClass - Dissection with two vendor class data rawuctures >>> a = DHCP6OptVendorClass(b'\x00\x10\x00\x1e\x00\x00\x00\x00\x00\tsomething\x00\rsomethingelse') >>> a.optcode == 16 and a.optlen == 30 and a.enterprisenum == 0 and len(a.vcdata) == 2 and isinstance(a.vcdata[0], VENDOR_CLASS_DATA) and isinstance(a.vcdata[1], VENDOR_CLASS_DATA) and a.vcdata[0].len == 9 and a.vcdata[0].data == b'something' and a.vcdata[1].len == 13 and a.vcdata[1].data == b'somethingelse' True ###### ## Test DHCP6 Option - Vendor-specific information ###### ###(104)=[passed] DHCP6OptVendorSpecificInfo - Basic Instantiation >>> raw(DHCP6OptVendorSpecificInfo()) == b'\x00\x11\x00\x04\x00\x00\x00\x00' True ###(105)=[passed] DHCP6OptVendorSpecificInfo - Basic Dissection >>> a = DHCP6OptVendorSpecificInfo(b'\x00\x11\x00\x04\x00\x00\x00\x00') >>> a.optcode == 17 and a.optlen == 4 and a.enterprisenum == 0 True ###(106)=[passed] DHCP6OptVendorSpecificInfo - Instantiation with specific values (one option) >>> raw(DHCP6OptVendorSpecificInfo(enterprisenum=0xeeeeeeee, vso=[VENDOR_SPECIFIC_OPTION(optcode=43, optdata="something")])) == b'\x00\x11\x00\x11\xee\xee\xee\xee\x00+\x00\tsomething' True ###(107)=[passed] DHCP6OptVendorSpecificInfo - Dissection with with specific values (one option) >>> a = DHCP6OptVendorSpecificInfo(b'\x00\x11\x00\x11\xee\xee\xee\xee\x00+\x00\tsomething') >>> a.optcode == 17 and a.optlen == 17 and a.enterprisenum == 0xeeeeeeee and len(a.vso) == 1 and isinstance(a.vso[0], VENDOR_SPECIFIC_OPTION) and a.vso[0].optlen == 9 and a.vso[0].optdata == b'something' True ###(108)=[passed] DHCP6OptVendorSpecificInfo - Instantiation with specific values (two options) >>> raw(DHCP6OptVendorSpecificInfo(enterprisenum=0xeeeeeeee, vso=[VENDOR_SPECIFIC_OPTION(optcode=43, optdata="something"), VENDOR_SPECIFIC_OPTION(optcode=42, optdata="somethingelse")])) == b'\x00\x11\x00"\xee\xee\xee\xee\x00+\x00\tsomething\x00*\x00\rsomethingelse' True ###(109)=[passed] DHCP6OptVendorSpecificInfo - Dissection with with specific values (two options) >>> a = DHCP6OptVendorSpecificInfo(b'\x00\x11\x00"\xee\xee\xee\xee\x00+\x00\tsomething\x00*\x00\rsomethingelse') >>> a.optcode == 17 and a.optlen == 34 and a.enterprisenum == 0xeeeeeeee and len(a.vso) == 2 and isinstance(a.vso[0], VENDOR_SPECIFIC_OPTION) and isinstance(a.vso[1], VENDOR_SPECIFIC_OPTION) and a.vso[0].optlen == 9 and a.vso[0].optdata == b'something' and a.vso[1].optlen == 13 and a.vso[1].optdata == b'somethingelse' True ###### ## Test DHCP6 Option - Interface-Id ###### ###(110)=[passed] DHCP6OptIfaceId - Basic Instantiation >>> raw(DHCP6OptIfaceId()) == b'\x00\x12\x00\x00' True ###(111)=[passed] DHCP6OptIfaceId - Basic Dissection >>> a = DHCP6OptIfaceId(b'\x00\x12\x00\x00') >>> a.optcode == 18 and a.optlen == 0 True ###(112)=[passed] DHCP6OptIfaceId - Instantiation with specific value >>> raw(DHCP6OptIfaceId(ifaceid="something")) == b'\x00\x12\x00\x09something' True ###(113)=[passed] DHCP6OptIfaceId - Dissection with specific value >>> a = DHCP6OptIfaceId(b'\x00\x12\x00\x09something') >>> a.optcode == 18 and a.optlen == 9 and a.ifaceid == b"something" True ###### ## Test DHCP6 Option - Reconfigure Message ###### ###(114)=[passed] DHCP6OptReconfMsg - Basic Instantiation >>> raw(DHCP6OptReconfMsg()) == b'\x00\x13\x00\x01\x0b' True ###(115)=[passed] DHCP6OptReconfMsg - Basic Dissection >>> a = DHCP6OptReconfMsg(b'\x00\x13\x00\x01\x0b') >>> a.optcode == 19 and a.optlen == 1 and a.msgtype == 11 True ###(116)=[passed] DHCP6OptReconfMsg - Instantiation with specific values >>> raw(DHCP6OptReconfMsg(optlen=4, msgtype=5)) == b'\x00\x13\x00\x04\x05' True ###(117)=[passed] DHCP6OptReconfMsg - Dissection with specific values >>> a = DHCP6OptReconfMsg(b'\x00\x13\x00\x04\x05') >>> a.optcode == 19 and a.optlen == 4 and a.msgtype == 5 True ###### ## Test DHCP6 Option - Reconfigure Accept ###### ###(118)=[passed] DHCP6OptReconfAccept - Basic Instantiation >>> raw(DHCP6OptReconfAccept()) == b'\x00\x14\x00\x00' True ###(119)=[passed] DHCP6OptReconfAccept - Basic Dissection >>> a = DHCP6OptReconfAccept(b'\x00\x14\x00\x00') >>> a.optcode == 20 and a.optlen == 0 True ###(120)=[passed] DHCP6OptReconfAccept - Instantiation with specific values >>> raw(DHCP6OptReconfAccept(optlen=23)) == b'\x00\x14\x00\x17' True ###(121)=[passed] DHCP6OptReconfAccept - Dssection with specific values >>> a = DHCP6OptReconfAccept(b'\x00\x14\x00\x17') >>> a.optcode == 20 and a.optlen == 23 True ###### ## Test DHCP6 Option - SIP Servers Domain Name List ###### ###(122)=[passed] DHCP6OptSIPDomains - Basic Instantiation >>> raw(DHCP6OptSIPDomains()) == b'\x00\x15\x00\x00' True ###(123)=[passed] DHCP6OptSIPDomains - Basic Dissection >>> a = DHCP6OptSIPDomains(b'\x00\x15\x00\x00') >>> a.optcode == 21 and a.optlen == 0 and a.sipdomains == [] True ###(124)=[passed] DHCP6OptSIPDomains - Instantiation with one domain >>> raw(DHCP6OptSIPDomains(sipdomains=["toto.example.org"])) == b'\x00\x15\x00\x12\x04toto\x07example\x03org\x00' True ###(125)=[passed] DHCP6OptSIPDomains - Dissection with one domain >>> a = DHCP6OptSIPDomains(b'\x00\x15\x00\x12\x04toto\x07example\x03org\x00') >>> a.optcode == 21 and a.optlen == 18 and len(a.sipdomains) == 1 and a.sipdomains[0] == "toto.example.org." True ###(126)=[passed] DHCP6OptSIPDomains - Instantiation with two domains >>> raw(DHCP6OptSIPDomains(sipdomains=["toto.example.org", "titi.example.org"])) == b'\x00\x15\x00$\x04toto\x07example\x03org\x00\x04titi\x07example\x03org\x00' True ###(127)=[passed] DHCP6OptSIPDomains - Dissection with two domains >>> a = DHCP6OptSIPDomains(b'\x00\x15\x00$\x04toto\x07example\x03org\x00\x04TITI\x07example\x03org\x00') >>> a.optcode == 21 and a.optlen == 36 and len(a.sipdomains) == 2 and a.sipdomains[0] == "toto.example.org." and a.sipdomains[1] == "TITI.example.org." True ###(128)=[passed] DHCP6OptSIPDomains - Enforcing only one dot at end of domain >>> raw(DHCP6OptSIPDomains(sipdomains=["toto.example.org."])) == b'\x00\x15\x00\x12\x04toto\x07example\x03org\x00' True ###### ## Test DHCP6 Option - SIP Servers IPv6 Address List ###### ###(129)=[passed] DHCP6OptSIPServers - Basic Instantiation >>> raw(DHCP6OptSIPServers()) == b'\x00\x16\x00\x00' True ###(130)=[passed] DHCP6OptSIPServers - Basic Dissection >>> a = DHCP6OptSIPServers(b'\x00\x16\x00\x00') >>> a.optcode == 22 and a. optlen == 0 and a.sipservers == [] True ###(131)=[passed] DHCP6OptSIPServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptSIPServers(sipservers = ["2001:db8::1"] )) == b'\x00\x16\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(132)=[passed] DHCP6OptSIPServers - Dissection with specific values (1 address) >>> a = DHCP6OptSIPServers(b'\x00\x16\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 22 and a.optlen == 16 and len(a.sipservers) == 1 and a.sipservers[0] == "2001:db8::1" True ###(133)=[passed] DHCP6OptSIPServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptSIPServers(sipservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00\x16\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(134)=[passed] DHCP6OptSIPServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptSIPServers(b'\x00\x16\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 22 and a.optlen == 32 and len(a.sipservers) == 2 and a.sipservers[0] == "2001:db8::1" and a.sipservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - DNS Recursive Name Server ###### ###(135)=[passed] DHCP6OptDNSServers - Basic Instantiation >>> raw(DHCP6OptDNSServers()) == b'\x00\x17\x00\x00' True ###(136)=[passed] DHCP6OptDNSServers - Basic Dissection >>> a = DHCP6OptDNSServers(b'\x00\x17\x00\x00') >>> a.optcode == 23 and a. optlen == 0 and a.dnsservers == [] True ###(137)=[passed] DHCP6OptDNSServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptDNSServers(dnsservers = ["2001:db8::1"] )) == b'\x00\x17\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(138)=[passed] DHCP6OptDNSServers - Dissection with specific values (1 address) >>> a = DHCP6OptDNSServers(b'\x00\x17\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 23 and a.optlen == 16 and len(a.dnsservers) == 1 and a.dnsservers[0] == "2001:db8::1" True ###(139)=[passed] DHCP6OptDNSServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptDNSServers(dnsservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00\x17\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(140)=[passed] DHCP6OptDNSServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptDNSServers(b'\x00\x17\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 23 and a.optlen == 32 and len(a.dnsservers) == 2 and a.dnsservers[0] == "2001:db8::1" and a.dnsservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - DNS Domain Search List Option ###### ###(141)=[passed] DHCP6OptDNSDomains - Basic Instantiation >>> raw(DHCP6OptDNSDomains()) == b'\x00\x18\x00\x00' True ###(142)=[passed] DHCP6OptDNSDomains - Basic Dissection >>> a = DHCP6OptDNSDomains(b'\x00\x18\x00\x00') >>> a.optcode == 24 and a.optlen == 0 and a.dnsdomains == [] True ###(143)=[passed] DHCP6OptDNSDomains - Instantiation with specific values (1 domain) >>> raw(DHCP6OptDNSDomains(dnsdomains=["toto.example.com."])) == b'\x00\x18\x00\x12\x04toto\x07example\x03com\x00' True ###(144)=[passed] DHCP6OptDNSDomains - Dissection with specific values (1 domain) >>> a = DHCP6OptDNSDomains(b'\x00\x18\x00\x12\x04toto\x07example\x03com\x00') >>> a.optcode == 24 and a.optlen == 18 and len(a.dnsdomains) == 1 and a.dnsdomains[0] == "toto.example.com." True ###(145)=[passed] DHCP6OptDNSDomains - Instantiation with specific values (2 domains) >>> raw(DHCP6OptDNSDomains(dnsdomains=["toto.example.com.", "titi.example.com."])) == b'\x00\x18\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00' True ###(146)=[passed] DHCP6OptDNSDomains - Dissection with specific values (2 domains) >>> a = DHCP6OptDNSDomains(b'\x00\x18\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00') >>> a.optcode == 24 and a.optlen == 36 and len(a.dnsdomains) == 2 and a.dnsdomains[0] == "toto.example.com." and a.dnsdomains[1] == "titi.example.com." True ###### ## Test DHCP6 Option - IA_PD Prefix Option ###### ###(147)=[passed] DHCP6OptIAPrefix - Basic Instantiation >>> raw(DHCP6OptIAPrefix()) == b'\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(148)=[passed] DHCP6OptIAPrefix - Basic Dissection >>> a = DHCP6OptIAPrefix(b'\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 26 and a.optlen == 25 and a.prefix == "2001:db8::" and a.plen == 48 and a.preflft == 0 and a. validlft == 0 and a.iaprefopts == [] True ###(149)=[passed] DHCP6OptIAPrefix - Instantiation with specific values >>> raw(DHCP6OptIAPrefix(optlen=0x1111, prefix="1111:2222:3333:4444::", plen=64, preflft=0x66666666, validlft=0x77777777, iaprefopts="somestring")) == b'\x00\x1a\x11\x11ffffwwww@\x11\x11""33DD\x00\x00\x00\x00\x00\x00\x00\x00somestring' True ###(150)=[passed] DHCP6OptIAPrefix - Instantiation with specific values (default optlen computation) >>> raw(DHCP6OptIAPrefix(prefix="1111:2222:3333:4444::", plen=64, preflft=0x66666666, validlft=0x77777777, iaprefopts="somestring")) == b'\x00\x1a\x00#ffffwwww@\x11\x11""33DD\x00\x00\x00\x00\x00\x00\x00\x00somestring' True ###(151)=[passed] DHCP6OptIAPrefix - Dissection with specific values >>> a = DHCP6OptIAPrefix(b'\x00\x1a\x00#ffffwwww@\x11\x11""33DD\x00\x00\x00\x00\x00\x00\x00\x00somerawing') >>> a.optcode == 26 and a.optlen == 35 and a.prefix == "1111:2222:3333:4444::" and a.plen == 64 and a.preflft == 0x66666666 and a.validlft == 0x77777777 and a.iaprefopts[0].load == b"somerawing" True ###### ## Test DHCP6 Option - Identity Association for Prefix Delegation ###### ###(152)=[passed] DHCP6OptIA_PD - Basic Instantiation >>> raw(DHCP6OptIA_PD()) == b'\x00\x19\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(153)=[passed] DHCP6OptIA_PD - Basic Dissection >>> a = DHCP6OptIA_PD(b'\x00\x19\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 25 and a.optlen == 12 and a.iaid == 0 and a.T1 == 0 and a.T2==0 and a.iapdopt == [] True ###(154)=[passed] DHCP6OptIA_PD - Instantiation with specific values (keep automatic length computation) >>> print(raw(DHCP6OptIA_PD(iaid=0x22222222, T1=0x33333333, T2=0x44444444))) b'\x00\x19\x00\x0c""""3333DDDD' >>> raw(DHCP6OptIA_PD(iaid=0x22222222, T1=0x33333333, T2=0x44444444)) == b'\x00\x19\x00\x0c""""3333DDDD' True ###(155)=[passed] DHCP6OptIA_PD - Instantiation with specific values (forced optlen) >>> raw(DHCP6OptIA_PD(optlen=0x1111, iaid=0x22222222, T1=0x33333333, T2=0x44444444)) == b'\x00\x19\x11\x11""""3333DDDD' True ###(156)=[passed] DHCP6OptIA_PD - Instantiation with a list of IA Prefixes (optlen automatic computation) >>> raw(DHCP6OptIA_PD(iaid=0x22222222, T1=0x33333333, T2=0x44444444, iapdopt=[DHCP6OptIAPrefix(), DHCP6OptIAPrefix()])) == b'\x00\x19\x00F""""3333DDDD\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(157)=[passed] DHCP6OptIA_PD - Dissection with specific values >>> a = DHCP6OptIA_PD(b'\x00\x19\x00N""""3333DDDD\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.optcode == 25 and a.optlen == 78 and a.iaid == 0x22222222 and a.T1 == 0x33333333 and a.T2==0x44444444 and len(a.iapdopt) == 2 and isinstance(a.iapdopt[0], DHCP6OptIAPrefix) and isinstance(a.iapdopt[1], DHCP6OptIAPrefix) True ###(158)=[passed] DHCP6OptIA_PD - Instantiation with a list of different opts: IA Prefix and Status Code (optlen automatic computation) >>> raw(DHCP6OptIA_PD(iaid=0x22222222, T1=0x33333333, T2=0x44444444, iapdopt=[DHCP6OptIAPrefix(), DHCP6OptStatusCode(statuscode=0xff, statusmsg="Hello")])) == b'\x00\x19\x004""""3333DDDD\x00\x1a\x00\x19\x00\x00\x00\x00\x00\x00\x00\x000 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x07\x00\xffHello' True ###### ## Test DHCP6 Option - NIS Servers ###### ###(159)=[passed] DHCP6OptNISServers - Basic Instantiation >>> raw(DHCP6OptNISServers()) == b'\x00\x1b\x00\x00' True ###(160)=[passed] DHCP6OptNISServers - Basic Dissection >>> a = DHCP6OptNISServers(b'\x00\x1b\x00\x00') >>> a.optcode == 27 and a. optlen == 0 and a.nisservers == [] True ###(161)=[passed] DHCP6OptNISServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptNISServers(nisservers = ["2001:db8::1"] )) == b'\x00\x1b\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(162)=[passed] DHCP6OptNISServers - Dissection with specific values (1 address) >>> a = DHCP6OptNISServers(b'\x00\x1b\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 27 and a.optlen == 16 and len(a.nisservers) == 1 and a.nisservers[0] == "2001:db8::1" True ###(163)=[passed] DHCP6OptNISServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptNISServers(nisservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00\x1b\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(164)=[passed] DHCP6OptNISServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptNISServers(b'\x00\x1b\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 27 and a.optlen == 32 and len(a.nisservers) == 2 and a.nisservers[0] == "2001:db8::1" and a.nisservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - NIS+ Servers ###### ###(165)=[passed] DHCP6OptNISPServers - Basic Instantiation >>> raw(DHCP6OptNISPServers()) == b'\x00\x1c\x00\x00' True ###(166)=[passed] DHCP6OptNISPServers - Basic Dissection >>> a = DHCP6OptNISPServers(b'\x00\x1c\x00\x00') >>> a.optcode == 28 and a. optlen == 0 and a.nispservers == [] True ###(167)=[passed] DHCP6OptNISPServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptNISPServers(nispservers = ["2001:db8::1"] )) == b'\x00\x1c\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(168)=[passed] DHCP6OptNISPServers - Dissection with specific values (1 address) >>> a = DHCP6OptNISPServers(b'\x00\x1c\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 28 and a.optlen == 16 and len(a.nispservers) == 1 and a.nispservers[0] == "2001:db8::1" True ###(169)=[passed] DHCP6OptNISPServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptNISPServers(nispservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00\x1c\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(170)=[passed] DHCP6OptNISPServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptNISPServers(b'\x00\x1c\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 28 and a.optlen == 32 and len(a.nispservers) == 2 and a.nispservers[0] == "2001:db8::1" and a.nispservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - NIS Domain Name ###### ###(171)=[passed] DHCP6OptNISDomain - Basic Instantiation >>> raw(DHCP6OptNISDomain()) == b'\x00\x1d\x00\x01\x00' True ###(172)=[passed] DHCP6OptNISDomain - Basic Dissection >>> a = DHCP6OptNISDomain(b'\x00\x1d\x00\x00') DNS RR prematured end (ofs=0, len=0) >>> a.optcode == 29 and a.optlen == 0 and a.nisdomain == b"." True ###(173)=[passed] DHCP6OptNISDomain - Instantiation with one domain name >>> raw(DHCP6OptNISDomain(nisdomain="toto.example.org")) == b'\x00\x1d\x00\x12\x04toto\x07example\x03org\x00' True ###(174)=[passed] DHCP6OptNISDomain - Dissection with one domain name >>> a = DHCP6OptNISDomain(b'\x00\x1d\x00\x11\x04toto\x07example\x03org\x00') DNS RR prematured end (ofs=17, len=17) >>> a.optcode == 29 and a.optlen == 17 and a.nisdomain == b"toto.example.org." True ###(175)=[passed] DHCP6OptNISDomain - Instantiation with one domain with trailing dot >>> raw(DHCP6OptNISDomain(nisdomain="toto.example.org.")) == b'\x00\x1d\x00\x12\x04toto\x07example\x03org\x00' True ###### ## Test DHCP6 Option - NIS+ Domain Name ###### ###(176)=[passed] DHCP6OptNISPDomain - Basic Instantiation >>> raw(DHCP6OptNISPDomain()) == b'\x00\x1e\x00\x01\x00' True ###(177)=[passed] DHCP6OptNISPDomain - Basic Dissection >>> a = DHCP6OptNISPDomain(b'\x00\x1e\x00\x00') DNS RR prematured end (ofs=0, len=0) >>> a.optcode == 30 and a.optlen == 0 and a.nispdomain == b"." True ###(178)=[passed] DHCP6OptNISPDomain - Instantiation with one domain name >>> raw(DHCP6OptNISPDomain(nispdomain="toto.example.org")) == b'\x00\x1e\x00\x12\x04toto\x07example\x03org\x00' True ###(179)=[passed] DHCP6OptNISPDomain - Dissection with one domain name >>> a = DHCP6OptNISPDomain(b'\x00\x1e\x00\x12\x04toto\x07example\x03org\x00') >>> a.optcode == 30 and a.optlen == 18 and a.nispdomain == b"toto.example.org." True ###(180)=[passed] DHCP6OptNISPDomain - Instantiation with one domain with trailing dot >>> raw(DHCP6OptNISPDomain(nispdomain="toto.example.org.")) == b'\x00\x1e\x00\x12\x04toto\x07example\x03org\x00' True ###### ## Test DHCP6 Option - SNTP Servers ###### ###(181)=[passed] DHCP6OptSNTPServers - Basic Instantiation >>> raw(DHCP6OptSNTPServers()) == b'\x00\x1f\x00\x00' True ###(182)=[passed] DHCP6OptSNTPServers - Basic Dissection >>> a = DHCP6OptSNTPServers(b'\x00\x1f\x00\x00') >>> a.optcode == 31 and a. optlen == 0 and a.sntpservers == [] True ###(183)=[passed] DHCP6OptSNTPServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptSNTPServers(sntpservers = ["2001:db8::1"] )) == b'\x00\x1f\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(184)=[passed] DHCP6OptSNTPServers - Dissection with specific values (1 address) >>> a = DHCP6OptSNTPServers(b'\x00\x1f\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 31 and a.optlen == 16 and len(a.sntpservers) == 1 and a.sntpservers[0] == "2001:db8::1" True ###(185)=[passed] DHCP6OptSNTPServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptSNTPServers(sntpservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00\x1f\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(186)=[passed] DHCP6OptSNTPServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptSNTPServers(b'\x00\x1f\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 31 and a.optlen == 32 and len(a.sntpservers) == 2 and a.sntpservers[0] == "2001:db8::1" and a.sntpservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - Information Refresh Time ###### ###(187)=[passed] DHCP6OptInfoRefreshTime - Basic Instantiation >>> raw(DHCP6OptInfoRefreshTime()) == b'\x00 \x00\x04\x00\x01Q\x80' True ###(188)=[passed] DHCP6OptInfoRefreshTime - Basic Dissction >>> a = DHCP6OptInfoRefreshTime(b'\x00 \x00\x04\x00\x01Q\x80') >>> a.optcode == 32 and a.optlen == 4 and a.reftime == 86400 True ###(189)=[passed] DHCP6OptInfoRefreshTime - Instantiation with specific values >>> raw(DHCP6OptInfoRefreshTime(optlen=7, reftime=42)) == b'\x00 \x00\x07\x00\x00\x00*' True ###### ## Test DHCP6 Option - BCMCS Servers ###### ###(190)=[passed] DHCP6OptBCMCSServers - Basic Instantiation >>> raw(DHCP6OptBCMCSServers()) == b'\x00"\x00\x00' True ###(191)=[passed] DHCP6OptBCMCSServers - Basic Dissection >>> a = DHCP6OptBCMCSServers(b'\x00"\x00\x00') >>> a.optcode == 34 and a. optlen == 0 and a.bcmcsservers == [] True ###(192)=[passed] DHCP6OptBCMCSServers - Instantiation with specific values (1 address) >>> raw(DHCP6OptBCMCSServers(bcmcsservers = ["2001:db8::1"] )) == b'\x00"\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(193)=[passed] DHCP6OptBCMCSServers - Dissection with specific values (1 address) >>> a = DHCP6OptBCMCSServers(b'\x00"\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 34 and a.optlen == 16 and len(a.bcmcsservers) == 1 and a.bcmcsservers[0] == "2001:db8::1" True ###(194)=[passed] DHCP6OptBCMCSServers - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptBCMCSServers(bcmcsservers = ["2001:db8::1", "2001:db8::2"] )) == b'\x00"\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(195)=[passed] DHCP6OptBCMCSServers - Dissection with specific values (2 addresses) >>> a = DHCP6OptBCMCSServers(b'\x00"\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 34 and a.optlen == 32 and len(a.bcmcsservers) == 2 and a.bcmcsservers[0] == "2001:db8::1" and a.bcmcsservers[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - BCMCS Domains ###### ###(196)=[passed] DHCP6OptBCMCSDomains - Basic Instantiation >>> raw(DHCP6OptBCMCSDomains()) == b'\x00!\x00\x00' True ###(197)=[passed] DHCP6OptBCMCSDomains - Basic Dissection >>> a = DHCP6OptBCMCSDomains(b'\x00!\x00\x00') >>> a.optcode == 33 and a.optlen == 0 and a.bcmcsdomains == [] True ###(198)=[passed] DHCP6OptBCMCSDomains - Instantiation with specific values (1 domain) >>> raw(DHCP6OptBCMCSDomains(bcmcsdomains=["toto.example.com."])) == b'\x00!\x00\x12\x04toto\x07example\x03com\x00' True ###(199)=[passed] DHCP6OptBCMCSDomains - Dissection with specific values (1 domain) >>> a = DHCP6OptBCMCSDomains(b'\x00!\x00\x12\x04toto\x07example\x03com\x00') >>> a.optcode == 33 and a.optlen == 18 and len(a.bcmcsdomains) == 1 and a.bcmcsdomains[0] == "toto.example.com." True ###(200)=[passed] DHCP6OptBCMCSDomains - Instantiation with specific values (2 domains) >>> raw(DHCP6OptBCMCSDomains(bcmcsdomains=["toto.example.com.", "titi.example.com."])) == b'\x00!\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00' True ###(201)=[passed] DHCP6OptBCMCSDomains - Dissection with specific values (2 domains) >>> a = DHCP6OptBCMCSDomains(b'\x00!\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00') >>> a.optcode == 33 and a.optlen == 36 and len(a.bcmcsdomains) == 2 and a.bcmcsdomains[0] == "toto.example.com." and a.bcmcsdomains[1] == "titi.example.com." True ###### ## Test DHCP6 Option - Relay Agent Remote-ID ###### ###(202)=[passed] DHCP6OptRemoteID - Basic Instantiation >>> raw(DHCP6OptRemoteID()) == b'\x00%\x00\x04\x00\x00\x00\x00' True ###(203)=[passed] DHCP6OptRemoteID - Basic Dissection >>> a = DHCP6OptRemoteID(b'\x00%\x00\x04\x00\x00\x00\x00') >>> a.optcode == 37 and a.optlen == 4 and a.enterprisenum == 0 and a.remoteid == b"" True ###(204)=[passed] DHCP6OptRemoteID - Instantiation with specific values >>> raw(DHCP6OptRemoteID(enterprisenum=0xeeeeeeee, remoteid="someid")) == b'\x00%\x00\n\xee\xee\xee\xeesomeid' True ###(205)=[passed] DHCP6OptRemoteID - Dissection with specific values >>> a = DHCP6OptRemoteID(b'\x00%\x00\n\xee\xee\xee\xeesomeid') >>> a.optcode == 37 and a.optlen == 10 and a.enterprisenum == 0xeeeeeeee and a.remoteid == b"someid" True ###### ## Test DHCP6 Option - Subscriber ID ###### ###(206)=[passed] DHCP6OptSubscriberID - Basic Instantiation >>> raw(DHCP6OptSubscriberID()) == b'\x00&\x00\x00' True ###(207)=[passed] DHCP6OptSubscriberID - Basic Dissection >>> a = DHCP6OptSubscriberID(b'\x00&\x00\x00') >>> a.optcode == 38 and a.optlen == 0 and a.subscriberid == b"" True ###(208)=[passed] DHCP6OptSubscriberID - Instantiation with specific values >>> raw(DHCP6OptSubscriberID(subscriberid="someid")) == b'\x00&\x00\x06someid' True ###(209)=[passed] DHCP6OptSubscriberID - Dissection with specific values >>> a = DHCP6OptSubscriberID(b'\x00&\x00\x06someid') >>> a.optcode == 38 and a.optlen == 6 and a.subscriberid == b"someid" True ###### ## Test DHCP6 Option - Client FQDN ###### ###(210)=[passed] DHCP6OptClientFQDN - Basic Instantiation >>> raw(DHCP6OptClientFQDN()) == b"\x00'\x00\x02\x00\x00" True ###(211)=[passed] DHCP6OptClientFQDN - Basic Dissection >>> a = DHCP6OptClientFQDN(b"\x00'\x00\x01\x00") DNS RR prematured end (ofs=0, len=0) >>> a.optcode == 39 and a.optlen == 1 and a.res == 0 and a.flags == 0 and a.fqdn == b"." True ###(212)=[passed] DHCP6OptClientFQDN - Instantiation with various flags combinations >>> raw(DHCP6OptClientFQDN(flags="S")) == b"\x00'\x00\x02\x01\x00" and raw(DHCP6OptClientFQDN(flags="O")) == b"\x00'\x00\x02\x02\x00" and raw(DHCP6OptClientFQDN(flags="N")) == b"\x00'\x00\x02\x04\x00" and raw(DHCP6OptClientFQDN(flags="SON")) == b"\x00'\x00\x02\x07\x00" and raw(DHCP6OptClientFQDN(flags="ON")) == b"\x00'\x00\x02\x06\x00" True ###(213)=[passed] DHCP6OptClientFQDN - Instantiation with one fqdn >>> raw(DHCP6OptClientFQDN(fqdn="toto.example.org")) == b"\x00'\x00\x13\x00\x04toto\x07example\x03org\x00" True ###(214)=[passed] DHCP6OptClientFQDN - Dissection with one fqdn >>> a = DHCP6OptClientFQDN(b"\x00'\x00\x12\x00\x04toto\x07example\x03org\x00") DNS RR prematured end (ofs=17, len=17) >>> a.optcode == 39 and a.optlen == 18 and a.res == 0 and a.flags == 0 and a.fqdn == b"toto.example.org." True ###### ## Test DHCP6 Option PANA Auth Agent ###### ###(215)=[passed] DHCP6OptPanaAuthAgent - Basic Instantiation >>> raw(DHCP6OptPanaAuthAgent()) == b'\x00(\x00\x00' True ###(216)=[passed] DHCP6OptPanaAuthAgent - Basic Dissection >>> a = DHCP6OptPanaAuthAgent(b"\x00(\x00\x00") >>> a.optcode == 40 and a.optlen == 0 and a.paaaddr == [] True ###(217)=[passed] DHCP6OptPanaAuthAgent - Instantiation with specific values (1 address) >>> raw(DHCP6OptPanaAuthAgent(paaaddr=["2001:db8::1"])) == b'\x00(\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(218)=[passed] DHCP6OptPanaAuthAgent - Dissection with specific values (1 address) >>> a = DHCP6OptPanaAuthAgent(b'\x00(\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 40 and a.optlen == 16 and len(a.paaaddr) == 1 and a.paaaddr[0] == "2001:db8::1" True ###(219)=[passed] DHCP6OptPanaAuthAgent - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptPanaAuthAgent(paaaddr=["2001:db8::1", "2001:db8::2"])) == b'\x00(\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(220)=[passed] DHCP6OptPanaAuthAgent - Dissection with specific values (2 addresses) >>> a = DHCP6OptPanaAuthAgent(b'\x00(\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 40 and a.optlen == 32 and len(a.paaaddr) == 2 and a.paaaddr[0] == "2001:db8::1" and a.paaaddr[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - New POSIX Time Zone ###### ###(221)=[passed] DHCP6OptNewPOSIXTimeZone - Basic Instantiation >>> raw(DHCP6OptNewPOSIXTimeZone()) == b'\x00)\x00\x00' True ###(222)=[passed] DHCP6OptNewPOSIXTimeZone - Basic Dissection >>> a = DHCP6OptNewPOSIXTimeZone(b'\x00)\x00\x00') >>> a.optcode == 41 and a.optlen == 0 and a.optdata == b"" True ###(223)=[passed] DHCP6OptNewPOSIXTimeZone - Instantiation with specific values >>> raw(DHCP6OptNewPOSIXTimeZone(optdata="EST5EDT4,M3.2.0/02:00,M11.1.0/02:00")) == b'\x00)\x00#EST5EDT4,M3.2.0/02:00,M11.1.0/02:00' True ###(224)=[passed] DHCP6OptNewPOSIXTimeZone - Dissection with specific values >>> a = DHCP6OptNewPOSIXTimeZone(b'\x00)\x00#EST5EDT4,M3.2.0/02:00,M11.1.0/02:00') >>> a.optcode == 41 and a.optlen == 35 and a.optdata == b"EST5EDT4,M3.2.0/02:00,M11.1.0/02:00" True ###### ## Test DHCP6 Option - New TZDB Time Zone ###### ###(225)=[passed] DHCP6OptNewTZDBTimeZone - Basic Instantiation >>> raw(DHCP6OptNewTZDBTimeZone()) == b'\x00*\x00\x00' True ###(226)=[passed] DHCP6OptNewTZDBTimeZone - Basic Dissection >>> a = DHCP6OptNewTZDBTimeZone(b'\x00*\x00\x00') >>> a.optcode == 42 and a.optlen == 0 and a.optdata == b"" True ###(227)=[passed] DHCP6OptNewTZDBTimeZone - Instantiation with specific values >>> raw(DHCP6OptNewTZDBTimeZone(optdata="Europe/Zurich")) == b'\x00*\x00\rEurope/Zurich' True ###(228)=[passed] DHCP6OptNewTZDBTimeZone - Dissection with specific values >>> a = DHCP6OptNewTZDBTimeZone(b'\x00*\x00\rEurope/Zurich') >>> a.optcode == 42 and a.optlen == 13 and a.optdata == b"Europe/Zurich" True ###### ## Test DHCP6 Option Relay Agent Echo Request Option ###### ###(229)=[passed] DHCP6OptRelayAgentERO - Basic Instantiation >>> raw(DHCP6OptRelayAgentERO()) == b'\x00+\x00\x04\x00\x17\x00\x18' True ###(230)=[passed] DHCP6OptRelayAgentERO - optlen field computation >>> raw(DHCP6OptRelayAgentERO(reqopts=[1,2,3,4])) == b'\x00+\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04' True ###(231)=[passed] DHCP6OptRelayAgentERO - instantiation with empty list >>> raw(DHCP6OptRelayAgentERO(reqopts=[])) == b'\x00+\x00\x00' True ###(232)=[passed] DHCP6OptRelayAgentERO - Basic dissection >>> a=DHCP6OptRelayAgentERO(b'\x00+\x00\x00') >>> a.optcode == 43 and a.optlen == 0 and a.reqopts == [] True ###(233)=[passed] DHCP6OptRelayAgentERO - Dissection with specific value >>> a=DHCP6OptRelayAgentERO(b'\x00+\x00\x08\x00\x01\x00\x02\x00\x03\x00\x04') >>> a.optcode == 43 and a.optlen == 8 and a.reqopts == [1,2,3,4] True ###### ## Test DHCP6 Option LQ Client Link ###### ###(234)=[passed] DHCP6OptLQClientLink - Basic Instantiation >>> raw(DHCP6OptLQClientLink()) == b'\x000\x00\x00' True ###(235)=[passed] DHCP6OptLQClientLink - Basic Dissection >>> a = DHCP6OptLQClientLink(b"\x000\x00\x00") >>> a.optcode == 48 and a.optlen == 0 and a.linkaddress == [] True ###(236)=[passed] DHCP6OptLQClientLink - Instantiation with specific values (1 address) >>> raw(DHCP6OptLQClientLink(linkaddress=["2001:db8::1"])) == b'\x000\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(237)=[passed] DHCP6OptLQClientLink - Dissection with specific values (1 address) >>> a = DHCP6OptLQClientLink(b'\x000\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.optcode == 48 and a.optlen == 16 and len(a.linkaddress) == 1 and a.linkaddress[0] == "2001:db8::1" True ###(238)=[passed] DHCP6OptLQClientLink - Instantiation with specific values (2 addresses) >>> raw(DHCP6OptLQClientLink(linkaddress=["2001:db8::1", "2001:db8::2"])) == b'\x000\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(239)=[passed] DHCP6OptLQClientLink - Dissection with specific values (2 addresses) >>> a = DHCP6OptLQClientLink(b'\x000\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.optcode == 48 and a.optlen == 32 and len(a.linkaddress) == 2 and a.linkaddress[0] == "2001:db8::1" and a.linkaddress[1] == "2001:db8::2" True ###### ## Test DHCP6 Option - NTP Server ###### ###(240)=[passed] DHCP6NTPSubOptSrvAddr - Basic dissection/instantiation >>> b = b'\x00\x01' + b'\x00\x10' + b'\x00' * 16 >>> assert raw(DHCP6NTPSubOptSrvAddr()) == b >>> >>> p = DHCP6NTPSubOptSrvAddr(b) >>> assert p.optcode == 1 and p.optlen == 16 and p.addr == '::' ###(241)=[passed] DHCP6NTPSubOptSrvAddr - Dissection/instantiation with specific values >>> b = b'\x00\x01' + b'\x00\x10' + b'\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> assert raw(DHCP6NTPSubOptSrvAddr(addr='2001:db8::1')) == b >>> >>> p = DHCP6NTPSubOptSrvAddr(b) >>> assert p.optcode == 1 and p.optlen == 16 and p.addr == '2001:db8::1' ###(242)=[passed] DHCP6NTPSubOptMCAddr - Basic dissection/instantiation >>> b = b'\x00\x02' + b'\x00\x10' + b'\x00' * 16 >>> assert raw(DHCP6NTPSubOptMCAddr()) == b >>> >>> p = DHCP6NTPSubOptMCAddr(b) >>> assert p.optcode == 2 and p.optlen == 16 and p.addr == '::' ###(243)=[passed] DHCP6NTPSubOptMCAddr - Dissection/instantiation with specific values >>> b = b'\x00\x02' + b'\x00\x10' + b'\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01' >>> assert raw(DHCP6NTPSubOptMCAddr(addr='ff02::101')) == b >>> >>> p = DHCP6NTPSubOptMCAddr(b) >>> assert p.optcode == 2 and p.optlen == 16 and p.addr == 'ff02::101' ###(244)=[passed] DHCP6NTPSubOptSrvFQDN - Basic dissection/instantiation >>> b = b'\x00\x03' + b'\x00\x01' + b'\x00' >>> assert raw(DHCP6NTPSubOptSrvFQDN()) == b >>> >>> p = DHCP6NTPSubOptSrvFQDN(b) >>> assert p.optcode == 3 and p.optlen == 1 and p.fqdn == b'.' ###(245)=[passed] DHCP6NTPSubOptSrvFQDN - Dissection/instantiation with specific values >>> b = b'\x00\x03' + b'\x00\x0d' + b'\x07example\x03com\x00' >>> assert raw(DHCP6NTPSubOptSrvFQDN(fqdn='example.com')) == b >>> >>> p = DHCP6NTPSubOptSrvFQDN(b) >>> assert p.optcode == 3 and p.optlen == 13 and p.fqdn == b'example.com.' ###(246)=[passed] DHCP6OptNTPServer - Basic dissection/instantiation >>> b = b'\x00\x38' + b'\x00\x00' >>> assert raw(DHCP6OptNTPServer()) == b >>> >>> p = DHCP6OptNTPServer(b) >>> assert p.optcode == 56 and p.optlen == 0 and p.ntpserver == [] ###(247)=[passed] DHCP6OptNTPServer - Dissection/instantiation with specific values >>> srv_addr = b'\x00\x01' + b'\x00\x10' + b'\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> mc_addr = b'\x00\x02' + b'\x00\x10' + b'\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01' >>> srv_fqdn = b'\x00\x03' + b'\x00\x0d' + b'\x07example\x03com\x00' >>> b = b'\x00\x38' + b'\x00\x39' + srv_addr + mc_addr + srv_fqdn >>> >>> p = DHCP6OptNTPServer( ... ntpserver=[DHCP6NTPSubOptSrvAddr(addr='2001:db8::1'), ... DHCP6NTPSubOptMCAddr(addr='ff02::101'), ... DHCP6NTPSubOptSrvFQDN(fqdn='example.com'), ... ] ... ) >>> assert raw(p) == b >>> >>> p = DHCP6OptNTPServer(b) >>> assert p.optcode == 56 and p.optlen == 57 and len(p.ntpserver) == 3 >>> assert p.ntpserver[0] == DHCP6NTPSubOptSrvAddr(srv_addr) >>> assert p.ntpserver[1] == DHCP6NTPSubOptMCAddr(mc_addr) >>> assert p.ntpserver[2] == DHCP6NTPSubOptSrvFQDN(srv_fqdn) ###### ## Test DHCP6 Option - Boot File URL ###### ###(248)=[passed] DHCP6OptBootFileUrl - Basic Instantiation >>> raw(DHCP6OptBootFileUrl()) == b'\x00;\x00\x00' True ###(249)=[passed] DHCP6OptBootFileUrl - Basic Dissection >>> a = DHCP6OptBootFileUrl(b'\x00;\x00\x00') >>> a.optcode == 59 and a.optlen == 0 and a.optdata == b"" True ###(250)=[passed] DHCP6OptBootFileUrl - Instantiation with specific values >>> raw(DHCP6OptBootFileUrl(optdata="http://wp.pl/file")) == b'\x00;\x00\x11http://wp.pl/file' True ###(251)=[passed] DHCP6OptBootFileUrl - Dissection with specific values >>> a = DHCP6OptBootFileUrl(b'\x00;\x00\x11http://wp.pl/file') >>> a.optcode == 59 and a.optlen == 17 and a.optdata == b"http://wp.pl/file" True ###### ## Test DHCP6 Option - Client Arch Type ###### ###(252)=[passed] DHCP6OptClientArchType - Basic Instantiation >>> raw(DHCP6OptClientArchType()) b'\x00=\x00\x00' >>> raw(DHCP6OptClientArchType()) == b'\x00=\x00\x00' True ###(253)=[passed] DHCP6OptClientArchType - Basic Dissection >>> a = DHCP6OptClientArchType(b'\x00=\x00\x00') >>> a.optcode == 61 and a.optlen == 0 and a.archtypes == [] True ###(254)=[passed] DHCP6OptClientArchType - Instantiation with specific value as just int >>> raw(DHCP6OptClientArchType(archtypes=7)) == b'\x00=\x00\x02\x00\x07' True ###(255)=[passed] DHCP6OptClientArchType - Instantiation with specific value as single item list of int >>> raw(DHCP6OptClientArchType(archtypes=[7])) == b'\x00=\x00\x02\x00\x07' True ###(256)=[passed] DHCP6OptClientArchType - Dissection with specific 1 value list >>> a = DHCP6OptClientArchType(b'\x00=\x00\x02\x00\x07') >>> a.optcode == 61 and a.optlen == 2 and a.archtypes == [7] True ###(257)=[passed] DHCP6OptClientArchType - Instantiation with specific value as 2 item list of int >>> raw(DHCP6OptClientArchType(archtypes=[7, 9])) == b'\x00=\x00\x04\x00\x07\x00\x09' True ###(258)=[passed] DHCP6OptClientArchType - Dissection with specific 2 values list >>> a = DHCP6OptClientArchType(b'\x00=\x00\x04\x00\x07\x00\x09') >>> a.optcode == 61 and a.optlen == 4 and a.archtypes == [7, 9] True ###### ## Test DHCP6 Option - Client Network Inter Id ###### ###(259)=[passed] DHCP6OptClientNetworkInterId - Basic Instantiation >>> raw(DHCP6OptClientNetworkInterId()) b'\x00>\x00\x03\x00\x00\x00' >>> raw(DHCP6OptClientNetworkInterId()) == b'\x00>\x00\x03\x00\x00\x00' True ###(260)=[passed] DHCP6OptClientNetworkInterId - Basic Dissection >>> a = DHCP6OptClientNetworkInterId(b'\x00>\x00\x03\x00\x00\x00') >>> a.optcode == 62 and a.optlen == 3 and a.iitype == 0 and a.iimajor == 0 and a.iiminor == 0 True ###(261)=[passed] DHCP6OptClientNetworkInterId - Instantiation with specific values >>> raw(DHCP6OptClientNetworkInterId(iitype=1, iimajor=2, iiminor=3)) == b'\x00>\x00\x03\x01\x02\x03' True ###(262)=[passed] DHCP6OptClientNetworkInterId - Dissection with specific values >>> a = DHCP6OptClientNetworkInterId(b'\x00>\x00\x03\x01\x02\x03') >>> a.optcode == 62 and a.optlen == 3 and a.iitype == 1 and a.iimajor == 2 and a.iiminor == 3 True ###### ## Test DHCP6 Option - ERP Domain ###### ###(263)=[passed] DHCP6OptERPDomain - Basic Instantiation >>> raw(DHCP6OptERPDomain()) == b'\x00A\x00\x00' True ###(264)=[passed] DHCP6OptERPDomain - Basic Dissection >>> a = DHCP6OptERPDomain(b'\x00A\x00\x00') >>> a.optcode == 65 and a.optlen == 0 and a.erpdomain == [] True ###(265)=[passed] DHCP6OptERPDomain - Instantiation with specific values (1 domain) >>> raw(DHCP6OptERPDomain(erpdomain=["toto.example.com."])) == b'\x00A\x00\x12\x04toto\x07example\x03com\x00' True ###(266)=[passed] DHCP6OptERPDomain - Dissection with specific values (1 domain) >>> a = DHCP6OptERPDomain(b'\x00A\x00\x12\x04toto\x07example\x03com\x00') >>> a.optcode == 65 and a.optlen == 18 and len(a.erpdomain) == 1 and a.erpdomain[0] == "toto.example.com." True ###(267)=[passed] DHCP6OptERPDomain - Instantiation with specific values (2 domains) >>> raw(DHCP6OptERPDomain(erpdomain=["toto.example.com.", "titi.example.com."])) == b'\x00A\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00' True ###(268)=[passed] DHCP6OptERPDomain - Dissection with specific values (2 domains) >>> a = DHCP6OptERPDomain(b'\x00A\x00$\x04toto\x07example\x03com\x00\x04titi\x07example\x03com\x00') >>> a.optcode == 65 and a.optlen == 36 and len(a.erpdomain) == 2 and a.erpdomain[0] == "toto.example.com." and a.erpdomain[1] == "titi.example.com." True ###### ## Test DHCP6 Option - Relay Supplied Option ###### ###(269)=[passed] DHCP6OptRelaySuppliedOpt - Basic Instantiation >>> raw(DHCP6OptRelaySuppliedOpt()) == b'\x00B\x00\x00' True ###(270)=[passed] DHCP6OptRelaySuppliedOpt - Basic Dissection >>> a = DHCP6OptRelaySuppliedOpt(b'\x00B\x00\x00') >>> a.optcode == 66 and a.optlen == 0 and a.relaysupplied == [] True ###(271)=[passed] DHCP6OptRelaySuppliedOpt - Instantiation with specific values >>> raw(DHCP6OptRelaySuppliedOpt(relaysupplied=DHCP6OptERPDomain(erpdomain=["toto.example.com."]))) == b'\x00B\x00\x16\x00A\x00\x12\x04toto\x07example\x03com\x00' True ###(272)=[passed] DHCP6OptRelaySuppliedOpt - Dissection with specific values >>> a = DHCP6OptRelaySuppliedOpt(b'\x00B\x00\x16\x00A\x00\x12\x04toto\x07example\x03com\x00') >>> a.optcode == 66 and a.optlen == 22 and len(a.relaysupplied) == 1 and isinstance(a.relaysupplied[0], DHCP6OptERPDomain) and a.relaysupplied[0].erpdomain[0] == "toto.example.com." True ###(273)=[passed] DHCP6OptRelaySuppliedOpt - deeply nested DHCP6OptRelaySuppliedOpt >>> p = DHCP6(b'\x01\x00\x00\x00' + b'\x00B\x0f\x0f' * 100) >>> assert p.getlayer(DHCP6OptRelaySuppliedOpt, 100) ###### ## Test DHCP6 Option Client Link Layer address ###### ###(274)=[passed] Basic build & dissect >>> s = raw(DHCP6OptClientLinkLayerAddr()) >>> assert s == b"\x00O\x00\x08\x00\x01\x00\x00\x00\x00\x00\x00" >>> >>> p = DHCP6OptClientLinkLayerAddr(s) >>> assert p.clladdr == "00:00:00:00:00:00" >>> >>> r = b"\x00O\x00\x08\x00\x01\x00\x01\x02\x03\x04\x05" >>> p = DHCP6OptClientLinkLayerAddr(r) >>> assert p.clladdr == "00:01:02:03:04:05" ###### ## Test DHCP6 Option Captive-Portal ###### ###(275)=[passed] Basic build & dissect >>> s = raw(DHCP6OptCaptivePortal()) >>> assert s == b"\x00\x67\x00\x00" >>> >>> p = DHCP6OptCaptivePortal(s) >>> assert p.optcode == 103 >>> assert p.optlen == 0 >>> assert p.URI == b"" >>> >>> p = DHCP6OptCaptivePortal(b"\x00\x67\x00\x13https://example.org") >>> assert p.optcode == 103 >>> assert p.optlen == 19 >>> assert p.URI == b"https://example.org" ###### ## Test DHCP6 Option MUD URL ###### ###(276)=[passed] Basic build & dissect >>> s = raw(DHCP6OptMudUrl()) >>> assert s == b"\x00p\x00\x00" >>> >>> p = DHCP6OptMudUrl(s) >>> assert p.mudstring == b"" >>> >>> r = b'\x00p\x00\x13https://example.org' >>> p = DHCP6OptMudUrl(r) >>> assert p.mudstring == b"https://example.org" >>> assert p.optlen == 19 ###### ## Test DHCP6 Option Virtual Subnet Selection ###### ###(277)=[passed] Basic build & dissect >>> s = raw(DHCP6OptVSS()) >>> assert s == b"\x00D\x00\x01\xff" >>> >>> p = DHCP6OptVSS(s) >>> assert p.type == 255 ###### ## Test DHCP6 Option - Address Registration Enabled ###### ###(278)=[passed] DHCP6OptAddrRegEnable - Basic Instantiation >>> raw(DHCP6OptAddrRegEnable()) == b'\x00\x94\x00\x00' True ###(279)=[passed] DHCP6OptAddrRegEnable - Basic Dissection >>> a=DHCP6OptAddrRegEnable(b'\x00\x94\x00\x00') >>> a.optcode == 148 and a.optlen == 0 True ###### ## Test DHCP6 Messages - DHCP6_Solicit ###### ###(280)=[passed] DHCP6_Solicit - Basic Instantiation >>> raw(DHCP6_Solicit()) == b'\x01\x00\x00\x00' True ###(281)=[passed] DHCP6_Solicit - Basic Dissection >>> a = DHCP6_Solicit(b'\x01\x00\x00\x00') >>> a.msgtype == 1 and a.trid == 0 True ###(282)=[passed] DHCP6_Solicit - Basic test of DHCP6_solicit.hashret() >>> DHCP6_Solicit().hashret() == b'\x00\x00\x00' True ###(283)=[passed] DHCP6_Solicit - Test of DHCP6_solicit.hashret() with specific values >>> DHCP6_Solicit(trid=0xbbccdd).hashret() == b'\xbb\xcc\xdd' True ###(284)=[passed] DHCP6_Solicit - UDP ports overload >>> a=UDP()/DHCP6_Solicit() >>> a.sport == 546 and a.dport == 547 True ###(285)=[passed] DHCP6_Solicit - Dispatch based on UDP port >>> a=UDP(raw(UDP()/DHCP6_Solicit())) No IP underlayer to compute checksum. Leaving null. >>> isinstance(a.payload, DHCP6_Solicit) True ###### ## Test DHCP6 Messages - DHCP6_Advertise ###### ###(286)=[passed] DHCP6_Advertise - Basic Instantiation >>> raw(DHCP6_Advertise()) == b'\x02\x00\x00\x00' True ###(287)=[passed] DHCP6_Advertise - Basic test of DHCP6_solicit.hashret() >>> DHCP6_Advertise().hashret() == b'\x00\x00\x00' True ###(288)=[passed] DHCP6_Advertise - Test of DHCP6_Advertise.hashret() with specific values >>> DHCP6_Advertise(trid=0xbbccdd).hashret() == b'\xbb\xcc\xdd' True ###(289)=[passed] DHCP6_Advertise - Basic test of answers() with solicit message >>> a = DHCP6_Solicit() >>> b = DHCP6_Advertise() >>> a > b True ###(290)=[passed] DHCP6_Advertise - Test of answers() with solicit message >>> a = DHCP6_Solicit(trid=0xbbccdd) >>> b = DHCP6_Advertise(trid=0xbbccdd) >>> a > b True ###(291)=[passed] DHCP6_Advertise - UDP ports overload >>> a=UDP()/DHCP6_Advertise() >>> a.sport == 547 and a.dport == 546 True ###### ## Test DHCP6 Messages - DHCP6_Request ###### ###(292)=[passed] DHCP6_Request - Basic Instantiation >>> raw(DHCP6_Request()) == b'\x03\x00\x00\x00' True ###(293)=[passed] DHCP6_Request - Basic Dissection >>> a=DHCP6_Request(b'\x03\x00\x00\x00') >>> a.msgtype == 3 and a.trid == 0 True ###(294)=[passed] DHCP6_Request - UDP ports overload >>> a=UDP()/DHCP6_Request() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Confirm ###### ###(295)=[passed] DHCP6_Confirm - Basic Instantiation >>> raw(DHCP6_Confirm()) == b'\x04\x00\x00\x00' True ###(296)=[passed] DHCP6_Confirm - Basic Dissection >>> a=DHCP6_Confirm(b'\x04\x00\x00\x00') >>> a.msgtype == 4 and a.trid == 0 True ###(297)=[passed] DHCP6_Confirm - UDP ports overload >>> a=UDP()/DHCP6_Confirm() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Renew ###### ###(298)=[passed] DHCP6_Renew - Basic Instantiation >>> raw(DHCP6_Renew()) == b'\x05\x00\x00\x00' True ###(299)=[passed] DHCP6_Renew - Basic Dissection >>> a=DHCP6_Renew(b'\x05\x00\x00\x00') >>> a.msgtype == 5 and a.trid == 0 True ###(300)=[passed] DHCP6_Renew - UDP ports overload >>> a=UDP()/DHCP6_Renew() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Rebind ###### ###(301)=[passed] DHCP6_Rebind - Basic Instantiation >>> raw(DHCP6_Rebind()) == b'\x06\x00\x00\x00' True ###(302)=[passed] DHCP6_Rebind - Basic Dissection >>> a=DHCP6_Rebind(b'\x06\x00\x00\x00') >>> a.msgtype == 6 and a.trid == 0 True ###(303)=[passed] DHCP6_Rebind - UDP ports overload >>> a=UDP()/DHCP6_Rebind() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Reply ###### ###(304)=[passed] DHCP6_Reply - Basic Instantiation >>> raw(DHCP6_Reply()) == b'\x07\x00\x00\x00' True ###(305)=[passed] DHCP6_Reply - Basic Dissection >>> a=DHCP6_Reply(b'\x07\x00\x00\x00') >>> a.msgtype == 7 and a.trid == 0 True ###(306)=[passed] DHCP6_Reply - UDP ports overload >>> a=UDP()/DHCP6_Reply() >>> a.sport == 547 and a.dport == 546 True ###(307)=[passed] DHCP6_Reply - Answers >>> assert not DHCP6_Reply(trid=0).answers(DHCP6_Request(trid=1)) >>> assert DHCP6_Reply(trid=1).answers(DHCP6_Request(trid=1)) ###### ## Test DHCP6 Messages - DHCP6_Release ###### ###(308)=[passed] DHCP6_Release - Basic Instantiation >>> raw(DHCP6_Release()) == b'\x08\x00\x00\x00' True ###(309)=[passed] DHCP6_Release - Basic Dissection >>> a=DHCP6_Release(b'\x08\x00\x00\x00') >>> a.msgtype == 8 and a.trid == 0 True ###(310)=[passed] DHCP6_Release - UDP ports overload >>> a=UDP()/DHCP6_Release() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Decline ###### ###(311)=[passed] DHCP6_Decline - Basic Instantiation >>> raw(DHCP6_Decline()) == b'\x09\x00\x00\x00' True ###(312)=[passed] DHCP6_Confirm - Basic Dissection >>> a=DHCP6_Confirm(b'\x09\x00\x00\x00') >>> a.msgtype == 9 and a.trid == 0 True ###(313)=[passed] DHCP6_Decline - UDP ports overload >>> a=UDP()/DHCP6_Decline() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_Reconf ###### ###(314)=[passed] DHCP6_Reconf - Basic Instantiation >>> raw(DHCP6_Reconf()) == b'\x0A\x00\x00\x00' True ###(315)=[passed] DHCP6_Reconf - Basic Dissection >>> a=DHCP6_Reconf(b'\x0A\x00\x00\x00') >>> a.msgtype == 10 and a.trid == 0 True ###(316)=[passed] DHCP6_Reconf - UDP ports overload >>> a=UDP()/DHCP6_Reconf() >>> a.sport == 547 and a.dport == 546 True ###### ## Test DHCP6 Messages - DHCP6_InfoRequest ###### ###(317)=[passed] DHCP6_InfoRequest - Basic Instantiation >>> raw(DHCP6_InfoRequest()) == b'\x0B\x00\x00\x00' True ###(318)=[passed] DHCP6_InfoRequest - Basic Dissection >>> a=DHCP6_InfoRequest(b'\x0B\x00\x00\x00') >>> a.msgtype == 11 and a.trid == 0 True ###(319)=[passed] DHCP6_InfoRequest - UDP ports overload >>> a=UDP()/DHCP6_InfoRequest() >>> a.sport == 546 and a.dport == 547 True ###### ## Test DHCP6 Messages - DHCP6_RelayForward ###### ###(320)=[passed] DHCP6_RelayForward - Basic Instantiation >>> raw(DHCP6_RelayForward()) == b'\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(321)=[passed] DHCP6_RelayForward - Basic Dissection >>> a=DHCP6_RelayForward(b'\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.msgtype == 12 and a.hopcount == 0 and a.linkaddr == "::" and a.peeraddr == "::" True ###(322)=[passed] DHCP6_RelayForward - Dissection with options >>> a = DHCP6_RelayForward(b'\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x04\x03\x01\x00\x00') >>> a.msgtype == 12 and DHCP6OptRelayMsg in a and isinstance(a.message, DHCP6_Request) True ###(323)=[passed] DHCP6_RelayForward - Advanced dissection >>> s = b'`\x00\x00\x00\x002\x11@\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x02#\x02#\x002\xf0\xaf\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x04\x01\x00\x00\x00' >>> p = IPv6(s) >>> assert DHCP6OptRelayMsg in p and isinstance(p.message, DHCP6_Solicit) ###### ## Test DHCP6 Messages - DHCP6OptRelayMsg ###### ###(324)=[passed] DHCP6OptRelayMsg - Basic Instantiation >>> raw(DHCP6OptRelayMsg(optcode=37)) == b'\x00%\x00\x04\x00\x00\x00\x00' True ###(325)=[passed] DHCP6OptRelayMsg - Basic Dissection >>> a = DHCP6OptRelayMsg(b'\x00\r\x00\x00') >>> a.optcode == 13 and a.optlen == 0 and a.message is None True ###(326)=[passed] DHCP6OptRelayMsg - Embedded DHCP6 packet Instantiation >>> raw(DHCP6OptRelayMsg(message=DHCP6_Solicit())) == b'\x00\t\x00\x04\x01\x00\x00\x00' True ###(327)=[passed] DHCP6OptRelayMsg - Embedded DHCP6 packet Dissection >>> p = DHCP6OptRelayMsg(b'\x00\t\x00\x04\x01\x00\x00\x00') >>> isinstance(p.message, DHCP6_Solicit) True ###### ## Test DHCP6 Messages - DHCP6_RelayReply ###### ###(328)=[passed] DHCP6_RelayReply - Basic Instantiation >>> raw(DHCP6_RelayReply()) == b'\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(329)=[passed] DHCP6_RelayReply - Basic Dissection >>> a=DHCP6_RelayReply(b'\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.msgtype == 13 and a.hopcount == 0 and a.linkaddr == "::" and a.peeraddr == "::" True ###### ## Test DHCP6 Messages - DHCP6_AddrRegInform ###### ###(330)=[passed] DHCP6_AddrRegInform - Basic Instantiation >>> raw(DHCP6_AddrRegInform()) == b'\x24\x00\x00\x00' True ###(331)=[passed] DHCP6_AddrRegInform - Basic Dissection >>> a = DHCP6_AddrRegInform(b'\x24\x00\x00\x00') >>> a.msgtype == 36 and a.trid == 0 True ###(332)=[passed] DHCP6_AddrRegInform - Basic test of DHCP6_addrreginform.hashret() >>> DHCP6_AddrRegInform().hashret() == b'\x00\x00\x00' True ###(333)=[passed] DHCP6_AddrRegInform - Test of DHCP6_addrreginform.hashret() with specific values >>> DHCP6_AddrRegInform(trid=0xbbccdd).hashret() == b'\xbb\xcc\xdd' True ###(334)=[passed] DHCP6_AddrRegInform - UDP ports overload >>> a=UDP()/DHCP6_AddrRegInform() >>> a.sport == 546 and a.dport == 547 True ###(335)=[passed] DHCP6_AddrRegInform - Dispatch based on UDP port >>> a=UDP(raw(UDP()/DHCP6_AddrRegInform())) No IP underlayer to compute checksum. Leaving null. >>> isinstance(a.payload, DHCP6_AddrRegInform) True ###### ## Test DHCP6 Messages - DHCP6_AddrRegReply ###### ###(336)=[passed] DHCP6_AddrRegReply - Basic Instantiation >>> raw(DHCP6_AddrRegReply()) == b'\x25\x00\x00\x00' True ###(337)=[passed] DHCP6_AddrRegReply - Basic Dissection >>> a = DHCP6_AddrRegReply(b'\x25\x00\x00\x00') >>> a.msgtype == 37 and a.trid == 0 True ###(338)=[passed] DHCP6_AddrRegReply - Basic test of DHCP6_addrregreply.hashret() >>> DHCP6_AddrRegReply().hashret() == b'\x00\x00\x00' True ###(339)=[passed] DHCP6_AddrRegReply - Test of DHCP6_addrregreply.hashret() with specific values >>> DHCP6_AddrRegReply(trid=0xbbccdd).hashret() == b'\xbb\xcc\xdd' True ###(340)=[passed] DHCP6_AddrRegReply - UDP ports overload >>> a=UDP()/DHCP6_AddrRegReply() >>> a.sport == 546 and a.dport == 547 True ###(341)=[passed] DHCP6_AddrRegReply - Dispatch based on UDP port >>> a=UDP(raw(UDP()/DHCP6_AddrRegReply())) No IP underlayer to compute checksum. Leaving null. >>> isinstance(a.payload, DHCP6_AddrRegReply) True parse a DNS packet specifically crafted for OOM ━ Run at 04:11:35 from [test/scapy/layers/dns.uts] by UTscapy in 1.2108392715454102 └ Passed=31 └ Failed=0 ###### ## DNS ###### ###(001)=[passed] DNS request using dns_resolve this is not using a raw socket so should also work without root >>> val = dns_resolve(qname="google.com", qtype="A") >>> assert val >>> assert inet_pton(socket.AF_INET, val[0].rdata) >>> assert val == conf.netcache.dns_cache[b'google.com.;\x01'] >>> >>> val = dns_resolve(qname="google.com", qtype="AAAA") >>> assert val >>> assert inet_pton(socket.AF_INET6, val[0].rdata) >>> assert val == conf.netcache.dns_cache[b'google.com.;\x1c'] ###(002)=[passed] DNS labels >>> query = DNSQR(qname=b"www.secdev.org") >>> assert query.qname == query.__class__(raw(query)).qname ###(004)=[passed] DNS frame with advanced decompression >>> a = b'\x01\x00^\x00\x00\xfb$\xa2\xe1\x90\xa9]\x08\x00E\x00\x01P\\\xdd\x00\x00\xff\x11\xbb\x93\xc0\xa8\x00\x88\xe0\x00\x00\xfb\x14\xe9\x14\xe9\x01<*\x81\x00\x00\x84\x00\x00\x00\x00\x03\x00\x00\x00\x04\x01B\x019\x015\x019\x013\x014\x017\x013\x016\x017\x010\x012\x010\x01D\x018\x011\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x018\x01E\x01F\x03ip6\x04arpa\x00\x00\x0c\x80\x01\x00\x00\x00x\x00\x0f\x07Zalmoid\x05local\x00\x011\x01A\x019\x014\x017\x01E\x01A\x014\x01B\x01A\x01F\x01B\x012\x011\x014\x010\x010\x016\x01E\x01F\x017\x011\x01F\x012\x015\x013\x01E\x010\x011\x010\x01A\x012\xc0L\x00\x0c\x80\x01\x00\x00\x00x\x00\x02\xc0`\x03136\x010\x03168\x03192\x07in-addr\xc0P\x00\x0c\x80\x01\x00\x00\x00x\x00\x02\xc0`\xc0\x0c\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0\x0c\x00\x02\x00\x08\xc0o\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0o\x00\x02\x00\x08\xc0\xbd\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0\xbd\x00\x02\x00\x08\x00\x00)\x05\xa0\x00\x00\x11\x94\x00\x12\x00\x04\x00\x0e\x00\xc1&\xa2\xe1\x90\xa9]$\xa2\xe1\x90\xa9]' >>> pkt = Ether(a) >>> assert pkt.ancount == 3 >>> assert pkt.arcount == 4 >>> assert pkt.an[1].rdata == b'Zalmoid.local.' >>> assert pkt.an[1].rdlen is None >>> assert pkt.an[2].rdata == b'Zalmoid.local.' >>> assert pkt.an[2].rdlen is None >>> assert pkt.ar[1].nextname == b'1.A.9.4.7.E.A.4.B.A.F.B.2.1.4.0.0.6.E.F.7.1.F.2.5.3.E.0.1.0.A.2.ip6.arpa.' >>> assert pkt.ar[2].nextname == b'136.0.168.192.in-addr.arpa.' >>> pkt.show() ###[ Ethernet ]### dst = 01:00:5e:00:00:fb src = 24:a2:e1:90:a9:5d type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 336 id = 23773 flags = frag = 0 ttl = 255 proto = udp chksum = 0xbb93 src = 192.168.0.136 dst = 224.0.0.251 \options \ ###[ UDP ]### sport = mdns dport = mdns len = 316 chksum = 0x2a81 ###[ DNS ]### id = 0 qr = 1 opcode = QUERY aa = 1 tc = 0 rd = 0 ra = 0 z = 0 ad = 0 cd = 0 rcode = ok qdcount = 0 ancount = 3 nscount = 0 arcount = 4 \qd \ \an \ |###[ DNS Resource Record ]### | rrname = b'B.9.5.9.3.4.7.3.6.7.0.2.0.D.8.1.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa.' | type = PTR | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | rdata = b'Zalmoid.local.' |###[ DNS Resource Record ]### | rrname = b'1.A.9.4.7.E.A.4.B.A.F.B.2.1.4.0.0.6.E.F.7.1.F.2.5.3.E.0.1.0.A.2.ip6.arpa.' | type = PTR | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | rdata = b'Zalmoid.local.' |###[ DNS Resource Record ]### | rrname = b'136.0.168.192.in-addr.arpa.' | type = PTR | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | rdata = b'Zalmoid.local.' \ns \ \ar \ |###[ DNS NSEC Resource Record ]### | rrname = b'B.9.5.9.3.4.7.3.6.7.0.2.0.D.8.1.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa.' | type = NSEC | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | nextname = b'B.9.5.9.3.4.7.3.6.7.0.2.0.D.8.1.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa.' | typebitmaps= ['PTR'] |###[ DNS NSEC Resource Record ]### | rrname = b'1.A.9.4.7.E.A.4.B.A.F.B.2.1.4.0.0.6.E.F.7.1.F.2.5.3.E.0.1.0.A.2.ip6.arpa.' | type = NSEC | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | nextname = b'1.A.9.4.7.E.A.4.B.A.F.B.2.1.4.0.0.6.E.F.7.1.F.2.5.3.E.0.1.0.A.2.ip6.arpa.' | typebitmaps= ['PTR'] |###[ DNS NSEC Resource Record ]### | rrname = b'136.0.168.192.in-addr.arpa.' | type = NSEC | cacheflush= 1 | rclass = IN | ttl = 120 | rdlen = None | nextname = b'136.0.168.192.in-addr.arpa.' | typebitmaps= ['PTR'] |###[ DNS OPT Resource Record ]### | rrname = b'.' | type = OPT | rclass = 1440 | extrcode = 0 | version = 0 | z = 4500 | rdlen = None | \rdata \ | |###[ EDNS0 Owner (OWN) ]### | | optcode = Owner | | optlen = 14 | | v = 0 | | s = 193 | | primary_mac= 26:a2:e1:90:a9:5d | |###[ DNS EDNS0 TLV ]### | | optcode = 9378 | | optlen = 57744 | | optdata = b'\xa9]' ###(005)=[passed] DNS frame with DNSRRSRV >>> b = Ether(b'33\x00\x00\x00\xfb$\xe3\x14M\x84\xc0\x86\xdd`\t\xc0f\x02b\x11\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x04*,\x03\xab+/\x14\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x14\xe9\x14\xe9\x02b_\xd8\x00\x00\x84\x00\x00\x00\x00\x0b\x00\x00\x00\x06\x014\x011\x01F\x012\x01B\x012\x01B\x01A\x013\x010\x01C\x012\x01A\x012\x014\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x018\x01E\x01F\x03ip6\x04arpa\x00\x00\x0c\x80\x01\x00\x00\x00x\x00\x14\x0csCapys-fLuff\x05local\x00\x03177\x010\x03168\x03192\x07in-addr\xc0P\x00\x0c\x80\x01\x00\x00\x00x\x00\x02\xc0`\x01E\x01F\x017\x01D\x01B\x018\x014\x01C\x014\x01B\x016\x01E\x015\x017\x018\x010\x010\x016\x01E\x01F\x017\x011\x01F\x012\x015\x013\x01E\x010\x011\x010\x01A\x012\xc0L\x00\x0c\x80\x01\x00\x00\x00x\x00\x02\xc0`+24:e3:14:4d:84:c0@fe80::26e3:14ff:fe4d:84c0\x0e_apple-mobdev2\x04_tcp\xc0m\x00\x10\x80\x01\x00\x00\x11\x94\x00\x01\x00\t_services\x07_dns-sd\x04_udp\xc0m\x00\x0c\x00\x01\x00\x00\x11\x94\x00\x02\xc1\x12\x08521805b3\x04_sub\xc1\x12\x00\x0c\x00\x01\x00\x00\x11\x94\x00\x02\xc0\xe6\xc1\x12\x00\x0c\x00\x01\x00\x00\x11\x94\x00\x02\xc0\xe6\xc0\xe6\x00!\x80\x01\x00\x00\x00x\x00\x08\x00\x00\x00\x00~\xf2\xc0`\xc0`\x00\x1c\x80\x01\x00\x00\x00x\x00\x10\xfe\x80\x00\x00\x00\x00\x00\x00\x04*,\x03\xab+/\x14\xc0`\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x00\xb1\xc0`\x00\x1c\x80\x01\x00\x00\x00x\x00\x10*\x01\x0e5/\x17\xfe`\x08u\xe6\xb4\xc4\x8b\xd7\xfe\xc0\x0c\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0\x0c\x00\x02\x00\x08\xc0t\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0t\x00\x02\x00\x08\xc0\x98\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0\x98\x00\x02\x00\x08\xc0\xe6\x00/\x80\x01\x00\x00\x11\x94\x00\t\xc0\xe6\x00\x05\x00\x00\x80\x00@\xc0`\x00/\x80\x01\x00\x00\x00x\x00\x08\xc0`\x00\x04@\x00\x00\x08\x00\x00)\x05\xa0\x00\x00\x11\x94\x00\x12\x00\x04\x00\x0e\x00\xcf&\xe3\x14M\x84\xc0$\xe3\x14M\x84\xc0') >>> assert isinstance(b.an[7], DNSRRSRV) >>> assert b.an[7].target == b'sCapys-fLuff.local.' >>> assert b.an[6].rrname == b'_apple-mobdev2._tcp.local.' >>> assert b.an[6].rdata == b'24:e3:14:4d:84:c0@fe80::26e3:14ff:fe4d:84c0._apple-mobdev2._tcp.local.' ###(006)=[passed] DNS frame with decompression hidden args >>> c = b'\x01\x00^\x00\x00\xfb\x14\x0cv\x8f\xfe(\x08\x00E\x00\x01C\xe3\x91@\x00\xff\x11\xf4u\xc0\xa8\x00\xfe\xe0\x00\x00\xfb\x14\xe9\x14\xe9\x01/L \x00\x00\x84\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05_raop\x04_tcp\x05local\x00\x00\x0c\x00\x01\x00\x00\x11\x94\x00\x1e\x1b140C768FFE28@Freebox Server\xc0\x0c\xc0(\x00\x10\x80\x01\x00\x00\x11\x94\x00\xa0\ttxtvers=1\x08vs=190.9\x04ch=2\x08sr=44100\x05ss=16\x08pw=false\x06et=0,1\x04ek=1\ntp=TCP,UDP\x13am=FreeboxServer1,2\ncn=0,1,2,3\x06md=0,2\x07sf=0x44\x0bft=0xBF0A00\x08sv=false\x07da=true\x08vn=65537\x04vv=2\xc0(\x00!\x80\x01\x00\x00\x00x\x00\x19\x00\x00\x00\x00\x13\x88\x10Freebox-Server-3\xc0\x17\xc1\x04\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x00\xfe' >>> pkt = Ether(c) >>> assert DNS in pkt >>> assert pkt.an[0].rdata == b'140C768FFE28@Freebox Server._raop._tcp.local.' >>> assert pkt.an[1].rdata == [b'txtvers=1', b'vs=190.9', b'ch=2', b'sr=44100', b'ss=16', b'pw=false', b'et=0,1', b'ek=1', b'tp=TCP,UDP', b'am=FreeboxServer1,2', b'cn=0,1,2,3', b'md=0,2', b'sf=0x44', b'ft=0xBF0A00', b'sv=false', b'da=true', b'vn=65537', b'vv=2'] >>> assert pkt.an[2].rrname == b'140C768FFE28@Freebox Server._raop._tcp.local.' >>> assert pkt.an[2].port == 5000 >>> assert pkt.an[2].target == b'Freebox-Server-3.local.' >>> assert pkt.an[3].rrname == b'Freebox-Server-3.local.' >>> assert pkt.an[3].rdata == '192.168.0.254' ###(007)=[passed] Other compressed DNS >>> s = b'\x00\x00\x84\x00\x00\x00\x00\x02\x00\x00\x00\x06\x0bGourmandise\x04_smb\x04_tcp\x05local\x00\x00!\x80\x01\x00\x00\x00x\x00\x14\x00\x00\x00\x00\x01\xbd\x0bGourmandise\xc0"\x0bGourmandise\x0b_afpovertcp\xc0\x1d\x00!\x80\x01\x00\x00\x00x\x00\x08\x00\x00\x00\x00\x02$\xc09\xc09\x00\x1c\x80\x01\x00\x00\x00x\x00\x10\xfe\x80\x00\x00\x00\x00\x00\x00\x00s#\x99\xca\xf7\xea\xdc\xc09\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x01x\xc09\x00\x1c\x80\x01\x00\x00\x00x\x00\x10*\x01\xcb\x00\x0bD\x1f\x00\x18k\xb1\x99\x90\xdf\x84.\xc0\x0c\x00/\x80\x01\x00\x00\x00x\x00\t\xc0\x0c\x00\x05\x00\x00\x80\x00@\xc0G\x00/\x80\x01\x00\x00\x00x\x00\t\xc0G\x00\x05\x00\x00\x80\x00@\xc09\x00/\x80\x01\x00\x00\x00x\x00\x08\xc09\x00\x04@\x00\x00\x08' >>> pkt = DNS(s) >>> assert [x.rrname for x in pkt.ar] == [ ... b'Gourmandise.local.', ... b'Gourmandise.local.', ... b'Gourmandise.local.', ... b'Gourmandise._smb._tcp.local.', ... b'Gourmandise._afpovertcp._tcp.local.', ... b'Gourmandise.local.' ... ] ###(008)=[passed] DNS advanced building >>> pkt = DNS(qr=1, qd=[], aa=1, rd=1) >>> pkt.an = [ ... DNSRR(type=12, rrname='_raop._tcp.local.', rdata='140C768FFE28@Freebox Server._raop._tcp.local.'), ... DNSRR(rrname='140C768FFE28@Freebox Server._raop._tcp.local.', type=16, rdata=[b'txtvers=1', b'vs=190.9', b'ch=2', b'sr=44100', b'ss=16', b'pw=false', b'et=0,1', b'ek=1', b'tp=TCP,UDP', b'am=FreeboxServer1,2', b'cn=0,1,2,3', b'md=0,2', b'sf=0x44', b'ft=0xBF0A00', b'sv=false', b'da=true', b'vn=65537', b'vv=2']), ... DNSRRSRV(rrname='140C768FFE28@Freebox Server._raop._tcp.local.', target='Freebox-Server-3.local.', port=5000, type=33, cacheflush=1, rclass=1), ... DNSRR(rrname='Freebox-Server-3.local.', rdata='192.168.0.254', cacheflush=1, rclass=1, type=1, ttl=120), ... ] >>> >>> pkt = DNS(raw(pkt)) >>> >>> assert DNSRRSRV in pkt.an[2] >>> assert pkt.an[2][DNSRRSRV].target == b'Freebox-Server-3.local.' >>> assert pkt.an[2][DNSRRSRV].rrname == b'140C768FFE28@Freebox Server._raop._tcp.local.' >>> >>> assert pkt.an[3].rrname == b'Freebox-Server-3.local.' >>> assert pkt.an[3].rdata == '192.168.0.254' ###(009)=[passed] Basic DNS Compression >>> assert len(pkt) == 426 >>> >>> z = pkt.compress() >>> >>> assert len(z) == 295 >>> assert z.an[0].rrname == b'_raop._tcp.local.' >>> assert z.an[0].rdata == b'\x1b140C768FFE28@Freebox Server\xc0\x0c' >>> assert z.an[1].rrname == z.an[2].rrname == b'\xc0(' >>> assert z.an[2].target == b'\x10Freebox-Server-3\xc0\x17' >>> assert z.an[3].rrname == b'\xc1\x04' >>> >>> raw(z) b'\x00\x00\x85\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05_raop\x04_tcp\x05local\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x1e\x1b140C768FFE28@Freebox Server\xc0\x0c\xc0(\x00\x10\x00\x01\x00\x00\x00\x00\x00\xa0\ttxtvers=1\x08vs=190.9\x04ch=2\x08sr=44100\x05ss=16\x08pw=false\x06et=0,1\x04ek=1\ntp=TCP,UDP\x13am=FreeboxServer1,2\ncn=0,1,2,3\x06md=0,2\x07sf=0x44\x0bft=0xBF0A00\x08sv=false\x07da=true\x08vn=65537\x04vv=2\xc0(\x00!\x80\x01\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x13\x88\x10Freebox-Server-3\xc0\x17\xc1\x04\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x00\xfe' >>> >>> assert raw(z) == b'\x00\x00\x85\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05_raop\x04_tcp\x05local\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x1e\x1b140C768FFE28@Freebox Server\xc0\x0c\xc0(\x00\x10\x00\x01\x00\x00\x00\x00\x00\xa0\ttxtvers=1\x08vs=190.9\x04ch=2\x08sr=44100\x05ss=16\x08pw=false\x06et=0,1\x04ek=1\ntp=TCP,UDP\x13am=FreeboxServer1,2\ncn=0,1,2,3\x06md=0,2\x07sf=0x44\x0bft=0xBF0A00\x08sv=false\x07da=true\x08vn=65537\x04vv=2\xc0(\x00!\x80\x01\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x13\x88\x10Freebox-Server-3\xc0\x17\xc1\x04\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x00\xfe' >>> >>> recompressed = DNS(raw(z)) >>> recompressed.clear_cache() >>> recompressed.an[0].rdlen = None >>> recompressed.an[1].rdlen = None >>> recompressed.an[2].rdlen = None >>> recompressed.an[3].rdlen = None >>> >>> assert raw(recompressed) == raw(pkt) ###(010)=[passed] DNS cache clearance on sub change >>> p = DNS(b'\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x03H-1\x05local\x00\x00\x05\x00\x01\x00\x00\x00\x00\x00\x06\x03H-2\xc0\x10\xc0!\x00\x05\x00\x01\x00\x00\x00\x00\x00\x02\xc0\x0c') >>> p[DNS].an[0].rrname = 'H' >>> assert p.raw_packet_cache is None >>> assert bytes(p) == b'\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x01H\x00\x00\x05\x00\x01\x00\x00\x00\x00\x00\x0b\x03H-2\x05local\x00\x03H-2\x05local\x00\x00\x05\x00\x01\x00\x00\x00\x00\x00\x0b\x03H-1\x05local\x00' ###(011)=[passed] DNS frames with MX records >>> frame = b'E\x00\x00\xa4\x93\x1d\x00\x00y\x11\xdc\xfc\x08\x08\x08\x08\xc0\xa8\x00w\x005\xb4\x9b\x00\x90k\x80\x00\x00\x81\x80\x00\x01\x00\x05\x00\x00\x00\x00\x06google\x03com\x00\x00\x0f\x00\x01\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02B\x00\x11\x00\x1e\x04alt2\x05aspmx\x01l\xc0\x0c\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02B\x00\t\x00\x14\x04alt1\xc0/\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02B\x00\t\x002\x04alt4\xc0/\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02B\x00\t\x00(\x04alt3\xc0/\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02B\x00\x04\x00\n\xc0/' >>> pkt = IP(frame) >>> results = [x.exchange for x in pkt.an] >>> assert results == [b'alt2.aspmx.l.google.com.', b'alt1.aspmx.l.google.com.', b'alt4.aspmx.l.google.com.', b'alt3.aspmx.l.google.com.', b'aspmx.l.google.com.'] >>> >>> pkt.clear_cache() >>> assert raw(dns_compress(pkt)) == frame ###(012)=[passed] DNS frame with typebitmaps >>> compressed_pkt = b'\x01\x00^\x00\x00\xfb\xa0\x10\x81\xd9\xd3y\x08\x00E\x00\x01\x14\\\n@\x00\xff\x116n\xc0\xa8F\xbc\xe0\x00\x00\xfb\x14\xe9\x14\xe9\x01\x00Ho\x00\x00\x84\x00\x00\x00\x00\x04\x00\x00\x00\x03\x03188\x0270\x03168\x03192\x07in-addr\x04arpa\x00\x00\x0c\x80\x01\x00\x00\x00x\x00\x0f\x07Android\x05local\x00\x019\x017\x013\x01D\x019\x01D\x01E\x01F\x01F\x01F\x011\x018\x010\x011\x012\x01A\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x010\x018\x01E\x01F\x03ip6\xc0#\x00\x0c\x80\x01\x00\x00\x00x\x00\x02\xc03\xc03\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8F\xbc\xc03\x00\x1c\x80\x01\x00\x00\x00x\x00\x10\xfe\x80\x00\x00\x00\x00\x00\x00\xa2\x10\x81\xff\xfe\xd9\xd3y\xc0\x0c\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0\x0c\x00\x02\x00\x08\xc0B\x00/\x80\x01\x00\x00\x00x\x00\x06\xc0B\x00\x02\x00\x08\xc03\x00/\x80\x01\x00\x00\x00x\x00\x08\xc03\x00\x04@\x00\x00\x08' >>> pkt = Ether(compressed_pkt) >>> assert pkt.ar[2].nextname == b"Android.local." >>> assert pkt.ar[2].sprintf("%typebitmaps%") == "['A', 'AAAA']" ###(013)=[passed] Advanced dns_get_str tests >>> full = b"\x06cheese\x00blobofdata....\x06hamand\xc0\x00" >>> assert dns_get_str(full[22:], full=full)[0] == b'hamand.cheese.' ###(014)=[passed] Decompression loop in dns_get_str >>> full = b"\x04data\xc0\x00" >>> assert dns_get_str(full, full=full)[0] == b"data.data." DNS decompression loop detected ###(015)=[passed] Prematured end in dns_get_str >>> assert dns_get_str(b"\x06da", 0)[0] == b"da." DNS RR prematured end (ofs=7, len=3) >>> >>> full = b"\x04data\xc0\x0f" >>> assert dns_get_str(full, full=full)[0] == b"data." DNS RR prematured end (ofs=15, len=7) ###(016)=[passed] DNS record type 13 (HINFO) >>> b = b'\x00\x00\r\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00' >>> >>> p = DNSRRHINFO() >>> assert raw(p) == b >>> >>> p = DNSRRHINFO(b) >>> assert p.cpu == b'' and p.os == b'' >>> >>> b = b'\x00\x00\r\x00\x01\x00\x00\x00\x00\x00\r\x06X86_64\x05LINUX' >>> >>> p = DNSRRHINFO(cpu='X86_64', os='LINUX') >>> assert raw(p) == b >>> >>> p = DNSRRHINFO(b) >>> assert p.cpu == b'X86_64' and p.os == b'LINUX' >>> >>> d = DNS(raw(DNS(qd=[],an=[p]))) >>> assert raw(d.an[0]) == raw(p) ###(017)=[passed] DNS record type 15 (MX) >>> p = DNS(raw(DNS(qd=[],an=DNSRRMX(exchange='example.com')))) >>> assert p.an[0].exchange == b'example.com.' ###(018)=[passed] DNS record type 16 (TXT) >>> p = DNS(raw(DNS(id=1,ra=1,qd=[],an=DNSRR(rrname='scapy', type='TXT', rdata="niceday", ttl=1)))) >>> assert p[DNS].an[0].rdata == [b"niceday"] >>> >>> p = DNS(raw(DNS(id=1,ra=1,qd=[],an=DNSRR(rrname='secdev', type='TXT', rdata=["sweet", "celestia"], ttl=1)))) >>> assert p[DNS].an[0].rdata == [b"sweet", b"celestia"] >>> assert raw(p) == b'\x00\x01\x01\x80\x00\x00\x00\x01\x00\x00\x00\x00\x06secdev\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x0f\x05sweet\x08celestia' >>> >>> b = b'\x05scapy\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\x01\x00' >>> rr = DNSRR(b) >>> assert rr.rdata == [b""] >>> assert rr.rdlen == 1 >>> rr.clear_cache() >>> assert DNSRR(raw(rr)).rdata == [b""] >>> >>> rr = DNSRR(rrname='scapy', type='TXT', rdata=[""]) >>> assert raw(rr) == b >>> >>> rr = DNSRR(rrname='scapy', type='TXT') >>> assert raw(rr) == b >>> >>> b = b'\x05scapy\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00' >>> rr = DNSRR(b) >>> assert rr.rdata == [] >>> assert rr.rdlen == 0 >>> rr.clear_cache() >>> assert DNSRR(raw(rr)).rdata == [] >>> >>> rr = DNSRR(rrname='scapy', type='TXT', rdata=[]) >>> assert raw(rr) == b ###(019)=[passed] DNS record type 35 (NAPTR) >>> b = b'\x00\x00#\x00\x01\x00\x00\x00\x00\x00+\x00\n\x00d\x01u\x07E2U+sip\x1b!^.*$!sip:info@example.com!\x00' >>> >>> p = DNSRRNAPTR(b) >>> assert p.order == 10 and p.preference == 100 and p.flags == b'u' and p.services == b'E2U+sip' >>> assert p.regexp == b'!^.*$!sip:info@example.com!' and p.replacement == b'.' >>> >>> p = DNSRRNAPTR(order=10, preference=100, flags="u", services="E2U+sip", regexp="!^.*$!sip:info@example.com!") >>> assert raw(p) == b ###(020)=[passed] DNS record type 39 (DNAME) >>> b = b'\x05local\x00\x00\x27\x00\x01\x00\x00\x00\x00\x00\x07\x05local\x00' >>> >>> p = DNSRR(b) >>> assert p.rrname == b'local.' and p.type == 39 and p.rdata == b'local.' >>> >>> p = DNSRR(rrname=b'local', type='DNAME', rdata='local') >>> assert raw(p) == b >>> >>> >>> p = DNS(qd=[], an=[DNSRR(rrname='local', type='DNAME', rdata='local')]) >>> assert raw(p).endswith(b'\x07\x05local\x00') >>> >>> rr = DNS(raw(p)).an[0] >>> assert rr.rrname == b'local.' and rr.type == 39 and rr.rdata == b'local.' >>> >>> cp = dns_compress(p) >>> assert raw(cp).endswith(b'\x02\xc0\x0c') >>> >>> rr = DNS(raw(cp)).an[0] >>> assert rr.rrname == b'local.' and rr.type == 39 and rr.rdata == b'local.' ###(021)=[passed] DNS record type 64, 65 (SVCB, HTTPS) >>> b = b'\x00\x00\x00\x04\x00\x01\x00\x06' >>> p = SvcParam(b) >>> assert p.key == 0 and p.value == [1, 6] >>> assert b == raw(SvcParam(key='mandatory', value=['alpn', 'ipv6hint'])) >>> >>> b = b'\x00\x01\x00\x06\x02h3\x02h2' >>> p = SvcParam(b) >>> assert p.key == 1 and p.value == [b'h3', b'h2'] >>> assert b == raw(SvcParam(key='alpn', value=['h3', 'h2'])) >>> >>> b = b'\x00\x02\x00\x00' >>> p = SvcParam(b) >>> assert p.key == 2 and p.value == [] >>> assert b == raw(SvcParam(key='no-default-alpn')) >>> >>> b = b'\x00\x03\x00\x02\x04\xd2' >>> p = SvcParam(b) >>> assert p.key == 3 and p.value == 1234 >>> assert b == raw(SvcParam(key='port', value=1234)) >>> >>> b = b'\x00\x04\x00\x08\xc0\xa8\x00\x01\xc0\xa8\x00\x02' >>> p = SvcParam(b) >>> assert p.key == 4 and p.value == ['192.168.0.1', '192.168.0.2'] >>> assert b == raw(SvcParam(key='ipv4hint', value=['192.168.0.1', '192.168.0.2'])) >>> >>> b = b'\x00\x06\x00\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> p = SvcParam(b) >>> assert p.key == 6 and p.value == ['2001:db8::1'] >>> assert b == raw(SvcParam(key='ipv6hint', value=['2001:db8::1'])) >>> >>> b = b'\x00\x07\x00\x10/dns-query{?dns}' >>> p = SvcParam(b) >>> assert p.key == 7 and p.value == b'/dns-query{?dns}' >>> assert b == raw(SvcParam(key='dohpath', value=b'/dns-query{?dns}')) >>> >>> p = DNSRRSVCB() >>> assert p.rrname == b'.' and p.type == 64 and p.svc_priority == 0 and p.svc_params == [] >>> >>> p = DNSRRHTTPS() >>> assert p.rrname == b'.' and p.type == 65 and p.svc_priority == 0 and p.svc_params == [] >>> >>> b = b'\x04_dns\x03one\x03one\x03one\x03one\x00\x00@\x00\x01\x00\x00\x01,\x001\x00\x01\x03one\x03one\x03one\x03one\x00\x00\x01\x00\x06\x02h3\x02h2\x00\x07\x00\x10/dns-query{?dns}' >>> p = DNSRRSVCB(b) >>> assert p.type == 64 and p.ttl == 300 and p.svc_priority == 1 and p.target_name == b'one.one.one.one.' >>> >>> alpn = SvcParam(key='alpn', value=['h3', 'h2']) >>> dohpath = SvcParam(key='dohpath', value=b'/dns-query{?dns}') >>> >>> assert raw(p.svc_params[0]) == raw(alpn) >>> assert raw(p.svc_params[1]) == raw(dohpath) >>> >>> assert b == raw(DNSRRSVCB(rrname='_dns.one.one.one.one', ttl=300, svc_priority=1, target_name='one.one.one.one', svc_params=[alpn, dohpath])) >>> >>> b = b'\ncloudflare\x03com\x00\x00A\x00\x01\x00\x00\x00>\x00=\x00\x01\x00\x00\x01\x00\x06\x02h3\x02h2\x00\x04\x00\x08h\x10\x84\xe5h\x10\x85\xe5\x00\x06\x00 &\x06G\x00\x00\x00\x00\x00\x00\x00\x00\x00h\x10\x84\xe5&\x06G\x00\x00\x00\x00\x00\x00\x00\x00\x00h\x10\x85\xe5' >>> >>> p = DNSRRHTTPS(b) >>> assert p.type == 65 and p.ttl == 62 and p.svc_priority == 1 and p.target_name == b'.' >>> >>> alpn = SvcParam(key='alpn', value=['h3', 'h2']) >>> ipv4hint = SvcParam(key='ipv4hint', value=['104.16.132.229', '104.16.133.229']) >>> ipv6hint = SvcParam(key='ipv6hint', value=['2606:4700::6810:84e5', '2606:4700::6810:85e5']) >>> >>> assert raw(p.svc_params[0]) == raw(alpn) >>> assert raw(p.svc_params[1]) == raw(ipv4hint) >>> assert raw(p.svc_params[2]) == raw(ipv6hint) >>> >>> assert b == raw(DNSRRHTTPS(rrname='cloudflare.com', ttl=62, svc_priority=1, target_name='.', svc_params=[alpn, ipv4hint, ipv6hint])) ###(022)=[passed] DNS - Malformed DNS over TCP message >>> _old_dbg = conf.debug_dissector >>> conf.debug_dissector = True >>> >>> try: ... p = IP(raw(IP()/TCP()/DNS(qd=[],length=28))[:-13]) ... assert False ... except Scapy_Exception as e: ... assert str(e) == "Malformed DNS message: too small!" ... Malformed DNS message: too small! DNS dissector failed TCP dissector failed >>> try: ... p = IP(raw(IP()/TCP()/DNS(qd=[],length=28, qdcount=1))) ... assert False ... except Scapy_Exception as e: ... assert str(e) == "Malformed DNS message: invalid length!" ... Malformed DNS message: invalid length! more DNS dissector failed >>> conf.debug_dissector = _old_dbg ###(023)=[passed] DNS - dns_compress on decompressed packet >>> data = b'E\x00\x00n~\x82\x00\x00{\x11\xae\xeb\x08\x08\x08\x08\x01\x01\x01\x01\x005\x005\x00Z!\x17\x00\x00\x81\x80\x00\x01\x00\x00\x00\x01\x00\x00\x03www\x06google\x03com\x00\x00\x0f\x00\x01\xc0\x10\x00\x06\x00\x01\x00\x00\x002\x00&\x03ns1\xc0\x10\tdns-admin\xc0\x10\x14Po\x8f\x00\x00\x03\x84\x00\x00\x03\x84\x00\x00\x07\x08\x00\x00\x00<' >>> >>> p = IP(data) >>> assert p.ns[0].rrname == b"google.com." >>> assert p.ns[0].mname == b"ns1.google.com." >>> assert p.ns[0].rname == b"dns-admin.google.com." >>> cp = dns_compress(p) >>> assert cp.ns[0].rrname == b'\xc0\x10' >>> assert cp.ns[0].mname == b'\x03ns1\xc0\x10' >>> assert cp.ns[0].rname == b'\tdns-admin\xc0\x10' >>> p = IP(raw(cp)) >>> assert p.ns[0].rrname == b"google.com." >>> assert p.ns[0].mname == b"ns1.google.com." >>> assert p.ns[0].rname == b"dns-admin.google.com." ###(024)=[passed] DNS - dns_compress on close indexes >>> p = dns_compress(DNS(qd=DNSQR(qname=b'scapy.'), an=DNSRR(rrname=b'scapy.'), ar=DNSRROPT(rrname=b'.'))) >>> assert raw(p) == b'\x00\x00\x01\x00\x00\x01\x00\x01\x00\x00\x00\x01\x05scapy\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00)\x10\x00\x00\x00\x80\x00\x00\x00' >>> >>> p = DNS(raw(p)) >>> assert p.qd[0].qname == b'scapy.' >>> assert p.an[0].rrname == b'scapy.' >>> assert p.ar[0].rrname == b'.' ###(025)=[passed] DNS - dns_compress with 1-length strings >>> data = b'\xac\x81\x81\x80\x00\x01\x00\x06\x00\r\x00\x00\x04mqtt\x0bweatherflow\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x00\xe4\x00>> >>> p = DNS(data) >>> cmp = p.compress() >>> assert bytes(cmp) == data ###(026)=[passed] DNS - dns_compress with pointer b'\xc0.' >>> data = b'\x00\x02\x81\x00\x00\x01\x00\x03\x00\x00\x00\x00\x05forms\x06office\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x01\x1b\x00&\x05forms\x06office\x03com\x06b-0039\x08b-msedge\x03net\x00\xc0.\x00\x05\x00\x01\x00\x00\x00\xdf\x00\x02\xc0?\xc0?\x00\x01\x00\x01\x00\x00\x00\xdf\x00\x04\rk\x06\xc2' >>> >>> p = DNS(data) >>> cmp = p.compress() >>> assert bytes(cmp) == data ###(027)=[passed] DNS - dns_encode edge cases >>> assert dns_encode(b"www.google.com") == b'\x03www\x06google\x03com\x00' >>> assert dns_encode(b"*") == b'\x01*\x00' >>> assert dns_encode(dns_encode(b"*")) == b'\x03\x01*\x00' ###(028)=[passed] DNS - simple request >>> assert raw(DNS()) == b'\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x07example\x03com\x00\x00\x01\x00\x01' ###(029)=[passed] DNS - OOM test >>> import zlib >>> data = zlib.decompress(b'x\x9c\xed\xce!\n\xc2`\x00\x80\xd1\x7f\x0c\xc1\xbal\xf1\x12\x1e\xc0 Vob3\xaf+\xec\x02\xbb\x82x\x83\xb1"\xa2\xc1\xac\x06\x9b\xc9\xb0"\x0b3\xccdV\x93\xa0\x0f^\xfc\xc2w^\x16U\x88\x8a\xd5n\xdf\xb6\xdd0\n\xf5q\xb1\t!M&Y>K\xae\xf9\xacw\t\x83\xe8V\xaf\x0f\xa7m\xdaV\xf78z\xad\x1f\xbf\x95=5\xd9\x071\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x0f\xe94\xdf\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x15\x85\xe18.\xcbrZ\xce\x1f5u\n\xd1') >>> >>> old_max_list_count = conf.max_list_count >>> conf.max_list_count = 10 >>> import time >>> t = time.monotonic() >>> >>> with no_debug_dissector(): ... try: ... dns = Ether(data) ... except MaximumItemsCount: ... pass ... >>> delta = time.monotonic() - t >>> assert delta < 10 >>> >>> conf.max_list_count = old_max_list_count ###(030)=[passed] DNS - Backward compatibility: keep deprecated behavior >>> c = b'\x01\x00^\x00\x00\xfb\x14\x0cv\x8f\xfe(\x08\x00E\x00\x01C\xe3\x91@\x00\xff\x11\xf4u\xc0\xa8\x00\xfe\xe0\x00\x00\xfb\x14\xe9\x14\xe9\x01/L \x00\x00\x84\x00\x00\x00\x00\x04\x00\x00\x00\x00\x05_raop\x04_tcp\x05local\x00\x00\x0c\x00\x01\x00\x00\x11\x94\x00\x1e\x1b140C768FFE28@Freebox Server\xc0\x0c\xc0(\x00\x10\x80\x01\x00\x00\x11\x94\x00\xa0\ttxtvers=1\x08vs=190.9\x04ch=2\x08sr=44100\x05ss=16\x08pw=false\x06et=0,1\x04ek=1\ntp=TCP,UDP\x13am=FreeboxServer1,2\ncn=0,1,2,3\x06md=0,2\x07sf=0x44\x0bft=0xBF0A00\x08sv=false\x07da=true\x08vn=65537\x04vv=2\xc0(\x00!\x80\x01\x00\x00\x00x\x00\x19\x00\x00\x00\x00\x13\x88\x10Freebox-Server-3\xc0\x17\xc1\x04\x00\x01\x80\x01\x00\x00\x00x\x00\x04\xc0\xa8\x00\xfe' >>> pkt = Ether(c) >>> with warnings.catch_warnings(record=True) as w: ... warnings.simplefilter("always") ... assert pkt.an.rdata == b'140C768FFE28@Freebox Server._raop._tcp.local.' ... assert len(w) == 1 and issubclass(w[-1].category, DeprecationWarning) ... >>> with warnings.catch_warnings(record=True) as w: ... warnings.simplefilter("always") ... pkt = DNS(qr=1, qd=None, aa=1, rd=1) ... assert len(w) == 1 and issubclass(w[-1].category, DeprecationWarning) ... >>> pkt = DNS(bytes(pkt)) >>> assert pkt.qd == [] ###(031)=[passed] DNS - command >>> p = DNS() >>> assert p == eval(p.command()) >>> >>> p = DNS(qd=[]) >>> assert p == eval(p.command()) ###(032)=[passed] DNS - iter through DNSStrFields >>> pkt = DNSQR(qname=["domain1.com", "domain2.com"], qtype="A") >>> for i in pkt: ... assert i.qname in [b"domain1.com.", b"domain2.com."] ... Test campaign ━ Run at 04:11:35 from [test/scapy/layers/dns_dnssec.uts] by UTscapy in 0.06194877624511719 └ Passed=30 └ Failed=0 ###### ## bitmap2RRlist() ###### ###(000)=[passed] example from RFC 4034 >>> RRlist2bitmap([1, 15, 46, 47, 1234]) == b'\x00\x06@\x01\x00\x00\x00\x03\x04\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20' True ###(001)=[passed] [0] >>> RRlist2bitmap([0]) == b'\x00\x01\x80' True ###(002)=[passed] [0,1,2,3,4,5,6,7] >>> RRlist2bitmap([0,1,2,3,4,5,6,7]) == b'\x00\x01\xff' True ###(003)=[passed] [256,512,4096,36864] >>> RRlist2bitmap([256,512,4096,36864]) == b'\x01\x01\x80\x02\x01\x80\x10\x01\x80\x90\x01\x80' True ###(004)=[passed] [65535] >>> RRlist2bitmap([65535]) == b'\xff\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###### ## From RRlist2bitmap() to bitmap2RRlist() ###### ###(005)=[passed] example from RFC 4034 >>> b = b'\x00\x06@\x01\x00\x00\x00\x03\x04\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20' >>> RRlist2bitmap(bitmap2RRlist(b)) == b True ###(006)=[passed] [0] >>> b= b'\x00\x01\x80' >>> RRlist2bitmap(bitmap2RRlist(b)) == b True ###(007)=[passed] [0,1,2,3,4,5,6,7] >>> b = b'\x00\x01\xff' >>> RRlist2bitmap(bitmap2RRlist(b)) == b True ###(008)=[passed] [256,512,4096,36864] >>> b = b'\x01\x01\x80\x02\x01\x80\x10\x01\x80\x90\x01\x80' >>> RRlist2bitmap(bitmap2RRlist(b)) == b True ###(009)=[passed] [65535] >>> b = b'\xff\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> RRlist2bitmap(bitmap2RRlist(b)) == b True ###### ## Test NSEC RR ###### ###(010)=[passed] DNSRRNSEC(), basic instantiation >>> t = DNSRRNSEC() >>> raw(t) == b'\x00\x00/\x00\x01\x00\x00\x00\x00\x00\x01\x00' True ###(011)=[passed] DNSRRRNSEC(), check parameters >>> t = DNSRRNSEC(rrname="scapy.secdev.org.", rclass=42, ttl=28, nextname="www.secdev.org.", typebitmaps=RRlist2bitmap([1,2,3,4,1234])) >>> raw(t) == b'\x05scapy\x06secdev\x03org\x00\x00/\x00*\x00\x00\x00\x1c\x000\x03www\x06secdev\x03org\x00\x00\x01x\x04\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 ' True ###### ## Test NSEC3 RR ###### ###(012)=[passed] DNSRRNSEC3(), basic instantiation >>> t = DNSRRNSEC3() >>> raw(t) == b'\x00\x002\x00\x01\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00' True ###(013)=[passed] DNSRRRNSEC3(), check parameters >>> t = DNSRRNSEC3(rrname="scapy.secdev.org.", rclass=42, ttl=28, hashalg=7, iterations=80, saltlength=28, salt=b"\x28\x07", hashlength=31, nexthashedownername="XXX.scapy.secdev.org", typebitmaps=RRlist2bitmap([1,2,3,4,1234])) >>> raw(t) == b'\x05scapy\x06secdev\x03org\x00\x002\x00*\x00\x00\x00\x1c\x00<\x07\x00\x00P\x1c(\x07\x1fXXX.scapy.secdev.org\x00\x01x\x04\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 ' True ###### ## Test NSEC3PARAM RR ###### ###(014)=[passed] DNSRRNSEC3PARAM(), basic instantiation >>> t = DNSRRNSEC3PARAM() >>> raw(t) == b'\x00\x003\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00' True ###(015)=[passed] DNSRRRNSEC3PARAM(), check parameters >>> t = DNSRRNSEC3(rrname="scapy.secdev.org.", rclass=42, ttl=28, hashalg=7, flags=80, iterations=80, saltlength=28, salt=b"\x28\x07") >>> raw(t) == b'\x05scapy\x06secdev\x03org\x00\x002\x00*\x00\x00\x00\x1c\x00\x08\x07P\x00P\x1c(\x07\x00' True ###### ## Test RRSIG RR ###### ###(016)=[passed] DNSRRRSIG(), basic instantiation >>> t = DNSRRRSIG() >>> raw(t) == b'\x00\x00.\x00\x01\x00\x00\x00\x00\x00\x13\x00\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(017)=[passed] DNSRRRSIG(), check parameters >>> t = DNSRRRSIG(rrname="test.example.com.", type=46, rclass=12, ttl=64, originalttl=2807, keytag=42, signersname="test.rsig", signature="test RSIG") >>> raw(t) == b'\x04test\x07example\x03com\x00\x00.\x00\x0c\x00\x00\x00@\x00&\x00\x01\x05\x00\x00\x00\n\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00*\x04test\x04rsig\x00test RSIG' True ###(018)=[passed] DNSRRRSIG(), dissection >>> rrsig = b'\x03isc\x03org\x00\x00.\x00\x01\x00\x00\x96O\x00\x9b\x00\x02\x05\x02\x00\x00\xa8\xc0K-3\xd9K\x05\xa6\xd9\xed6\x03isc\x03org\x00\xac\xb2_I\x9e\xdcU\xca/3\x1c\xdf{\xba\xd5\x80\xb0 \xa4~\x98\x95\xab~\x84\xb2\x1f9\x17#\x7f\xfeP\xb9\xfb\x8d\x13\x19\xd7\x7f\x9e/\x1c\xd7rv<\xc6\xd3\xf1\xae8\rh\xba\x1e\xaa\xe6\xf1\x1e\x1d\xdaS\xd4\\\xfd\xa3`P\xa1\xe0\xa2\x860\xd4?\xb4}j\x81O\x03\xdc&v\x13\xd4(k\xa07\x8f-\x08e\x06\xff\xb8h\x8f\x16j\xe4\xd92\xd2\x99\xc2\xb4' >>> t = DNSRRRSIG(rrsig) >>> t.rrname == b'isc.org.' and t.labels == 2 and t.keytag == 60726 and t.signature[-4:] == b'\xd2\x99\xc2\xb4' True ###### ## Test DNSKEY RR ###### ###(019)=[passed] DNSRRDNSKEY(), basic instantiation >>> t = DNSRRDNSKEY() >>> raw(t) == b'\x00\x000\x00\x01\x00\x00\x00\x00\x00\x04\x01\x00\x03\x05' and t.sprintf("%flags%") == 'Z' True ###(020)=[passed] DNSRRDNSKEY(), check parameters >>> t = DNSRRDNSKEY(rrname="www.secdev.org.", type=42, rclass=12, ttl=1234, rdlen=567, flags=2807, protocol=195, algorithm=66, publickey="strong public key") >>> raw(t) == b'\x03www\x06secdev\x03org\x00\x00*\x00\x0c\x00\x00\x04\xd2\x027\n\xf7\xc3Bstrong public key' True ###(021)=[passed] DNSRRDNSKEY(), dissection >>> t = DNSRRDNSKEY(b'\x03dlv\x03isc\x03org\x00\x000\x00\x01\x00\x00\x1bq\x01\t\x01\x01\x03\x05\x04@\x00\x00\x03\xc72\xef\xf9\xa2|\xeb\x10N\xf3\xd5\xe8&\x86\x0f\xd6<\xed>\x8e\xea\x19\xadm\xde\xb9a\'\xe0\xccC\x08M~\x94\xbc\xb6n\xb8P\xbf\x9a\xcd\xdfdJ\xb4\xcc\xd7\xe8\xc8\xfb\xd27sx\xd0\xf8^I\xd6\xe7\xc7g$\xd3\xc2\xc6\x7f>\x8c\x01\xa5\xd8VK+\xcb~\xd6\xea\xb8[\xe9\xe7\x03z\x8e\xdb\xe0\xcb\xfaN\x81\x0f\x89\x9e\xc0\xc2\xdb!\x81p{C\xc6\xeft\xde\xf5\xf6v\x90\x96\xf9\xe9\xd8`1\xd7\xb9\xcae\xf8\x04\x8f\xe8C\xe7\x00+\x9d?\xc6\xf2o\xd3Ak\x7f\xc90\xea\xe7\x0cO\x01e\x80\xf7\xbe\x8eq\xb1<\xf1&\x1c\x0b^\xfdDdc\xad\x99~B\xe8\x04\x00\x03,t="\xb4\xb6\xb6\xbc\x80{\xb9\x9b\x05\x95\\;\x02\x1eS\xf4p\xfedq\xfe\xfc00$\xe05\xba\x0c@\xabTv\xf3W\x0e\xb6\t\r!\xd9\xc2\xcd\xf1\x89\x15\xc5\xd5\x17\xfej_T\x99\x97\xd2j\xff\xf85b\xca\x8c|\xe9O\x9fd\xfdT\xadL3taK\x96\xac\x13a') >>> t.rrname == b"dlv.isc.org." and t.rdlen == 265 and t.sprintf("%flags%") == 'SZ' and t.publickey == b'\x04@\x00\x00\x03\xc72\xef\xf9\xa2|\xeb\x10N\xf3\xd5\xe8&\x86\x0f\xd6<\xed>\x8e\xea\x19\xadm\xde\xb9a\'\xe0\xccC\x08M~\x94\xbc\xb6n\xb8P\xbf\x9a\xcd\xdfdJ\xb4\xcc\xd7\xe8\xc8\xfb\xd27sx\xd0\xf8^I\xd6\xe7\xc7g$\xd3\xc2\xc6\x7f>\x8c\x01\xa5\xd8VK+\xcb~\xd6\xea\xb8[\xe9\xe7\x03z\x8e\xdb\xe0\xcb\xfaN\x81\x0f\x89\x9e\xc0\xc2\xdb!\x81p{C\xc6\xeft\xde\xf5\xf6v\x90\x96\xf9\xe9\xd8`1\xd7\xb9\xcae\xf8\x04\x8f\xe8C\xe7\x00+\x9d?\xc6\xf2o\xd3Ak\x7f\xc90\xea\xe7\x0cO\x01e\x80\xf7\xbe\x8eq\xb1<\xf1&\x1c\x0b^\xfdDdc\xad\x99~B\xe8\x04\x00\x03,t="\xb4\xb6\xb6\xbc\x80{\xb9\x9b\x05\x95\\;\x02\x1eS\xf4p\xfedq\xfe\xfc00$\xe05\xba\x0c@\xabTv\xf3W\x0e\xb6\t\r!\xd9\xc2\xcd\xf1\x89\x15\xc5\xd5\x17\xfej_T\x99\x97\xd2j\xff\xf85b\xca\x8c|\xe9O\x9fd\xfdT\xadL3taK\x96\xac\x13a' True ###### ## Test DS and DLV RR ###### ###(022)=[passed] DNSRRDS() and DNSRRDLV(), basic instancaition >>> ds = DNSRRDS() >>> dlv = DNSRRDLV(type=43) >>> raw(ds) == raw(dlv) True ###(023)=[passed] DNSRRDS(), check parameters >>> t = DNSRRDS(b'\x03isc\x03org\x00\x00+\x00\x01\x00\x01Q(\x00\x182\\\x05\x01\x98!\x13\xd0\x8bLj\x1d\x9fj\xee\x1e"7\xae\xf6\x9f?\x97Y') >>> t.rrname == b'isc.org.' and t.keytag == 12892 and t.algorithm == 5 and t.digesttype == 1 and t.digest == b'\x98!\x13\xd0\x8bLj\x1d\x9fj\xee\x1e"7\xae\xf6\x9f?\x97Y' True ###### ## Test TXT RR ###### ###(024)=[passed] DNSRR(type="TXT") instantiation >>> t = DNSRR(type="TXT", rdata=b"test") >>> assert t.rdata == [b"test"] >>> assert raw(DNSRR(type="TXT", rdata=["hello", "DNS", "!"])) == b'\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\x0c\x05hello\x03DNS\x01!' ###(025)=[passed] Build DNSRR >>> an = DNSRR(type='AAAA', rdata='2001::1') >>> an = DNSRR(raw(an)) >>> assert an.rdata == '2001::1' ###(026)=[passed] DNSRRR(), check parameters >>> t = DNSRR(b'\x04test\x00\x00\x10\x00\x01\x00\x00\x00\x00\x018\xffScapy is an interactive packet manipulation program that enables you to sniff, mangle, send network packets ; test equipment ; probe and discover networks ; quickly develop new protocols. It can easily handle most classical tasks like scanning, tracerout7ing, probing, unit tests, attacks or network discovery.') DNS RR TXT prematured end of character-string (size=106, remaining bytes=55) >>> t.type == 16 and t.rdlen == 312 and t.rdata[0][:5] == b"Scapy" and t.rdata[1][-10:] == b"discovery." True ###### ## Test DNSRRTSIG RR ###### ###(027)=[passed] DNSRRTSIG basic instantiation >>> t = DNSRRTSIG() >>> raw(t) == b"\x00\x00\xfa\x00\x01\x00\x00\x00\x00\x00\x1b\thmac-sha1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00" True ###(028)=[passed] DNSRRTSIG(), check parameters >>> t = DNSRRTSIG(rrname="SAMPLE-ALG.EXAMPLE.", time_signed=853804800, fudge=300) >>> raw(t) == b"\nSAMPLE-ALG\x07EXAMPLE\x00\x00\xfa\x00\x01\x00\x00\x00\x00\x00\x1b\thmac-sha1\x00\x00\x002\xe4\x07\x00\x01,\x00\x14\x00\x00\x00\x00\x00\x00" True ###(029)=[passed] TimeField methods >>> packed_data = b"\x00\x002\xe4\x07\x00" >>> assert TimeSignedField("", 0).i2m("", 853804800) == packed_data >>> assert TimeSignedField("", 0).m2i("", packed_data) == 853804800 >>> assert TimeSignedField("", 0).i2repr("", 853804800) == "Tue Jan 21 00:00:00 1997" Test campaign ━ Run at 04:11:35 from [test/scapy/layers/dns_edns0.uts] by UTscapy in 0.10806751251220703 └ Passed=17 └ Failed=0 ###### ## Test EDNS0 rdata ###### ###(000)=[passed] EDNS0TLV(), basic instantiation >>> tlv = EDNS0TLV() >>> raw(tlv) == b'\x00\x00\x00\x00' True ###(001)=[passed] EDNS0TLV(), check parameters >>> tlv = EDNS0TLV(optcode=42, optlen=12, optdata="edns0tlv") >>> raw(tlv) == b'\x00*\x00\x0cedns0tlv' True ###(002)=[passed] EDNS0TLV(), check computed optlen >>> tlv = EDNS0TLV(optdata="edns0tlv") >>> raw(tlv) == b'\x00\x00\x00\x08edns0tlv' True ###(003)=[passed] EDNS0TLV(), dissection >>> tlv = EDNS0TLV(b'\x00*\x00\x08edns0tlv') >>> tlv.optcode == 42 and tlv.optlen == 8 and tlv.optdata == b"edns0tlv" True ###### ## Test OPT RR ###### ###(004)=[passed] DNSRROPT(), basic instantiation >>> opt = DNSRROPT() >>> raw(opt) == b'\x00\x00)\x10\x00\x00\x00\x80\x00\x00\x00' True ###(005)=[passed] DNSRROPT(), check parameters >>> opt = DNSRROPT(rrname="rropt", type=42, rclass=123, extrcode=1, version=2, z=3, rdlen=4, rdata=[EDNS0TLV()]) >>> raw(opt) == b'\x05rropt\x00\x00*\x00{\x01\x02\x00\x03\x00\x04\x00\x00\x00\x00' True ###(006)=[passed] DNSRROPT() & EDN0TLV(), check parameters >>> opt = DNSRROPT(rrname="rropt", type=42, rclass=123, extrcode=1, version=2, z=3, rdlen=4, rdata=[EDNS0TLV(optcode=42, optlen=12, optdata="edns0tlv")]) >>> raw(opt) == b'\x05rropt\x00\x00*\x00{\x01\x02\x00\x03\x00\x04\x00*\x00\x0cedns0tlv' True ###(007)=[passed] DNSRROP(), dissection >>> opt = DNSRROPT(b'\x05rropt\x00\x00*\x00{\x01\x02\x00\x03\x00\x0c\x00*\x00\x0cedns0tlv') >>> opt.rrname == b"rropt." and opt.rdlen == 12 and opt.rdata[0].optcode == 42 and opt.rdata[0].optdata == b"edns0tlv" True ###### ## Test EDNS-PING ###### ###(008)=[passed] EDNS-PING - basic instantiation >>> tlv = EDNS0TLV(optcode=5, optdata=b"\x00\x11\x22\x33") >>> raw(tlv) == b'\x00\x05\x00\x04\x00\x11"3' True ###### ## Test EDNS-COOKIE ###### ###(009)=[passed] EDNS-COOKIE - basic instantiation >>> tlv = EDNS0TLV(optcode="COOKIE", optdata=b"\x01" * 8) >>> assert tlv.optcode == 10 >>> assert raw(tlv) == b"\x00\x0A\x00\x08\x01\x01\x01\x01\x01\x01\x01\x01" ###### ## Test DNS Name Server Identifier (NSID) Option ###### ###(010)=[passed] NSID- basic instantiation >>> tlv = EDNS0TLV(optcode=2, optdata="") >>> raw(tlv) == b'\x00\x02\x00\x00' True ###### ## EDNS0 - DAU ###### ###(012)=[passed] Basic instantiation & dissection >>> b = b'\x00\x05\x00\x00' >>> >>> p = EDNS0DAU() >>> assert raw(p) == b >>> >>> p = EDNS0DAU(b) >>> assert p.optcode == 5 and p.optlen == 0 and p.alg_code == [] >>> >>> b = raw(EDNS0DAU(alg_code=['RSA/SHA-256', 'RSA/SHA-512'])) >>> >>> p = EDNS0DAU(b) >>> repr(p) '\x1b[0m<\x1b[0m\x1b[31m\x1b[1mEDNS0DAU\x1b[0m \x1b[34moptcode\x1b[0m\x1b[0m=\x1b[0m\x1b[35mDAU\x1b[0m \x1b[34moptlen\x1b[0m\x1b[0m=\x1b[0m\x1b[35m2\x1b[0m \x1b[34malg_code\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[RSA/SHA-256, RSA/SHA-512]\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m' >>> assert p.optcode == 5 and p.optlen == 2 and p.alg_code == [8, 10] ###### ## EDNS0 - DHU ###### ###(013)=[passed] Basic instantiation & dissection >>> b = b'\x00\x06\x00\x00' >>> >>> p = EDNS0DHU() >>> assert raw(p) == b >>> >>> p = EDNS0DHU(b) >>> assert p.optcode == 6 and p.optlen == 0 and p.alg_code == [] >>> >>> b = raw(EDNS0DHU(alg_code=['SHA-1', 'SHA-256', 'SHA-384'])) >>> >>> p = EDNS0DHU(b) >>> repr(p) '\x1b[0m<\x1b[0m\x1b[31m\x1b[1mEDNS0DHU\x1b[0m \x1b[34moptcode\x1b[0m\x1b[0m=\x1b[0m\x1b[35mDHU\x1b[0m \x1b[34moptlen\x1b[0m\x1b[0m=\x1b[0m\x1b[35m3\x1b[0m \x1b[34malg_code\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[SHA-1, SHA-256, SHA-384]\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m' >>> assert p.optcode == 6 and p.optlen == 3 and p.alg_code == [1, 2, 4] ###### ## EDNS0 - N3U ###### ###(014)=[passed] Basic instantiation & dissection >>> b = b'\x00\x07\x00\x00' >>> >>> p = EDNS0N3U() >>> assert raw(p) == b >>> >>> p = EDNS0N3U(b) >>> assert p.optcode == 7 and p.optlen == 0 and p.alg_code == [] >>> >>> b = raw(EDNS0N3U(alg_code=['SHA-1'])) >>> >>> p = EDNS0N3U(b) >>> repr(p) '\x1b[0m<\x1b[0m\x1b[31m\x1b[1mEDNS0N3U\x1b[0m \x1b[34moptcode\x1b[0m\x1b[0m=\x1b[0m\x1b[35mN3U\x1b[0m \x1b[34moptlen\x1b[0m\x1b[0m=\x1b[0m\x1b[35m1\x1b[0m \x1b[34malg_code\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[SHA-1]\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m' >>> assert p.optcode == 7 and p.optlen == 1 and p.alg_code == [1] ###### ## EDNS0 - Client Subnet ###### ###(015)=[passed] Basic instantiation & dissection >>> raw_d = b'\x00\x00)\x10\x00\x00\x00\x00\x00\x00\n\x00\x08\x00\x06\x00\x01\x10\x00\xc0\xa8' >>> >>> d = DNSRROPT(z=0, rdata=[EDNS0ClientSubnet()]) >>> assert raw(d) == raw_d >>> >>> d = DNSRROPT(raw_d) >>> assert EDNS0ClientSubnet in d.rdata[0] and d.rdata[0].family == 1 and d.rdata[0].address == "192.168.0.0" >>> >>> raw_d = b'\x00\x00)\x10\x00\x00\x00\x00\x00\x00\x0c\x00\x08\x00\x08\x00\x02 \x00 \x01\r\xb8' >>> d = DNSRROPT(z=0, rdata=[EDNS0ClientSubnet(address="2001:db8::")]) >>> assert raw(d) == raw_d >>> >>> d = DNSRROPT(raw_d) >>> assert EDNS0ClientSubnet in d.rdata[0] and d.rdata[0].family == 2 and d.rdata[0].address == "2001:db8::" ###### ## EDNS0 - Cookie ###### ###(016)=[passed] Basic instantiation & dissection >>> b = b'\x00\n\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> p = EDNS0COOKIE() >>> assert raw(p) == b >>> >>> p = EDNS0COOKIE(b) >>> assert p.optcode == 10 >>> assert p.optlen == 8 >>> assert p.client_cookie == b'\x00' * 8 >>> assert p.server_cookie == b'' >>> >>> b = b'\x00\n\x00\x18\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02' >>> >>> p = EDNS0COOKIE(client_cookie=b'\x01' * 8, server_cookie=b'\x02' * 16) >>> assert raw(p) == b >>> >>> p = EDNS0COOKIE(b) >>> assert p.optcode == 10 >>> assert p.optlen == 24 >>> assert p.client_cookie == b'\x01' * 8 >>> assert p.server_cookie == b'\x02' * 16 ###### ## EDNS0 - Extended DNS Error ###### ###(017)=[passed] Basic instantiation & dissection >>> b = b'\x00\x0f\x00\x02\x00\x00' >>> >>> p = EDNS0ExtendedDNSError() >>> assert raw(p) == b >>> >>> p = EDNS0ExtendedDNSError(b) >>> assert p.optcode == 15 and p.optlen == 2 and p.info_code == 0 and p.extra_text == b'' >>> >>> b = raw(EDNS0ExtendedDNSError(info_code="DNSSEC Bogus", extra_text="proof of non-existence of example.com. NSEC")) >>> >>> p = EDNS0ExtendedDNSError(b) >>> assert p.info_code == 6 and p.optlen == 45 and p.extra_text == b'proof of non-existence of example.com. NSEC' >>> >>> rropt = DNSRROPT(b'\x00\x00)\x04\xd0\x00\x00\x00\x00\x001\x00\x0f\x00-\x00\x06proof of non-existence of example.com. NSEC') >>> assert len(rropt.rdata) == 1 >>> p = rropt.rdata[0] >>> assert p.info_code == 6 and p.optlen == 45 and p.extra_text == b'proof of non-existence of example.com. NSEC' >>> >>> p = DNSRROPT(raw(DNSRROPT(rdata=[EDNS0ExtendedDNSError(), EDNS0ClientSubnet(), EDNS0TLV()]))) >>> assert len(p.rdata) == 3 >>> assert all(Raw not in opt for opt in p.rdata) >>> >>> for opt_class in EDNS0OPT_DISPATCHER.values(): ... p = DNSRROPT(raw(DNSRROPT(rdata=[EDNS0TLV(), opt_class(), opt_class()]))) ... assert len(p.rdata) == 3 ... assert all(Raw not in opt for opt in p.rdata) ... Dot11 regression tests for Scapy ━ Run at 04:11:36 from [test/scapy/layers/dot11.uts] by UTscapy in 0.755338191986084 └ Passed=60 └ Failed=0 ###### ## 802.11 ###### ###(000)=[passed] 802.11 - misc >>> PrismHeader().answers(PrismHeader()) == True True >>> >>> dpl = Dot11PacketList([Dot11()/LLC()/SNAP()/IP()/UDP()]) >>> len(dpl) == 1 True >>> >>> dpl_ether = dpl.toEthernet() No WEP to remove >>> len(dpl_ether) == 1 and Ether in dpl_ether[0] True ###(001)=[passed] Dot11 - build >>> s = raw(Dot11()) >>> s == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True >>> >>> pkt = Dot11(ID=0x1205) >>> raw_data = raw(pkt) >>> expected = b'\x05\x12' >>> assert raw_data[2:4] == b'\x05\x12', f"Encoded Dot11 ID field is {raw_data[2:4]}, expected {repr(expected)}." ###(002)=[passed] Dot11 - dissection >>> p = Dot11(s) >>> Dot11 in p and p.addr3 == "00:00:00:00:00:00" True >>> assert p.mysummary() == '802.11 Management Association Request 00:00:00:00:00:00 (TA=SA) > 00:00:00:00:00:00 (RA=DA)' >>> assert "DA" in p.address_meaning(1) >>> assert "SA" in p.address_meaning(2) >>> assert "BSSID" in p.address_meaning(3) >>> >>> pkt = b'\x00\x00\x05\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> decoded_pkt = Dot11(pkt) >>> assert decoded_pkt.ID == 0x1205, f"Decoded Dot11 ID field is {hex(decoded_pkt.ID)}, expected 0x1205." ###(003)=[passed] Dot11QoS - build >>> s = raw(Dot11()/Dot11QoS(Ack_Policy=1)) >>> assert s == b'\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00' >>> >>> s = raw(Dot11(type=2, subtype=8)/Dot11QoS(TID=4)) >>> assert s == b'\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' ###(004)=[passed] Dot11 - binary in SSID >>> pkt = Dot11() / Dot11Beacon() / Dot11Elt(ID=0, info=b"".join(chb(i) for i in range(32))) >>> pkt.show() ###[ 802.11 ]### subtype = Beacon type = Management proto = 0 FCfield = ID = 0 addr1 = 00:00:00:00:00:00 (RA=DA) addr2 = 00:00:00:00:00:00 (TA=SA) addr3 = 00:00:00:00:00:00 (BSSID/STA) SC = 0 ###[ 802.11 Beacon ]### timestamp = 0 beacon_interval= 100 cap = ###[ 802.11 Information Element ]### ID = SSID len = None info = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' >>> pkt.summary() "802.11 Management Beacon 00:00:00:00:00:00 (TA=SA) > 00:00:00:00:00:00 (RA=DA) / Dot11Beacon / SSID='\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'" >>> assert pkt[Dot11Elt::{"ID": 0}].summary() == "SSID='%s'" % "".join(chr(d) for d in range(32)) >>> >>> pkt = Dot11(raw(pkt)) >>> pkt.show() ###[ 802.11 ]### subtype = Beacon type = Management proto = 0 FCfield = ID = 0 addr1 = 00:00:00:00:00:00 (RA=DA) addr2 = 00:00:00:00:00:00 (TA=SA) addr3 = 00:00:00:00:00:00 (BSSID/STA) SC = 0 ###[ 802.11 Beacon ]### timestamp = 0 beacon_interval= 100 cap = ###[ 802.11 Information Element ]### ID = SSID len = 32 info = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' >>> pkt.summary() "802.11 Management Beacon 00:00:00:00:00:00 (TA=SA) > 00:00:00:00:00:00 (RA=DA) / Dot11Beacon / SSID='\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'" >>> assert pkt[Dot11Elt::{"ID": 0}].summary() == "SSID='%s'" % "".join(chr(d) for d in range(32)) ###(005)=[passed] Dot11QoS - dissection >>> p = Dot11(s) >>> assert Dot11QoS in p >>> assert p.TID == 4 >>> assert "DA" in p.address_meaning(1) >>> assert "SA" in p.address_meaning(2) >>> assert "BSSID" in p.address_meaning(3) ###(006)=[passed] Dot11 - answers >>> query = Dot11(type=0, subtype=0) >>> Dot11(type=0, subtype=1).answers(query) == True True ###(007)=[passed] Dot11 - misc >>> assert Dot11Elt(info="scapy").summary() == "SSID='scapy'" >>> assert Dot11Elt(ID=1).mysummary() == "" >>> assert Dot11(b'\x84\x00\x00\x00\x00\x11\x22\x33\x44\x55\x00\x11\x22\x33\x44\x55').addr2 == '00:11:22:33:44:55' ###(008)=[passed] Dot11 - type 1 subtype 4, 5, 6 >>> assert raw(Dot11(type=1, subtype=4, addr2="ff:ff:ff:ff:ff:ff")) == b'D\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff' >>> assert raw(Dot11(type=1, subtype=5, addr2="ff:ff:ff:ff:ff:ff")) == b'T\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff' >>> assert raw(Dot11(type=1, subtype=6, addr2="ff:ff:ff:ff:ff:ff", cfe=3)) == b'd0\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff' >>> assert raw(Dot11(type=1, subtype=6, addr2="ff:ff:ff:ff:ff:ff", cfe=6, addr3="aa:aa:aa:aa:aa:aa")) == b'd`\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa' >>> >>> assert Dot11(type=1, subtype=5).address_meaning(1) == 'RA' >>> assert Dot11(type=1, subtype=6, cfe=5).address_meaning(2) == 'TA' >>> assert Dot11(type=1, subtype=6, cfe=6).address_meaning(2) == 'NAV-SA' >>> assert Dot11(type=1, subtype=6, cfe=6).address_meaning(3) == 'NAV-DA' ###(009)=[passed] Multiple Dot11Elt layers >>> pkt = Dot11() / Dot11Beacon() / Dot11Elt(ID="Supported Rates") / Dot11Elt(ID="SSID", info="Scapy") >>> assert pkt[Dot11Elt::{"ID": 0}].info == b"Scapy" >>> assert pkt.getlayer(Dot11Elt, ID=0).info == b"Scapy" ###(010)=[passed] Dot11WEP - build >>> conf.wepkey = "" >>> assert raw(PPI()/Dot11(FCfield=0x40)/Dot11WEP()) == b'\x00\x00\x08\x00i\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' No WEP key set (conf.wepkey).. strange results expected.. >>> conf.wepkey = "test123" >>> assert raw(PPI()/Dot11(type=2, subtype=8, FCfield=0x40)/Dot11QoS()/Dot11WEP()) == b'\x00\x00\x08\x00i\x00\x00\x00\x88@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008(^a' ###(011)=[passed] Dot11WEP - dissect >>> conf.wepkey = "test123" >>> a = PPI(b'\x00\x00\x08\x00i\x00\x00\x00\x88@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008(^a') >>> assert a[Dot11QoS][Dot11WEP].icv == 942169697 ###(012)=[passed] Dot11TKIP - dissection >>> pkt = RadioTap(b'\x00\x00\x0f\x00*\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x08B\x00\x00\xff\xff\xff\xff\xff\xff\xfe\xec\xda\x1d\xa3M\x00\x04t\x14\x02BP+\x01!\x00\xa0\x01!\x00\xa0\x01!\x00\xa0\x00\x00\x00\x00\xb0\xb6sN\xbdl9S\xc3x\x9d\xa6TEp\xcd(\xebht{\xff9\x9a[\x0f~\x00\xf8&m$\x1e\xd2[dXn\x16\x8526G\x8c\x88\xc3B\xc9\xda^\xc5w\xa5 \x9a\xa0 \x08') >>> assert Dot11TKIP in pkt >>> >>> assert pkt[Dot11TKIP].TSC1 == 1 >>> assert pkt[Dot11TKIP].WEPSeed == 33 >>> assert pkt[Dot11TKIP].TSC0 == 0 >>> assert pkt[Dot11TKIP].key_id == 2 >>> assert pkt[Dot11TKIP].ext_iv == 1 >>> assert pkt[Dot11TKIP].res == 0 >>> assert pkt[Dot11TKIP].TSC2 == 1 >>> assert pkt[Dot11TKIP].TSC3 == 33 >>> assert pkt[Dot11TKIP].TSC4 == 0 >>> assert pkt[Dot11TKIP].TSC5 == 160 >>> >>> assert "DA" in pkt[Dot11].address_meaning(1) >>> assert "TA=BSSID" in pkt[Dot11].address_meaning(2) >>> assert "SA" in pkt[Dot11].address_meaning(3) ###(013)=[passed] Dot11CCMP - dissection >>> pkt = RadioTap(b'\x00\x00\x0f\x00*\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x08b\x00\x00\x01\x00^\x7f\xff\xfa\x0e\xec\xda\x1d\xa3M\x00\x0eX7\xbe\xbe\x00\x8aD#\x00\xa0D#\x00\xa0\x00\x00\x00\x00c\xb7\rv/s\x88N;>\x07\x0e\xe5\xd9\xf5\xfa\xcdD\xc2he\xfc\xc5^m\xae\xf2\xfe\xf9\xb06\xce\rt\xbe\x9d(\xb5\x98\x848NU\x0f\x93\x0f]m\xa2\x96\x80{\x95\x00\xb5\x98Y!\xa3^\xfc\xda\xca.R\xf3\xd3\xf8^\xeda\x88\x82p\xc6\xb8L\x0b\x815-\x85(\xb1F\xd5K\x166dJ\xc7\x04B\xdb\xec\x8d\xb7:{\x0f\'g<\x06\xd07>\xde\xad\x08\xcb\xffr\xfa\xf4}o\xe9\xa9b\xa5)\x87\x90\xa5{\xe1\xea\x0f\x0fGf`x1\xbd\xc1\xe8\xa0\xb6(\x05gq\xf3\x99\x9e\x93\xde\'\x8e\nQ\xf7\xad\xf7\x89"\xee\xcf\xe8$\x8a\x9c\xb4\xe6\x03\xab\x9ec\xd0\xd5\x08\xca\xd2\xbb\xae\xcc\x9c$R\xbc\xcdFO?\xc3Ah\x9ch\xd4\x9b)m\xea\xbab+\'\x06I2\xb5!\xdb\x03\xbe\xb8\xb2\x86\x0f\x80\n\xbc\x85\x02\xb4T\x00\x00\xc7|\xac\xc0B\xb2\x89\xbb\xc5\xc0\x93\x858\xe3Q\xf9\t\xff4\xdb\x9a>\xe5O-e\x16\x81w!9m\xb9dZ\xaa\xaa0\x9cW\xaa\xa3\xf1\xdd\xecW\xdd\xc41D\xe6\xba\xf3SQ\x81S\xf6\xbd\xe3\xc0e\xba\xa0*\x15%\x9cz0\xa8\xa6l\x8e\x0c(\xd3\xe4\xa2\xf9\xc2:Yae#T\x8d\xef\x01\xfad\x05/\xdb\xf2!D\xde~\x0f\x99\xf6U\xf5\xbf\xd0\xaf\xbe0\xf7\xf03\xa8s`\x8d>4\x98\xb5Y\x06dXFz\x88\x82\'B\x84\xe6\xca\x05\x02\xd5G\xb6\x11\xed <\xb1\xd4\xc9\xa9\xaa\xae\xc9\xb3g\xbc\xfd+\xe7\x1aG\x92\x17\xdb\xce\xf7\x843\xce4\xc4w\x8f\x8a\x83\xf0\'\xfe\x87\x14\x95\xd3\x0bM\xbaL$\xc8\x8d\' 8\x87c 3yt\xc5\xeeN\xc9\xe1\x95\x1d\xe9\xddh\x87E\x07\xe5\x86\xc7\x82\x8a\x88\x05\xa4\x06\xb1\x0c\xddV\xd0\xf0d\xc8\xcet`\xc5C\xcb\x8f\x06]A\x92\x1a\xae5wc\x8dN\xa2\xf0}aJ\x9c\x8e\xd1\xb2[*\xffK\x0f\xf8u\xd5\x84#\xc3"\xffX\x9f\xffC\x0fb\x02n\x1b\xbaAr\x93\xe1\xb7\x1f\x8e\x1c\xfev]w\xaa\xcch\x8c{lm\xb9\x9aE\x08\x1d\xc28u\x82\xa8\xbe\xf2\xb3\x11\xdc\x90 \x83\xa7\x9c*:\x01R\xcf\xd6\xc6~\x989\x9a5\xc97\xfa\x10\xe4!uEP\x968\x00*\xd0\xefE\xf8{\x1d(\xcb\xe3IR\\r\xee\x9fU\x14\ty\xe3\xdc\x96@\xf4\x8d\x17\xab\xcc\x98I\x8e\xe16\x9e\xa5+\xe0\xa8{S\x051##\x90:A') >>> assert Dot11CCMP in pkt >>> >>> assert pkt[Dot11CCMP].PN0 == 68 >>> assert pkt[Dot11CCMP].PN1 == 35 >>> assert pkt[Dot11CCMP].res0 == 0 >>> assert pkt[Dot11CCMP].key_id == 2 >>> assert pkt[Dot11CCMP].ext_iv == 1 >>> assert pkt[Dot11CCMP].res1 == 0 >>> assert pkt[Dot11CCMP].PN2 == 68 >>> assert pkt[Dot11CCMP].PN3 == 35 >>> assert pkt[Dot11CCMP].PN4 == 0 >>> assert pkt[Dot11CCMP].PN5 == 160 ###(014)=[passed] Dot11 - answers >>> a = Dot11()/Dot11Auth(seqnum=1) >>> b = Dot11()/Dot11Auth(seqnum=2) >>> assert b.answers(a) >>> assert not a.answers(b) >>> >>> assert not (Dot11()/Dot11Ack()).answers(Dot11()) >>> assert (Dot11()/LLC(dsap=2, ctrl=4)).answers(Dot11()/LLC(dsap=1, ctrl=5)) >>> >>> a = Dot11()/Dot11Auth(algo=3, seqnum=1) # non-AP STA --> AP STA COMMIT >>> b = Dot11()/Dot11Auth(algo=3, seqnum=1) # AP STA --> non-AP STA COMMIT >>> c = Dot11()/Dot11Auth(algo=3, seqnum=2) # non-AP STA --> AP STA CONFIRM >>> d = Dot11()/Dot11Auth(algo=3, seqnum=2) # AP STA --> non-AP STA CONFIRM >>> e = Dot11()/Dot11Auth(algo=0, seqnum=1) >>> >>> assert b.answers(a) >>> assert c.answers(b) >>> assert d.answers(c) >>> >>> assert not a.answers(e) >>> assert not c.answers(e) >>> assert not e.answers(a) >>> assert not e.answers(c) ###(015)=[passed] Dot11Beacon network_stats() >>> data = b'\x00\x00\x12\x00.H\x00\x00\x00\x02\x8f\t\xa0\x00\x01\x01\x00\x00\x80\x00\x00\x00\xff\xff\xff\xff\xff\xffDH\xc1\xb7\xf0uDH\xc1\xb7\xf0u\x10\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x11\x00\x00\x06SSID76\x01\n\x82\x84\x0c\x12\x18$0H`l\x03\x01\x080\x18\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x04\x00\x0f\xac\x02\x01\x00\x00\x0f\xac\x02\x0c\x00\x07\tUSI\x01\x18\x00\n\x05\xe7' >>> pkt = RadioTap(data) >>> nstats = pkt[Dot11Beacon].network_stats() >>> nstats {'ssid': 'SSID76', 'rates': [1.0, 2.0, 6.0, 9.0, 12.0, 18.0, 24.0, 36.0, 48.0, 54.0], 'channel': 8, 'country': 'US', 'country_desc_type': 'Indoor', 'crypto': {'WPA2/PSK'}} >>> assert nstats == { ... 'channel': 8, ... 'crypto': {'WPA2/PSK'}, ... 'rates': [1.0, 2.0, 6.0, 9.0, 12.0, 18.0, 24.0, 36.0, 48.0, 54.0], ... 'ssid': 'SSID76', ... 'country': 'US', ... 'country_desc_type': 'Indoor' ... } >>> >>> data = b'\x00\x00\x16\x00\x0f\x00\x00\x00|P\xb1\x82\xae\x86\x05\x00\x00\x02l\t\xa0\x00\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x02\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00:Q\xb1\x82\xae\x86\x05\x00d\x00\x11\x04\x00\x0cWPA3-Network\x01\x08\x82\x84\x8b\x96\x0c\x12\x18$\x03\x01\x01\x05\x04\x00\x02\x00\x00*\x01\x042\x040H`l0\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x08\xc0\x00;\x02Q\x00\x7f\x08\x04\x00\x00\x00\x00\x00\x00@' >>> pkt = RadioTap(data) >>> nstats = pkt[Dot11Beacon].network_stats() >>> nstats {'ssid': 'WPA3-Network', 'rates': [1.0, 2.0, 5.5, 11.0, 6.0, 9.0, 12.0, 18.0, 24.0, 36.0, 48.0, 54.0], 'channel': 1, 'crypto': {'WPA3/SAE'}} >>> assert nstats == { ... 'ssid': 'WPA3-Network', ... 'rates': [1.0, 2.0, 5.5, 11.0, 6.0, 9.0, 12.0, 18.0, 24.0, 36.0, 48.0, 54.0], ... 'channel': 1, ... 'crypto': {'WPA3/SAE'} ... } ###(016)=[passed] Dot11EltCountry dissection Country element: padding check Country element: Secondary padding check >>> data = b"\x00\x00&\x00/@\x00\xa0 \x08\x00\xa0 \x08\x00\x00R\xa9[#\x00\x00\x00\x00\x10\x18\x85\t\xc0\x00\xc8\x00\x00\x00\xc3\x00\xc7\x01P\x080\x00V\x9cm\xf4\xb1\xe9\xa0\xcf[\xfb%0\xa0\xcf[\xfb%0\xa0R&\x1a@\xc2\x06\x03\x00\x00f\x00!\x14\x00\x1eDisney Convention Center Guest\x01\x07\x12\x98$0H`l\x03\x01\x06\x07\x06US \x01\x0b\x1e\x0b\x05\n\x00\x8a\x8d[ \x01\x03*\x01\x00-\x1a,\x18\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\x03*L\x01=\x16\x06\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x05s\xc0\x00\x00\x00\x7f\x06\x00\x10\x00\x04\x01@\x85\x1e\x10\x00\x8f\x00\x0f\x00\xff\x03Y\x001617-AP33-SorcA\x00\n\x00\x00:\x96\x06\x00@\x96\x00\x0b\x00\xdd\x18\x00P\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00'\xa4\x00\x00BC^\x00b2/\x00\xdd\x06\x00@\x96\x01\x01\x04\xdd\x05\x00@\x96\x03\x05\xdd\x05\x00@\x96\x0bI\xdd\x05\x00@\x96\x14\x00dZ\x97\xbf" >>> pkt = RadioTap(data) >>> assert pkt[Dot11EltCountry].info == b'US \x01\x0b\x1e' >>> assert len(pkt[Dot11EltCountry].descriptors) == 1 >>> assert pkt[Dot11EltCountry].descriptors[0].mtp == 30 >>> >>> data = hex_bytes('00001a002f48000017cd9f3100000000000c3c144001e000000080000000ffffffffffff461b860bef06461b860bef06909403e0f75b0000000064001105000c4c697665626f782d3232353001088c1218243048606c0301240504020300000728504c202401172801172c01173001173401173801173c011740011764011e68011e6c011e70011e000b05000002ffff46050000000000200100c30502171717002a01002d1aef0117fffffffffeffffffff1f000001000000000018e6e719003d1624050000000000000000000000000000000000000000dd180050f2020101840003a4000027a4000042435e0062322f0030140100000fac040100000fac040100000fac020000bf0cb279c33faaff0000aaff0000c005012a00fcffdd1e002686010300dd00000025040592000601d15b5816830000000000000000dd06002686170000dd0e00268618010101024c1b860bef067f080100080200000040dd3b0050f204104a0001101044000102105700010110470010344331423836f042f546303634433142103c000103103c0001031049000600372a000120') >>> pkt = RadioTap(data) >>> assert pkt[Dot11EltCountry].pad == 0 >>> assert pkt.getlayer(Dot11Elt, ID=11) >>> >>> erp_payload = b'\x2a\x01\x62' >>> country_payload = b'\x07\x06\x55\x53\x20\x01\x0b\x1e' >>> >>> bare_country = Dot11EltCountry(country_payload) >>> country_nested = Dot11EltCountry(country_payload + erp_payload) >>> >>> assert not bare_country.payload >>> assert country_nested.payload >>> assert country_nested.payload.ID == 42 ###(017)=[passed] RSNCipherSuite >>> assert bytes(RSNCipherSuite()) == b'\x00\x0f\xac\x04' >>> rsn = RSNCipherSuite(b'\x00\x0f\xac\x04') >>> assert rsn.oui == 0x0fac >>> assert rsn.cipher == 0x04 ###(018)=[passed] AKMSuite >>> assert bytes(AKMSuite()) == b'\x00\x0f\xac\x01' >>> akm = AKMSuite(b'\x00\x0f\xac\x01') >>> assert akm.oui == 0x0fac >>> assert akm.suite == 0x01 ###(019)=[passed] PMKIDListPacket >>> assert bytes(PMKIDListPacket()) == b'\x00\x00' >>> pmkids = PMKIDListPacket(b'\x01\x00LD\xfe\xf2l\xdcV\xce\x0b7\xab\xc62\x02O\x11') >>> assert pmkids.nb_pmkids == 1 >>> assert len(pmkids.pmkid_list) == 1 >>> assert pmkids.pmkid_list[0] == b'LD\xfe\xf2l\xdcV\xce\x0b7\xab\xc62\x02O\x11' ###(020)=[passed] Dot11EltRSN >>> assert bytes( ... Dot11EltRSN(group_cipher_suite=RSNCipherSuite(), ... pairwise_cipher_suites=[RSNCipherSuite()], ... akm_suites=[AKMSuite()], ... pmkids=PMKIDListPacket(), ... group_management_cipher_suite=RSNCipherSuite(cipher=6)) ... ) == b'0\x1a\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\xc0\x00\x00\x00\x00\x0f\xac\x06' >>> >>> rsn_ie = Dot11EltRSN(b'0\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x01\x00') >>> assert rsn_ie.group_cipher_suite.cipher == 0x04 >>> assert rsn_ie.nb_pairwise_cipher_suites == 0x01 >>> assert rsn_ie.pairwise_cipher_suites[0].cipher == 0x04 >>> assert rsn_ie.nb_akm_suites == 0x01 >>> assert rsn_ie.akm_suites[0].suite == 0x01 >>> assert rsn_ie.pre_auth >>> assert Dot11Elt in rsn_ie >>> >>> pkt = RadioTap(b"\x00\x000\x00/@\x00\xa0 \x08\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x00\x00\x00\x00\x0bpin;%\xedN\x10\x0cl\t\xc0\x00\xce\x00\x00\x00\xb2\x00\xbd\x01\xce\x02\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\xec\x17/\x82\x1e)\xec\x17/\x82\x1e)\x10p\x81a\xa1\x08\x00\x00\x00\x00d\x001\x04\x00\rROUTE-821E295\x01\x01\x8c\x03\x01\x01\x05\x04\x00\x02\x00\x00\x07$IL \x01\x01\x14\x02\x01\x14\x03\x01\x14\x04\x01\x14\x05\x01\x14\x06\x01\x14\x07\x01\x14\x08\x01\x14\t\x01\x14\n\x01\x14\x0b\x01\x14;\x12QQRSTstuvwxyz{}~\x7f\x80*\x01\x000\x1a\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x02\x8c\x00\x00\x00\x00\x0f\xac\x06-\x1a\x8d\x01\x1f\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16\x01\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x18\x00P\xf2\x02\x01\x01\x81\x00\x03\xa4\x00\x00'\xa4\x00\x00BT^\x00a2/\x00\x7f\x01\x04\xdd\x07\x00\xa0\xc6\x02\x02\x03\x00\xdd\x17\xec\x17/RRRRRRRRRRRRRRRRRRRRR\x9e[\xf2") >>> assert Dot11EltRSN in pkt >>> pkt[Dot11Beacon].network_stats() {'ssid': 'ROUTE-821E295', 'rates': [6.0], 'channel': 1, 'country': 'IL', 'country_desc_type': None, 'crypto': {'WPA2/PSK'}} >>> assert pkt[Dot11Beacon].network_stats() == { ... 'ssid': 'ROUTE-821E295', ... 'rates': [6.0], ... 'channel': 1, ... 'country': 'IL', ... 'country_desc_type': None, ... 'crypto': {'WPA2/PSK'} ... } >>> assert [x.ID for x in pkt[Dot11Elt].iterpayloads()] == [0, 1, 3, 5, 7, 59, 42, 48, 45, 61, 221, 127, 221, 221] >>> assert pkt.pmkids.nb_pmkids == 0 >>> assert pkt.group_management_cipher_suite.oui == 0xfac >>> assert pkt.group_management_cipher_suite.cipher == 0x6 ###(021)=[passed] Dot11EltMicrosoftWPA >>> assert bytes(Dot11EltMicrosoftWPA()) == b'\xdd\x16\x00P\xf2\x01\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01' >>> ms_wpa_ie = Dot11EltMicrosoftWPA(b'\xdd\x1a\x00P\xf2\x01\x01\x00\x00P\xf2\x02\x02\x00\x00P\xf2\x04\x00P\xf2\x02\x01\x00\x00P\xf2\x01') >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].type == 0x01 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].version == 0x01 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].group_cipher_suite.cipher == 0x02 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].nb_pairwise_cipher_suites == 0x02 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].pairwise_cipher_suites[0].cipher == 0x04 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].pairwise_cipher_suites[1].cipher == 0x02 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].nb_akm_suites == 0x01 >>> assert ms_wpa_ie[Dot11EltMicrosoftWPA].akm_suites[0].suite == 0x01 >>> assert Dot11Elt in ms_wpa_ie ###(022)=[passed] Dot11EltVendorSpecific >>> assert bytes(Dot11EltVendorSpecific()) == b'\xdd\x03\x00\x00\x00' >>> vendor_specific_ie = Dot11EltVendorSpecific(b'\xdd\t\x00\x03\x7f\x01\x01\x00\x00\xff\x7f') >>> assert vendor_specific_ie.oui == 0x00037f >>> assert Dot11Elt in vendor_specific_ie ###(023)=[passed] Beacon with RSN IE >>> f = Dot11(b"\x80\x00\x00\x00\xff\xff\xff\xff\xff\xffLN5V\xee\x03LN5V\xee\x03\xf0\x8f\x80\x01\xdc7\x00\x00\x00\x00\x90\x011\x04\x00\x0cciscosb-wpa2\x01\x08\x82\x84\x8b\x96\x0c\x12\x18$\x03\x01\x06\x05\x04\x00\x01\x00\x00*\x01\x000\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x01\x002\x040H`l\xdd\x18\x00P\xf2\x02\x01\x01\x84\x00\x03\xa4\x00\x00'\xa4\x00\x00BC^\x00b2/\x00\xdd\x1e\x00\x90L3L\x10\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x1aL\x10\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x1a\x00\x90L4\x06\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16\x06\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00J\x0e\x14\x00\n\x00,\x01\xc8\x00\x14\x00\x05\x00\x19\x00\x7f\x01\x01\xdd\t\x00\x03\x7f\x01\x01\x00\x00\xff\x7f\xdd\n\x00\x03\x7f\x04\x01\x00\x06\x00@\x00") >>> assert Dot11EltRSN in f >>> assert f[Dot11EltRSN].len == 20 >>> assert f[Dot11EltRSN].group_cipher_suite[0].cipher == 0x04 >>> assert f[Dot11EltRSN].pairwise_cipher_suites[0].cipher == 0x04 >>> assert f[Dot11EltRSN].akm_suites[0].suite == 0x01 ###(024)=[passed] Other Beacon with RSN IE >>> f = Dot11(b'\x00\x00<\x00h}\xb4_\x1a\x0eJe}\xf2@\xb2h}\xb4_\x1a\x0e\xb0\xe8\x11\x11\x14\x00\x00\x08wpa3-sae\x01\x07\x12\x98$\xb0H`l!\x02\xf9\x15$\n$\x044\x04d\x0b\x95\x04\xa5\x010&\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\t\xcc\x00\x01\x00\xed!\xd6\xf6\xc2\x12C\xce\xbd\x94\xb6\xc3\xb1\xea%^F\x051\x08\x01\x00\x006\x03\xac4\x00-\x1ao\x00\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x08\x00\x00\x08\x00\x00\x00\x00@\xbf\x0c2p\x81\x0f\xfa\xff\x00\x00\xfa\xff\x00\x00\xc7\x01\x11\xff\x1c#\x01\x08\x08\x00\x00\x80D0\x02\x00\x1d\x00\x9f\x08\x00\x0c\x00\xfa\xff\xfa\xff9\x1c\xc7q\x1c\x07\xdd\x0b\x00\x17\xf2\n\x00\x01\x04\x00\x00\x00\x00\xdd\x05\x00\x90L\x04\x07\xdd\n\x00\x10\x18\x02\x00\x00\x10\x00\x00\x02\xdd\x07\x00P\xf2\x02\x00\x01\x00\x90\xe7\xf5\x12') >>> assert Dot11EltRSN in f >>> assert f.group_management_cipher_suite is None >>> assert len(list(f.iterpayloads())) == 19 >>> assert Dot11EltHTCapabilities in f >>> assert f.mfp_capable and f.mfp_required >>> assert f.pmkids.nb_pmkids == 1 >>> assert f.pmkids.pmkid_list == [b'\xed!\xd6\xf6\xc2\x12C\xce\xbd\x94\xb6\xc3\xb1\xea%^'] ###(025)=[passed] Beacon with Microsoft WPA IE >>> f = Dot11(b"\x80\x00\x00\x00\xff\xff\xff\xff\xff\xffNN5V\xee\x03NN5V\xee\x030\x8f\x80\x01\xdc7\x00\x00\x00\x00\x90\x011\x04\x00\x0bciscosb-wpa\x01\x08\x82\x84\x8b\x96\x0c\x12\x18$\x03\x01\x06\x05\x04\x00\x01\x00\x00*\x01\x00\xdd\x16\x00P\xf2\x01\x01\x00\x00P\xf2\x04\x01\x00\x00P\xf2\x04\x01\x00\x00P\xf2\x012\x040H`l\xdd\x18\x00P\xf2\x02\x01\x01\x85\x00\x03\xa4\x00\x00'\xa4\x00\x00BC^\x00b2/\x00\xdd\x1e\x00\x90L3L\x10\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x1aL\x10\x1b\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x1a\x00\x90L4\x06\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16\x06\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00J\x0e\x14\x00\n\x00,\x01\xc8\x00\x14\x00\x05\x00\x19\x00\x7f\x01\x01\xdd\t\x00\x03\x7f\x01\x01\x00\x00\xff\x7f\xdd\n\x00\x03\x7f\x04\x01\x00\x06\x00@\x00") >>> assert Dot11EltMicrosoftWPA in f >>> assert f[Dot11EltMicrosoftWPA].type == 0x01 >>> assert f[Dot11EltMicrosoftWPA].version == 0x01 >>> assert f[Dot11EltMicrosoftWPA].group_cipher_suite.cipher == 0x04 >>> assert f[Dot11EltMicrosoftWPA].nb_pairwise_cipher_suites == 0x01 >>> assert f[Dot11EltMicrosoftWPA].pairwise_cipher_suites[0].cipher == 0x04 >>> assert f[Dot11EltMicrosoftWPA].nb_akm_suites == 0x01 >>> assert f[Dot11EltMicrosoftWPA].akm_suites[0].suite == 0x01 ###(026)=[passed] HT Capabilities >>> f = RadioTap(b"\x00\x00&\x00/@\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x9dt\xc3\xf1\x18\x00\x00\x00\x10\x02l\t\xa0\x00\xd9\x00\x00\x00\xd3\x00\xd7\x01@\x00\x00\x00\xff\xff\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xaa\xaa\xff\xff\xff\xff\xff\xffP'\x00\x00\x01\x04\x02\x04\x0b\x162\x08\x0c\x12\x18$0H`l\x03\x01\x01-\x1a-@\x17\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x08\x00\x00\x08\x04\x00\x00\x00@Y\xb7T\x13") >>> assert Dot11EltHTCapabilities in f >>> assert f.L_SIG_TXOP_Protection == 0 >>> assert f.Forty_Mhz_Intolerant == 1 >>> assert f.PSMP == 0 >>> assert f.DSSS_CCK == 0 >>> assert f.Max_A_MSDU == 0 >>> assert f.Delayed_BlockAck == 0 >>> assert f.Rx_STBC == 0 >>> assert f.Tx_STBC == 0 >>> assert f.Short_GI_40Mhz == 0 >>> assert f.Short_GI_20Mhz == 1 >>> assert f.Green_Field == 0 >>> assert f.SM_Power_Save == 3 >>> assert f.Supported_Channel_Width == 0 >>> assert f.LDPC_Coding_Capability == 1 >>> assert f.res1 == 0 >>> assert f.Min_MPDCU_Start_Spacing == 5 >>> assert f.Max_A_MPDU_Length_Exponent == 3 >>> assert f.TX_Unequal_Modulation == 0 >>> assert f.TX_Max_Spatial_Streams == 0 >>> assert f.TX_RX_MCS_Set_Not_Equal == 0 >>> assert f.TX_MCS_Set_Defined == 0 >>> assert f.RX_Highest_Supported_Data_Rate == 0 >>> assert f.RX_MSC_Bitmask == 255 >>> assert f.RD_Responder == 0 >>> assert f.HTC_HT_Support == 0 >>> assert f.MCS_Feedback == 0 >>> assert f.PCO_Transition_Time == 0 >>> assert f.PCO == 0 >>> assert f.Channel_Estimation_Capability == 0 >>> assert f.CSI_max_n_Rows_Beamformer_Supported == 0 >>> assert f.Compressed_Steering_n_Beamformer_Antennas_Supported == 0 >>> assert f.Noncompressed_Steering_n_Beamformer_Antennas_Supported == 0 >>> assert f.CSI_n_Beamformer_Antennas_Supported == 0 >>> assert f.Minimal_Grouping == 0 >>> assert f.Explicit_Compressed_Beamforming_Feedback == 0 >>> assert f.Explicit_Noncompressed_Beamforming_Feedback == 0 >>> assert f.Explicit_Transmit_Beamforming_CSI_Feedback == 0 >>> assert f.Explicit_Compressed_Steering == 0 >>> assert f.Explicit_Noncompressed_Steering == 0 >>> assert f.Explicit_CSI_Transmit_Beamforming == 0 >>> assert f.Calibration == 0 >>> assert f.Implicit_Trasmit_Beamforming == 0 >>> assert f.Transmit_NDP == 0 >>> assert f.Receive_NDP == 0 >>> assert f.Transmit_Staggered_Sounding == 0 >>> assert f.Receive_Staggered_Sounding == 0 >>> assert f.Implicit_Transmit_Beamforming_Receiving == 0 >>> assert f.ASEL == 0 ###(027)=[passed] HT Capabilities with fuzzed values >>> f = RadioTap(b'\x00\x00\t\x00\x02\x00\x00\x00\x10@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x1a\xecH\xbf\x85!\x02\xd0m\x91\xa8\xd9\xf0\xa9\xb8\x15\xae\x00\x00\x00,Y\x86\xb3H\xa7?Z\xd2\xa8\xc2') >>> assert Dot11EltHTCapabilities in f >>> assert f.L_SIG_TXOP_Protection == 0 >>> assert f.Forty_Mhz_Intolerant == 1 >>> assert f.PSMP == 0 >>> assert f.DSSS_CCK == 0 >>> assert f.Max_A_MSDU == 1 >>> assert f.Delayed_BlockAck == 0 >>> assert f.Rx_STBC == 0 >>> assert f.Tx_STBC == 1 >>> assert f.Short_GI_40Mhz == 1 >>> assert f.Short_GI_20Mhz == 1 >>> assert f.Green_Field == 0 >>> assert f.SM_Power_Save == 3 >>> assert f.Supported_Channel_Width == 0 >>> assert f.LDPC_Coding_Capability == 0 >>> assert f.res1 == 5 >>> assert f.Min_MPDCU_Start_Spacing == 7 >>> assert f.Max_A_MPDU_Length_Exponent == 3 >>> assert f.TX_Unequal_Modulation == 0 >>> assert f.TX_Max_Spatial_Streams == 3 >>> assert f.TX_RX_MCS_Set_Not_Equal == 1 >>> assert f.TX_MCS_Set_Defined == 0 >>> assert f.RX_Highest_Supported_Data_Rate == 440 >>> assert f.RX_MSC_Bitmask == 46944200869120244326789 >>> assert f.RD_Responder == 1 >>> assert f.HTC_HT_Support == 0 >>> assert f.MCS_Feedback == 1 >>> assert f.PCO_Transition_Time == 2 >>> assert f.PCO == 0 >>> assert f.Channel_Estimation_Capability == 0 >>> assert f.CSI_max_n_Rows_Beamformer_Supported == 3 >>> assert f.Compressed_Steering_n_Beamformer_Antennas_Supported == 2 >>> assert f.Noncompressed_Steering_n_Beamformer_Antennas_Supported == 2 >>> assert f.CSI_n_Beamformer_Antennas_Supported == 1 >>> assert f.Minimal_Grouping == 0 >>> assert f.Explicit_Compressed_Beamforming_Feedback == 1 >>> assert f.Explicit_Noncompressed_Beamforming_Feedback == 1 >>> assert f.Explicit_Transmit_Beamforming_CSI_Feedback == 2 >>> assert f.Explicit_Compressed_Steering == 0 >>> assert f.Explicit_Noncompressed_Steering == 1 >>> assert f.Explicit_CSI_Transmit_Beamforming == 1 >>> assert f.Calibration == 2 >>> assert f.Implicit_Trasmit_Beamforming == 0 >>> assert f.Transmit_NDP == 0 >>> assert f.Receive_NDP == 0 >>> assert f.Transmit_Staggered_Sounding == 1 >>> assert f.Receive_Staggered_Sounding == 1 >>> assert f.Implicit_Transmit_Beamforming_Receiving == 0 >>> assert f.ASEL.res >>> assert f.ASEL.Transmit_Sounding_PPDUs >>> assert f.ASEL.Receive_ASEL >>> assert f.ASEL.Antenna_Indices_Feedback >>> assert f.ASEL.Explicit_CSI_Feedback >>> assert f.ASEL.Explicit_CSI_Feedback_Based_Transmit_ASEL >>> assert not f.ASEL.Antenna_Selection >>> assert f.ASEL == 63 ###(028)=[passed] RadioTap - MCS weird padding >>> f = RadioTap(b'\x00\x00,\x00K\x08\x1c\x00"b\x96\x03\x00\x00\x00\x00\x10\x00l\t\x80\x04\xb0\x00\x80\x04\x01\x00l\t\x01\x00\x1f\x08\x0c\x00\x94\x05\x00\x00\x04\x00\x00\x00\x88\x020\x00.\xdf\xc4J\xb0\xdc\xa0c\x91sf\xech\x05\xca?\xf4h@Y\x00\x00\xaa\xaa\x03\x00\x00\x00\x08\x00E\x00\x05\xdc \xcf@\x00\x80\x06P\xf0\xc0\xa8\x01\n\xc0\xa8\x01\x02\xdb\x8f\x13\x89\xfbv\xa3\xde\xf6\xd8L\xe8P\x10\xff\xfft\xdd\x00\x0023456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901O\xdc\x01x') >>> assert f.knownMCS == 31 >>> assert f.Ness_LSB == 0 >>> assert f.STBC_streams == 0 >>> assert f.FEC_type == 0 >>> assert f.HT_format == 1 >>> assert f.guard_interval == 0 >>> assert f.MCS_bandwidth == 0 >>> assert f.MCS_index == 0xc >>> assert f.A_MPDU_ref == 1428 ###(029)=[passed] RadioTap MCS >>> f = RadioTap(b"\x00\x00)\x00+@\x08\xa0 \x08\x00\xa0 \x08\x00\x00\xff\xc3$N\x00\x00\x00\x00\x10\x00d\x14@\x01\xc8\x00\x00\x00'\x00\n\xc8\x00\xbd\x01\x88\x02\x00\x00\x01\x00^\x02\x00\n\x04\xf0!K}\xb7\x00\r\xb9L\xfd\xd4 4$\x00\xaa\xaa\x03\x00\x00\x00\x08\x00E\x00\x05\x94\x80\xc7@\x00\x05\x11\x0c\xb4\xac\x10T\xc1\xe2\x02\x00\n\xdeU\x13\x89\x05\x80,m\x00\x00\x07?`G\xc7 \x00\x07\x02u\x00\x00\x00\x00H\x01\x00\x98\x00\x00\x00\x01\x00\x00\x13\x89\x00\x00\x05x\x00\x00\x00\x00\xff") >>> assert f.knownMCS == 0x27 >>> assert f.MCS_index == 10 ###(030)=[passed] RadioTap ts, HE, HE-MU, LSIG >>> f = RadioTap(b'\x00\x00^\x00*@\xd0\xa9 \x08\x00\xa0 \x08\x00\xc0\x01\x00\x00\x00\x10\x00|\x15@\x01\xd4\x00\x00\x00\x00\x00x\x10\x01\x00\x00\x00\x00\x00\xa7\x14\xd0\xf9\x00\x00\x00\x00\x16\x00\x11\x03\xf6\xc7\x7f@"+\x00\x00\x98Q\x01\x00\xd0\xd3W\x04\xc8\xc8\xc8\xc8rrrr\x02\x00`\x0b\xd4\x00\xd3\x01\xf6T%\x01\x02\x00\x14\x00\x00\x00\x88B\x82\x00\xd8\xf8\x835\xd3\x06\xf0/t|\xa3\xb4\xf0/t|\xa3\xb4\x00\n\xc0\x00\xac\x10\x00 \x01\x00\x00\x00\xe8^\x98\xc3\x08<\xce\x85\xf4\xc0\xe0/\xb0[\xaf\xb11\x90\x11\xb5\xa8\xa3\x02\x99-\xa0\xcf\x7fE%\x8a\xa8~[\xbe\xe8\xfc\xe5:\xbdBJ\xf3\x8a5\xb3\xed\x88\xde\xdcF\x02\xed\xddc\x0bLN\x02\xcdR\x06\x9b\x9d)\xc2\xdc\xf1\xcd\xe3Pv\xcauP\x1a\xaf_\x0c\x12<\x8f\x999*\x1c\xf7x\xe4>G"\x8d\x91\xd6\xeb\xe5\xf9\xc3Y\xedf\xffg\xf8*\xda\xe9aYb\x92\x8b\x93\xde\'\xe7_N$\xd2;\xe3\xadj\xd6\xeb\xf1p|[\xfe\xc9m\xc2\xe1\xde\xd2\xff\x9e\xdb_\x8d9\x80\xec\xd2\x113\x0fWB\x86\xfec\xd5\xb9\x9b\x07\xb0\xa6\x06\xa5\x07iQ\x80\xa5\x8f\x13I\x98\xcb\xb2\x13\x92\xb3\x00\xac<\xdf\x95|\x0b\x8b{\x1d\x0f4@\x12\xb1r\xbez\x81\xc2dQ\x13,nN\xa5\xf1\xcd$\xba\x97\xb6^\x0c\x141\xad\xde`\x0e\x04u\xb6b1\xd2\xb6\xb3\xcf\x01\xf4jn\x07A\x84\xab\xc1!p\xef\xdf\xe9IP\x9dm\xc6[\x01\xb84X\xe6F%\xf7wW+\x80\xb1\xc3\x99b\x15\x03\x86p\x94m\xd8D\xf5\xef\x176\xd0\xbdb\x12\x93\x02)\xac\xed\xfe\x8d\xbd\xcbyI\xaa\xa1\xae\x95H\x0eh\xcd\xfd\xe0\xe6\xf2U\x03\xf6E\x1d\xce\x82\xf6\x8e4\x12\x8e+\xc8\xadJ8\r\x10/\xca3\xd2\x88|\xd2\xce\x7f\x15k\x81R\x88U\xc4\xdeT\x1d\xcf\'\xf0\'\xb2\xb6\xb3\x84\x02\xc9L\xee\xf6E\x04\xaeF\xb1#\xeb\x17\xd0\n\x00\x1aH2<\xe0\xb3[\x8d\t\xd6\x89[0&P\x17/\x191\x050\xe4\xc0\n_?\xde\x92\xbdC\xa6\xb1\xc2n\x12\x9f\xb5b\x10\xcc\xc3\xfa\xce\xd7\xe0\xf2\xaa\x84\xa2\xe9\xa8\x81S&\xf9\r;\xcc\x81\xa3\x84v\xff\n\xb9?\xbe!]\xb4E]\xac\xbfQ\x1d)2\xee9\x84\xddjq\xb1q\x87ef\xca\x87\xfe\xf6\xcd\xbck#\xad\x03\xe9>\x91]\xf3@\x02\xb4\x8b\xfe\x84z\x88\x83\xf3\xb18N\xf7x\xde\xd6|\xb2p\n\xe4$h\xd5\x10\x15&\xd6O\xdf\xb3y\'\x80[a\xf6f2\x84\xe4\xa9\xe3a\xd0h\x93%\xa5\xd1\x9fX\x94P\x8b\xbc\xf9J"k\xd0\xaf-\xa2\xbf\x1a\xf65\xa8[y\xba\x0b\xaa\x05J9\x93VVM+\x13+;y\xbdJ!@\xab\r\x93\x93\x8c\xd6\xbb\xc2\'\xa0_N\'6\x05\x96"\xef\xd7\xbd4S\x99\xfaf\x05\xf2\xb7\xb9\xe4\x02\xd4\x1f?\x0e\xe7') >>> >>> assert f.timestamp == 4191163559 >>> assert f.ts_accuracy == 22 >>> assert f.ts_unit == 1 >>> assert f.ts_position == 1 >>> assert f.ts_flags.Accuracy and "32-bit_counter" in f.ts_flags >>> assert f.he_data1 == 51190 >>> assert f.he_data2 == 16511 >>> assert f.he_data3 == 11042 >>> assert f.he_data4 == 0 >>> assert f.he_data5 == 20888 >>> assert f.he_data6 == 1 >>> assert f.hemu_flags1 == 54224 >>> assert f.hemu_flags2 == 1111 >>> assert f.RU_channel1 == [200, 200, 200, 200] >>> assert f.RU_channel2 == [114, 114, 114, 114] >>> assert f.lsig_data1.length >>> assert f.lsig_length == 182 >>> assert f.lsig_rate == 0 >>> assert f == eval(f.command()) ###(031)=[passed] Reassociation request >>> f = Dot11(b' \x00:\x01@\xe3\xd6\x7f*\x00\x00\x10\x18\xa9l.@\xe3\xd6\x7f*\x00 \t1\x04\n\x00@\xe3\xd6\x7f*\x00\x00\x064.2.12\x01\x08\x82\x84\x0b\x16$0Hl!\x02\x08\x1a$\x02\x01\x0b0&\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x01\x00LD\xfe\xf2l\xdcV\xce\x0b7\xab\xc62\x02O\x112\x04\x0c\x12\x18`\x7f\x08\x01\x00\x00\x00\x00\x00\x00@\xdd\t\x00\x10\x18\x02\x00\x00\x10\x00\x00') >>> assert Dot11EltRSN in f >>> assert f[Dot11EltRSN].pmkids.nb_pmkids == 1 >>> assert len(f[Dot11EltRSN].pmkids.pmkid_list) == 1 >>> assert f[Dot11EltRSN].pmkids.pmkid_list[0] == b'LD\xfe\xf2l\xdcV\xce\x0b7\xab\xc62\x02O\x11' ###(032)=[passed] Backward compatibility of Dot11Elt >>> assert Dot11Elt(ID="DSset").sprintf("%ID%") == 'DSSS Set' >>> assert Dot11Elt(ID="RSNinfo").sprintf("%ID%") == 'RSN' ###(033)=[passed] Dot11FCS parent matching >>> pkt = Ether()/IP()/Dot11FCS() >>> assert pkt[Dot11] ###(034)=[passed] Dot11FCS - test FCS with FCSField >>> data = b'\x00\x00 \x00\xae@\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x10\x02\x85\t\xa0\x00\xe2\x00d\x00\x00\x00\x00\x00\x00\x01\xa0@:\x01\x00\xc0\xca\xa4}PLfA\xac\xe4\xb3\x00\xc0\xca\xa4}P\x00\x03\x00 \x08 \x00\x00\x00\x00\x0f)\x1d\xd4\xd49\x1f>4\xeb' >>> pkt = RadioTap(data) >>> w_payload = hex_bytes('00002000ae4000a0200800a02008000010028509a000e2006400000000000001a0403a0100c0caa47d504c6641ace4b300c0caa47d50000300200820000000000f291dd4d4391f3e34eb') >>> assert raw(pkt) == w_payload ###(035)=[passed] Dot11FCS computation >>> pkt = RadioTap() / Dot11FCS() / Dot11Beacon() >>> assert raw(pkt) == b'\x00\x00\t\x00\x02\x00\x00\x00\x10\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00e\xd9=\xb9' ###(036)=[passed] WEP tests >>> conf.wepkey = "" >>> bck_conf_crypto_valid = conf.crypto_valid >>> p = Dot11WEP(b'\x00\x00\x00\x00\xe3OjYLw\xc3x_%\xd0\xcf\xdeu-\xc3pH#\x1eK\xae\xf5\xde\xe7\xb8\x1d,\xa1\xfe\xe83\xca\xe1\xfe\xbd\xfe\xec\x00)T`\xde.\x93Td\x95C\x0f\x07\xdd') >>> assert isinstance(p, Dot11WEP) >>> conf.crypto_valid = bck_conf_crypto_valid >>> >>> conf.wepkey = "Fobar" >>> r = raw(Dot11WEP()/LLC()/SNAP()/IP(src="127.0.0.1", dst="127.0.0.1")/TCP(seq=12345678)) >>> r b'\x00\x00\x00\x00\xe3OjYLw\xc3x_%\xd0\xcf\xdeu-\xc3pH#\x1eK\xae\xf5\xde\xe7\xb8\x1d,\xa1\xfe\xe83\xca\xe1\xfe\xbd\xfe\xec\x00)T`\xde.\x93Td\x95C\x0f\x07\xdd' >>> assert r == b'\x00\x00\x00\x00\xe3OjYLw\xc3x_%\xd0\xcf\xdeu-\xc3pH#\x1eK\xae\xf5\xde\xe7\xb8\x1d,\xa1\xfe\xe83\xca\xe1\xfe\xbd\xfe\xec\x00)T`\xde.\x93Td\x95C\x0f\x07\xdd' >>> p = Dot11WEP(r) >>> p >>>> >>> assert TCP in p and p[TCP].seq == 12345678 ###(037)=[passed] RadioTap - dissection & build >>> data = b'\x00\x008\x00k\x084\x00oo\x0f\x98\x00\x00\x00\x00\x10\x00\x99\x16@\x01\xc5\xa1\x01\x00\x00\x00@\x01\x02\x00\x99\x16\x9d"\x05\x0b\x00\x00\x00\x00\x00\x00\xff\x01\x16\x01\x82\x00\x00\x00\x01\x00\x00\x00\x88\x020\x00\xb8\xe8VB_\xb2\x82*\xa8Uq\x15\xf0\x9f\xc2\x11\x16dP\xb0\x00\x00\xaa\xaa\x03\x00\x00\x00\x08\x00E\x00\x00GC\xad@\x007\x11\x97;\xd0C\xde{\xac\x10\r\xee\x005\xed\xec\x003\xd5/\xfc\\\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00\tlocalhost\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\t:\x80\x00\x04\x7f\x00\x00\x01\xcdj\x88]' >>> r = RadioTap(data) >>> r = RadioTap(raw(r)) >>> assert r.dBm_AntSignal == -59 >>> assert r.ChannelFrequency == 5785 >>> assert r.ChannelPlusFrequency == 5785 >>> assert r.present == 3410027 >>> assert r.A_MPDU_ref == 2821 >>> assert r.KnownVHT == 511 >>> assert r.PresentVHT == 22 >>> assert r.notdecoded == b'' ###(038)=[passed] RadioTap Big-Small endian dissection >>> data = b'\x00\x00\x1a\x00/H\x00\x00\xe1\xd3\xcb\x05\x00\x00\x00\x00@0x\x14@\x01\xac\x00\x00\x00' >>> r = RadioTap(data) >>> r.show() ###[ RadioTap ]### version = 0 pad = 0 len = 26 present = TSFT+Flags+Rate+Channel+dBm_AntSignal+Antenna+RXFlags mac_timestamp= 97244129 Flags = badFCS Rate = 24.0 Mbps ChannelFrequency= 5240 ChannelFlags= OFDM+5GHz dBm_AntSignal= -84 dBm Antenna = 0 RXFlags = notdecoded= b'' >>> assert r.present == 18479 ###(039)=[passed] RadioTap MCS dissection >>> data = b"\x00\x00\x0b\x00\x00\x00\x08\x00?,\x05" >>> r = RadioTap(data) >>> r.show() ###[ RadioTap ]### version = 0 pad = 0 len = 11 present = MCS knownMCS = MCS_bandwidth+MCS_index+guard_interval+HT_format+FEC_type+STBC_streams Ness_LSB = 0 STBC_streams= 1 FEC_type = BCC HT_format = greenfield guard_interval= Short_GI MCS_bandwidth= 20MHz MCS_index = 5 notdecoded= b'' >>> assert r.present.MCS >>> assert r.knownMCS.MCS_bandwidth >>> assert r.knownMCS.MCS_index >>> assert r.knownMCS.guard_interval >>> assert r.knownMCS.HT_format >>> assert r.knownMCS.FEC_type >>> assert r.knownMCS.STBC_streams >>> assert not r.knownMCS.Ness >>> assert not r.knownMCS.Ness_MSB >>> assert r.MCS_bandwidth == 0 >>> assert r.guard_interval == 1 >>> assert r.HT_format == 1 >>> assert r.FEC_type == 0 >>> assert r.STBC_streams == 1 >>> assert r.MCS_index == 5 >>> assert r.Ness_LSB == 0 ###(040)=[passed] RadioTap RX/TX Flags dissection >>> data = b'\x00\x00\x0c\x00\x00\xc0\x00\x00\x02\x00\x3f\x00' >>> r = RadioTap(data) >>> r.show() ###[ RadioTap ]### version = 0 pad = 0 len = 12 present = RXFlags+TXFlags RXFlags = BAD_PLCP TXFlags = TX_FAIL+CTS+RTS+NOACK+NOSEQ+ORDER notdecoded= b'' >>> assert r.present.TXFlags >>> assert r.TXFlags.TX_FAIL >>> assert r.TXFlags.CTS >>> assert r.TXFlags.RTS >>> assert r.TXFlags.NOACK >>> assert r.TXFlags.NOSEQ >>> assert r.TXFlags.ORDER >>> assert r.present.RXFlags >>> assert r.RXFlags.BAD_PLCP ###(041)=[passed] RadioTap, other fields >>> data = b'\x00\x00 \x00\xae@\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x10\x02\x85\t\xa0\x00\xe2\x00d\x00\x00\x00\x00\x00\x00\x01\xa0@:\x01\x00\xc0\xca\xa4}PLfA\xac\xe4\xb3\x00\xc04\xeb\xca\xa4}P\x00 \x08 \x00\x00\x00\x00\x0f)\x1d\xd4\xd49\x00\x03\x1f>' >>> r = RadioTap(data) >>> assert Dot11TKIP in r >>> assert r[Dot11] >>> assert r.dBm_AntSignal == -30 >>> assert r.Lock_Quality == 100 >>> assert r.RXFlags == 0 >>> >>> data = b'\x00\x00\x0f\x00\x00\x00\x00\x02\xff\x7f?\x00\x00\x04\x00' >>> r = RadioTap(data) >>> repr(r) "\x1b[0m<\x1b[0m\x1b[31m\x1b[1mRadioTap\x1b[0m \x1b[34mversion\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mpad\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mlen\x1b[0m\x1b[0m=\x1b[0m\x1b[35m15\x1b[0m \x1b[34mpresent\x1b[0m\x1b[0m=\x1b[0m\x1b[35mHE_MU_other_user\x1b[0m \x1b[34mhemuou_per_user_1\x1b[0m\x1b[0m=\x1b[0m\x1b[35m32767\x1b[0m \x1b[34mhemuou_per_user_2\x1b[0m\x1b[0m=\x1b[0m\x1b[35m63\x1b[0m \x1b[34mhemuou_per_user_position\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mhemuou_per_user_known\x1b[0m\x1b[0m=\x1b[0m\x1b[35mNSTS\x1b[0m \x1b[34mnotdecoded\x1b[0m\x1b[0m=\x1b[0m\x1b[35mb''\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m" >>> assert list(r.hemuou_per_user_known) == ['NSTS'] ###(042)=[passed] RadioTap - Dissection - guess_payload_class() test >>> data = b'\x00\x00\r\x00\x04\x80\x02\x00\x02\x00\x00\x00\x00@\x00\x00\x00\xff\xff\xff\xff\xff\xff\xe8\x94\xf6\x1c\xdf\x8b\xff\xff\xff\xff\xff\xff\xa0\x01\x00\x10ciscosb-wpa2-eap\x01\x08\x02\x04\x0b\x16\x0c\x12\x18$2\x040H`l\x03\x01\x01-\x1an\x11\x1b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> radiotap = RadioTap(data) >>> assert radiotap.present.Rate >>> assert radiotap.present.TXFlags >>> assert radiotap.present.b18 >>> assert radiotap.present == 163844 >>> assert radiotap.guess_payload_class("") == Dot11 ###(043)=[passed] RadioTap - Dissection with Extended presence mask >>> data = b"\x00\x00 \x00\xae@\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x10\x02\x9e\t\xa0\x00\xa2\x00d\x00\x00\x00\x00\x00\x00\x01\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x94S0\xe8\x93\xb2\x94S0\xe8\x93\xb2\xf0u\x85\xe1H\x9c\x08\x00\x00\x00d\x00\x11\x14\x00\x08Why Fye?\x01\x08\x82\x84\x8b\x96$0Hl\x03\x01\x0b\x05\x04\x00\x01\x00\x00*\x01\x04/\x01\x040\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x02\x0c\x002\x04\x0c\x12\x18`\x0b\x05\x07\x00;\x00\x00-\x1a\xad\x19\x17\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16\x0b\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x08\x04\x00\x08\x00\x00\x00\x00@\xdd1\x00P\xf2\x04\x10J\x00\x01\x10\x10D\x00\x01\x02\x10G\x00\x10\xef\xda]\xd2#\xe8\xa7\xf0\xb2/\xa4\x98\xbf\x0cv\xe7\x10<\x00\x01\x03\x10I\x00\x06\x007*\x00\x01 \xdd\t\x00\x10\x18\x02\x07\x00\x1c\x00\x00\xdd\x18\x00P\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00'\xa4\x00\x00BC^\x00b2/\x00F\x05r\x08\x01\x00\x00\xdd\x1e\x00\x90L\x04\x08\xbf\x0c\xb2Y\x82\x0f\xea\xff\x00\x00\xea\xff\x00\x00\xc0\x05\x00\x0b\x00\x00\x00\xc3\x02\x00\x02\x08I\xc0\xdb" >>> radiotap = RadioTap(data) >>> >>> assert radiotap.present.Ext >>> assert len(radiotap.Ext) == 2 >>> assert radiotap.Ext[0].present.b5 >>> assert radiotap.Ext[0].present.b11 >>> assert radiotap.Ext[0].present.b29 >>> assert radiotap.Ext[0].present.Ext >>> assert radiotap.Ext[1].present.b37 >>> assert radiotap.Ext[1].present.b43 >>> assert not radiotap.Ext[1].present.Ext >>> >>> assert radiotap.present.Flags >>> assert radiotap.Flags.FCS >>> assert Dot11FCS in radiotap >>> assert radiotap.fcs == 0xdbc04908 >>> >>> assert Dot11EltRates in radiotap >>> assert radiotap[Dot11EltRates].rates == [130, 132, 139, 150, 36, 48, 72, 108] ###(044)=[passed] RadioTap - Build with Extended presence mask >>> a = RadioTapExtendedPresenceMask(present="b0+b12+b29+Ext") >>> b = RadioTapExtendedPresenceMask(index=1, present="b32+b45+b59+b62") >>> pkt = RadioTap(present="Ext", Ext=[a, b]) >>> assert raw(pkt) == b'\x00\x00\x10\x00\x00\x00\x00\x80\x01\x10\x00\xa0\x01 \x00H' ###(045)=[passed] RadioTap - dissect & build TLVs >>> pkt = RadioTap( ... present="TLV+dBm_TX_Power+TXFlags+Channel+Rate+Flags", ... tlvs=[ ... RadioTapTLV(type=30, data=b"tes1t"), ... RadioTapTLV(type=1, data=b"a") ... ] ... ) >>> >>> assert raw(pkt) == b'\x00\x00,\x00\x0e\x84\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00tes1t\x00\x00\x00\x01\x00\x01\x00a\x00\x00\x00' >>> >>> pkt = RadioTap(raw(pkt)) >>> assert pkt.present.TLV >>> assert pkt.tlvs[0].type == 30 >>> assert pkt.tlvs[0].data == b"tes1t" >>> assert pkt.tlvs[0].pad == b"\0\0\0" >>> assert pkt.tlvs[1].type == 1 >>> assert pkt.tlvs[1].data == b"a" >>> assert pkt.notdecoded == b"" ###(046)=[passed] fuzz() calls for Dot11Elt() >>> for i in range(10): ... assert isinstance(raw(fuzz(Dot11Elt())), bytes) ... ###(047)=[passed] PMKIDListPacket - Check computation of nb_pmkids >>> assert PMKIDListPacket(raw(PMKIDListPacket())).nb_pmkids == 0 >>> assert PMKIDListPacket(raw(PMKIDListPacket(pmkid_list=["AZEDFREZSDERFGTY"]))).nb_pmkids == 1 >>> assert PMKIDListPacket(raw(PMKIDListPacket(pmkid_list=["0123456789ABDEFX", "AZEDFREZSDERFGTY"]))).nb_pmkids == 2 ###(048)=[passed] Dot11EltRSN - Check computation of nb_pairwise_cipher_suites and nb_akm_suites >>> assert Dot11EltRSN(raw(Dot11EltRSN())).nb_pairwise_cipher_suites == 1 >>> assert Dot11EltRSN(raw(Dot11EltRSN(pairwise_cipher_suites=[RSNCipherSuite(cipher="TKIP")]))).nb_pairwise_cipher_suites == 1 >>> assert Dot11EltRSN(raw(Dot11EltRSN(pairwise_cipher_suites=[RSNCipherSuite(cipher="TKIP"), RSNCipherSuite(cipher="CCMP-128")]))).nb_pairwise_cipher_suites == 2 >>> assert Dot11EltRSN(raw(Dot11EltRSN())).nb_akm_suites == 1 >>> assert Dot11EltRSN(raw(Dot11EltRSN(akm_suites=[AKMSuite(suite="PSK")]))).nb_akm_suites == 1 >>> assert Dot11EltRSN(raw(Dot11EltRSN(akm_suites=[AKMSuite(suite="PSK"), AKMSuite(suite="802.1X")]))).nb_akm_suites == 2 ###(049)=[passed] Dot11EltMicrosoftWPA - Check computation of nb_pairwise_cipher_suites and nb_akm_suites >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA())).nb_pairwise_cipher_suites == 1 >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA(pairwise_cipher_suites=[RSNCipherSuite(cipher="TKIP")]))).nb_pairwise_cipher_suites == 1 >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA(pairwise_cipher_suites=[RSNCipherSuite(cipher="TKIP"), RSNCipherSuite(cipher="CCMP-128")]))).nb_pairwise_cipher_suites == 2 >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA())).nb_akm_suites == 1 >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA(akm_suites=[AKMSuite(suite="PSK")]))).nb_akm_suites == 1 >>> assert Dot11EltMicrosoftWPA(raw(Dot11EltMicrosoftWPA(akm_suites=[AKMSuite(suite="PSK"), AKMSuite(suite="802.1X")]))).nb_akm_suites == 2 ###(050)=[passed] Dot11BSSTMRequest - dissection >>> pkt = RadioTap(b"\x00\x008\x00/@@\xa0 \x08\x00\xa0 \x08\x00\x00\x7f\x89&\x88\x00\x00\x00\x00\x10\x0c\xcc\x15@\x01\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xe7&\x88\x00\x00\x00\x00\x16\x00\x11\x03\xe4\x00\xde\x01\xd0\x00<\x00\x92U\x1f\xe9g9J\xf2\x1c\x03)\x89J\xf2\x1c\x03)\x89\xc0\xce\n\x07\x01\x05\x05\x00\xff4\x10F\xf2\x1c\x03)\x89\x00\x00\x00\x00Q\x0b\x00\x03\x01\xff\xaaV\xdaY") >>> assert Dot11BSSTMRequest in pkt >>> >>> assert pkt[Dot11Action].category == 10 >>> assert pkt[Dot11Action][Dot11WNM].action == 7 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].token == 1 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].mode.Preferred_Candidate_List_Included >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].mode.Disassociation_Imminent >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].disassociation_timer == 5 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].validity_interval == 255 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].type == 52 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].len == 16 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].BSSID == "46:f2:1c:03:29:89" >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].AP_reach == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].security == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].key_scope == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].capabilities == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].mobility == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].HT == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].VHT == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].FTM == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].reserved == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].op_class == 81 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].channel == 11 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMRequest].neighbor_report[0].phy_type == 0 ###(051)=[passed] Dot11BSSTMResponse - dissection >>> pkt = RadioTap(b"\x00\x00,\x00\xae@\x00\xa0 \x08\x00\xa0 \x08\x00\xa0 \x08\x00\xa0 \x08\x00\x00\x10\x0c<\x14@\x01\xce\x00d\x00\x00\x00\xd0\x00\xca\x01\xca\x02\xcc\x03\xd0\x00<\x00df$J\xe1\xc4\xa0\xcc+\xbe\xc9Odf$J\xe1\xc4p\x0c\n\x08\x01\x06\x004\rdf$J\xe1\xc3\x00\x00\x00\x00\x04\x0c\x00<\xdd\xdf=") >>> assert Dot11BSSTMResponse in pkt >>> >>> assert pkt[Dot11Action].category == 10 >>> assert pkt[Dot11Action][Dot11WNM].action == 8 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].token == 1 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].status == 6 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].termination_delay == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].type == 52 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].len == 13 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].BSSID == "64:66:24:4a:e1:c3" >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].AP_reach == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].security == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].key_scope == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].capabilities == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].mobility == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].HT == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].VHT == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].FTM == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].reserved == 0 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].op_class == 4 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].channel == 12 >>> assert pkt[Dot11Action][Dot11WNM][Dot11BSSTMResponse].neighbor_report[0].phy_type == 0 ###(052)=[passed] Dot11Ack >>> pkt = Dot11(bytes(Dot11()/Dot11Ack())) >>> assert pkt.subtype == 13 >>> assert pkt.type == 1 ###(053)=[passed] Dot11CSA >>> pkt = RadioTap(b"\x00\x008\x00/@@\xa0 \x08\x00\xa0 \x08\x00\x00\xfe\x83\x06\x10\x00\x00\x00\x00\x10\x02\x8a\t\xa0\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\x07\x10\x00\x00\x00\x00\x16\x00\x11\x03\xf8\x00\xfe\x01\xd0\x00\x00\x00\xff\xff\xff\xff\xff\xff\x0cs)d\xa5\r\x0cs)d\xa5\r\xb0!\x00\x04%\x03\x01\x0b\x05\x0b\xb9<\x8c") >>> assert Dot11SpectrumManagement in pkt >>> assert Dot11CSA in pkt >>> assert Dot11EltCSA in pkt >>> >>> assert pkt[Dot11Action].category == 0 >>> assert pkt[Dot11Action][Dot11SpectrumManagement].action == 4 >>> assert pkt[Dot11Action][Dot11SpectrumManagement][Dot11CSA][Dot11EltCSA].ID == 37 >>> assert pkt[Dot11Action][Dot11SpectrumManagement][Dot11CSA][Dot11EltCSA].len == 3 >>> assert pkt[Dot11Action][Dot11SpectrumManagement][Dot11CSA][Dot11EltCSA].mode == 1 >>> assert pkt[Dot11Action][Dot11SpectrumManagement][Dot11CSA][Dot11EltCSA].new_channel == 11 >>> assert pkt[Dot11Action][Dot11SpectrumManagement][Dot11CSA][Dot11EltCSA].channel_switch_count == 5 ###(054)=[passed] Dot11OBSS >>> data = b'\x00\x008\x00/@@\xa0 \x08\x00\xa0 \x08\x00\x00\x7fB\xe9\n\x00\x00\x00\x00\x10\x16l\t\xa0\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x9b\xe9\n\x00\x00\x00\x00\x16\x00\x11\x03\xc3\x00\xbf\x01\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff`\x8d&\xa6\xd6\x04`\x8d&\xa6\xd6\x04@S\xe2\xb0\x04\x00\x00\x00\x00\x00d\x00\x11\x14\x00\rArc-QA-Lab-2G\x01\x08\x82\x84\x8b\x96$0Hl\x03\x01\x01\x05\x04\x02\x03\x00\x00\x07\x06AE \x01\r\x14#\x02\x19\x00*\x01\x042\x04\x0c\x12\x18`0\x18\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x02\x00\x0f\xac\x04\x0c\x00\x0b\x05\x00\x00\xc1\x00\x00F\x053\x00\x00\x00\x006\x03d\x00\x00-\x1a\xef\x19\x17\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x16\x01\x08\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00J\x0e\x14\x00\n\x00,\x01\xc8\x00\x14\x00\x05\x00\x19\x00\x7f\n\x05\x00\x08\x80\x00\x00\x00@\x00@\xff #\x05\x00\x08\x12\x00\x10" \x02\xc0\x0fB\x85\x10\x00\x0c\x00\xea\xff\xea\xffz\x1c\xc7q\x1c\xc7q\x1c\xc7q\xff\x07$\xf4?\x00\x02\xfc\xff\xff\x0e&\x00\x00\xa4\x08 \xa4\x08@C\x08`2\x08\xdd\x1d\x00P\xf2\x04\x10J\x00\x01\x10\x10D\x00\x01\x02\x10<\x00\x01\x03\x10I\x00\x06\x007*\x00\x01 \xdd\x1e\x00\x90L\x04\x18\xbf\x0c\xb1i\x8a\x0f\xea\xff\x00\x00\xea\xff\x00\x00\xc0\x05\x00\x01\x00\x00\x00\xc3\x02\x005\xdd\n\x00\x10\x18\x02\x00\x00\x1c\x00\x00\x01\xdd\x18\x00P\xf2\x02\x01\x01\x80\x00\x03\xa4\x00\x00\'\xa4\x00\x00BC^\x00b2/\x00l\x02\x7f\x00 \x8d\xf4\xe1' >>> pkt = RadioTap(data) >>> >>> assert Dot11EltOBSS in pkt >>> >>> assert pkt[Dot11EltOBSS].ID == 74 >>> assert pkt[Dot11EltOBSS].len == 14 >>> assert pkt[Dot11EltOBSS].Passive_Dwell == 20 >>> assert pkt[Dot11EltOBSS].Active_Dwell == 10 >>> assert pkt[Dot11EltOBSS].Scan_Interval == 300 >>> assert pkt[Dot11EltOBSS].Passive_Total_Per_Channel == 200 >>> assert pkt[Dot11EltOBSS].Active_Total_Per_Channel == 20 >>> assert pkt[Dot11EltOBSS].Delay == 5 >>> assert pkt[Dot11EltOBSS].Activity_Threshold == 25 ###(055)=[passed] Dot11VHTOperation >>> pkt = RadioTap(b"\x00\x008\x00/@@\xa0 \x08\x00\xa0 \x08\x00\x00K\x1178\x00\x00\x00\x00\x10\x0c<\x14@\x01\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\xffj78\x00\x00\x00\x00\x16\x00\x11\x03\xb6\x00\xba\x01\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff`\x8d&\xa6\xd6\x05`\x8d&\xa6\xd6\x05\xb0i~\x96\x9e\x03\x00\x00\x00\x00d\x00\x11\x11\x00\rArc-QA-Lab-5G\x01\x08\x8c\x12\x98$\xb0H`l\x05\x04\x00\x03\x00\x00\x07>> assert Dot11EltVHTOperation in pkt >>> assert Dot11VHTOperationInfo in pkt >>> >>> assert pkt[Dot11EltVHTOperation].ID == 192 >>> assert pkt[Dot11EltVHTOperation].VHT_Operation_Info >>> assert pkt[Dot11EltVHTOperation].VHT_Operation_Info.channel_width == 1 >>> assert pkt[Dot11EltVHTOperation].VHT_Operation_Info.channel_center0 == 42 >>> assert pkt[Dot11EltVHTOperation].VHT_Operation_Info.channel_center1 == 50 ###(056)=[passed] Dot11EltVHTOperation in isolation >>> pkt = Dot11EltVHTOperation(b'\xc0\x05\x01*2\x00\x00') >>> assert pkt[Dot11Elt::{"ID": 192}].len == 5 ###(057)=[passed] Dot11EltOBSS in isolation >>> pkt = Dot11EltOBSS(b'J\x0e\x14\x00\n\x00,\x01\xc8\x00\x14\x00\x05\x00\x19\x00') >>> assert pkt[Dot11Elt::{"ID": 74}].len == 14 ###(058)=[passed] Dot11EltCSA in isolation >>> pkt = Dot11EltCSA(b'%\x03\x01\x0b\x05') >>> assert pkt[Dot11Elt::{"ID": 37}].len == 3 ###(059)=[passed] Dot11S1GBeacon >>> pkt=Dot11(b"\x1c\x18\x00\x00,/u\x1c\x103hq\xf8\x00\x00\xd5\x08\x01\x00d\x00\x00\x00\x00\x00\x05\x02\x00\x01\xd9\x0f\x9e\x00@\x18\x80\x0c\x00\x02@\x00\xfe\x00\xfc\x01\x00\xe8\x06\x06\x18&(\xc4\xcc\xd6\x02d\x00\x00\nWiFiDiving\xdd\x18\x00P\xf2\x02\x01\x01\x01\x00\x03\xa4\xd5\x01'\xa4\xd5\x01BC\xd5\x01b2\xd5\x01") >>> assert pkt[Dot11].type == 3 >>> assert pkt[Dot11].subtype == 1 >>> assert pkt[Dot11].addr1 == '2c:2f:75:1c:10:33' >>> assert pkt[Dot11S1GBeacon].timestamp == 16281960 >>> assert pkt[Dot11Elt::{"ID": 0}].info == b"WiFiDiving" >>> assert pkt[Dot11Elt::{"ID": 214}].len == 2 >>> assert pkt[Dot11Elt::{"ID": 217}].len == 15 >>> assert pkt[Dot11Elt::{"ID": 232}].len == 6 >>> assert pkt[Dot11].FCfield_bw == 3 >>> assert pkt[Dot11].FCfield2.next_tbtt == False >>> assert pkt[Dot11].FCfield2.comp_ssid == False >>> assert pkt[Dot11].FCfield2.ano == False >>> assert pkt[Dot11].FCfield.security == False >>> assert pkt[Dot11].FCfield.AP_PM == False Regression tests for the Dot15D4, SixLoWPAN and Zigbee layers ━ Run at 04:11:36 from [test/scapy/layers/dot15d4.uts] by UTscapy in 0.8180050849914551 └ Passed=60 └ Failed=0 ###### ## Dot15D4 tests ###### ###(000)=[passed] Dot15D4 layers >>> pkt = Dot15d4()/Dot15d4Ack()/Dot15d4AuxSecurityHeader()/Dot15d4Beacon()/Dot15d4Cmd()/Dot15d4CmdAssocReq()/Dot15d4CmdAssocResp()/Dot15d4CmdCoordRealign()/Dot15d4CmdCoordRealignPage()/Dot15d4CmdDisassociation()/Dot15d4CmdGTSReq()/Dot15d4Data()/Dot15d4FCS() >>> assert Dot15d4 in pkt.layers() >>> assert Dot15d4Ack in pkt.layers() >>> assert Dot15d4AuxSecurityHeader in pkt.layers() >>> assert Dot15d4Beacon in pkt.layers() >>> assert Dot15d4Cmd in pkt.layers() >>> assert Dot15d4CmdAssocReq in pkt.layers() >>> assert Dot15d4CmdAssocResp in pkt.layers() >>> assert Dot15d4CmdCoordRealign in pkt.layers() >>> assert Dot15d4CmdCoordRealignPage in pkt.layers() >>> assert Dot15d4CmdDisassociation in pkt.layers() >>> assert Dot15d4CmdGTSReq in pkt.layers() >>> assert Dot15d4Data in pkt.layers() >>> assert Dot15d4FCS in pkt.layers() ###(001)=[passed] Dot15d4FCS parent matching >>> pkt = Ether()/IP()/Dot15d4FCS() >>> assert pkt[Dot15d4] ###(002)=[passed] Dot15d4FCS - Beacon (without pending addresses) >>> pkt = Dot15d4FCS(b'\x00\x80\x89\xaa\x99\x00\x00\xff\xcf\x00\x00\x00"\x84\xfe\xca\xef\xbe\xed\xfe\xce\xfa\xff\xff\xff\x00X\xa4') >>> assert Dot15d4FCS in pkt.layers() >>> assert pkt[Dot15d4FCS].fcf_frametype == 0 >>> assert pkt[Dot15d4FCS].fcf_security == False >>> assert pkt[Dot15d4FCS].fcf_pending == False >>> assert pkt[Dot15d4FCS].fcf_ackreq == False >>> assert pkt[Dot15d4FCS].fcf_panidcompress == False >>> assert pkt[Dot15d4FCS].fcf_destaddrmode == 0 >>> assert pkt[Dot15d4FCS].fcf_framever == 0 >>> assert pkt[Dot15d4FCS].fcf_srcaddrmode == 2 >>> assert pkt[Dot15d4FCS].seqnum == 137 >>> assert Dot15d4Beacon in pkt.layers() >>> assert pkt[Dot15d4Beacon].src_panid == 0x99aa >>> assert pkt[Dot15d4Beacon].src_addr == 0x0000 >>> assert pkt[Dot15d4Beacon].sf_beaconorder == 15 >>> assert pkt[Dot15d4Beacon].sf_sforder == 15 >>> assert pkt[Dot15d4Beacon].sf_finalcapslot == 15 >>> assert pkt[Dot15d4Beacon].sf_battlifeextend == False >>> assert pkt[Dot15d4Beacon].sf_pancoord == True >>> assert pkt[Dot15d4Beacon].sf_assocpermit == True >>> assert pkt[Dot15d4Beacon].gts_spec_permit == False >>> assert pkt[Dot15d4Beacon].gts_spec_reserved == 0 >>> assert pkt[Dot15d4Beacon].gts_spec_desccount == 0 >>> assert pkt[Dot15d4Beacon].pa_num_short == 0 >>> assert pkt[Dot15d4Beacon].pa_num_long == 0 >>> assert pkt[Dot15d4Beacon].pa_short_addresses == [] >>> assert pkt[Dot15d4Beacon].pa_long_addresses == [] >>> assert raw(pkt[Dot15d4Beacon].payload) == b'\x00"\x84\xfe\xca\xef\xbe\xed\xfe\xce\xfa\xff\xff\xff\x00' >>> assert pkt[Dot15d4FCS].fcs == 0xa458 ###(003)=[passed] Dot15d4FCS - Beacon (with pending addresses) >>> pkt = Dot15d4FCS(b'\x00\x80\x89\xaa\x99\x00\x00\xff\xcf\x00\x124\x12xV\x88wfUD3"\x11\x00"\x84\xfe\xca\xef\xbe\xed\xfe\xce\xfa\xff\xff\xff\x00\x96\xd3') >>> assert Dot15d4FCS in pkt.layers() >>> assert pkt[Dot15d4FCS].fcf_frametype == 0 >>> assert pkt[Dot15d4FCS].fcf_security == False >>> assert pkt[Dot15d4FCS].fcf_pending == False >>> assert pkt[Dot15d4FCS].fcf_ackreq == False >>> assert pkt[Dot15d4FCS].fcf_panidcompress == False >>> assert pkt[Dot15d4FCS].fcf_destaddrmode == 0 >>> assert pkt[Dot15d4FCS].fcf_framever == 0 >>> assert pkt[Dot15d4FCS].fcf_srcaddrmode == 2 >>> assert pkt[Dot15d4FCS].seqnum == 137 >>> assert Dot15d4Beacon in pkt.layers() >>> assert pkt[Dot15d4Beacon].src_panid == 0x99aa >>> assert pkt[Dot15d4Beacon].src_addr == 0x0000 >>> assert pkt[Dot15d4Beacon].sf_beaconorder == 15 >>> assert pkt[Dot15d4Beacon].sf_sforder == 15 >>> assert pkt[Dot15d4Beacon].sf_finalcapslot == 15 >>> assert pkt[Dot15d4Beacon].sf_battlifeextend == False >>> assert pkt[Dot15d4Beacon].sf_pancoord == True >>> assert pkt[Dot15d4Beacon].sf_assocpermit == True >>> assert pkt[Dot15d4Beacon].gts_spec_permit == False >>> assert pkt[Dot15d4Beacon].gts_spec_reserved == 0 >>> assert pkt[Dot15d4Beacon].gts_spec_desccount == 0 >>> assert pkt[Dot15d4Beacon].pa_num_short == 2 >>> assert pkt[Dot15d4Beacon].pa_num_long == 1 >>> assert pkt[Dot15d4Beacon].pa_short_addresses == [0x1234, 0x5678] >>> assert pkt[Dot15d4Beacon].pa_long_addresses == [0x1122334455667788] >>> assert raw(pkt[Dot15d4Beacon].payload) == b'\x00"\x84\xfe\xca\xef\xbe\xed\xfe\xce\xfa\xff\xff\xff\x00' >>> assert pkt[Dot15d4FCS].fcs == 0xd396 ###(004)=[passed] Dot15d4FCS - Coordinator Realignment (without the channel page) >>> pkt = Dot15d4FCS(b'#\xcc\x89\xff\xff\x88wfUD3"\x11\xaa\x99\xff\xee\xdd\xcc\xbb\xaa\x99\x88\x08\xaa\x99\xde\xc0\x14\xad\xde\\!') >>> assert Dot15d4FCS in pkt.layers() >>> assert pkt[Dot15d4FCS].fcf_frametype == 3 >>> assert pkt[Dot15d4FCS].fcf_security == False >>> assert pkt[Dot15d4FCS].fcf_pending == False >>> assert pkt[Dot15d4FCS].fcf_ackreq == True >>> assert pkt[Dot15d4FCS].fcf_panidcompress == False >>> assert pkt[Dot15d4FCS].fcf_destaddrmode == 3 >>> assert pkt[Dot15d4FCS].fcf_framever == 0 >>> assert pkt[Dot15d4FCS].fcf_srcaddrmode == 3 >>> assert pkt[Dot15d4FCS].seqnum == 137 >>> assert Dot15d4Cmd in pkt.layers() >>> assert pkt[Dot15d4Cmd].dest_panid == 0xffff >>> assert pkt[Dot15d4Cmd].dest_addr == 0x1122334455667788 >>> assert pkt[Dot15d4Cmd].src_panid == 0x99aa >>> assert pkt[Dot15d4Cmd].src_addr == 0x8899aabbccddeeff >>> assert pkt[Dot15d4Cmd].cmd_id == 0x08 >>> assert Dot15d4CmdCoordRealign in pkt.layers() >>> assert pkt[Dot15d4CmdCoordRealign].panid == 0x99aa >>> assert pkt[Dot15d4CmdCoordRealign].coord_address == 0xc0de >>> assert pkt[Dot15d4CmdCoordRealign].channel == 20 >>> assert pkt[Dot15d4CmdCoordRealign].dev_address == 0xdead >>> assert raw(pkt[Dot15d4CmdCoordRealign].payload) == b'' >>> assert pkt[Dot15d4FCS].fcs == 0x215c ###(005)=[passed] Dot15d4FCS - Coordinator Realignment (with the channel page) >>> pkt = Dot15d4FCS(b'#\xcc\x89\xff\xff\x88wfUD3"\x11\xaa\x99\xff\xee\xdd\xcc\xbb\xaa\x99\x88\x08\xaa\x99\xde\xc0\x14\xad\xde\x00\xc8\x98') >>> assert Dot15d4FCS in pkt.layers() >>> assert pkt[Dot15d4FCS].fcf_frametype == 3 >>> assert pkt[Dot15d4FCS].fcf_security == False >>> assert pkt[Dot15d4FCS].fcf_pending == False >>> assert pkt[Dot15d4FCS].fcf_ackreq == True >>> assert pkt[Dot15d4FCS].fcf_panidcompress == False >>> assert pkt[Dot15d4FCS].fcf_destaddrmode == 3 >>> assert pkt[Dot15d4FCS].fcf_framever == 0 >>> assert pkt[Dot15d4FCS].fcf_srcaddrmode == 3 >>> assert pkt[Dot15d4FCS].seqnum == 137 >>> assert Dot15d4Cmd in pkt.layers() >>> assert pkt[Dot15d4Cmd].dest_panid == 0xffff >>> assert pkt[Dot15d4Cmd].dest_addr == 0x1122334455667788 >>> assert pkt[Dot15d4Cmd].src_panid == 0x99aa >>> assert pkt[Dot15d4Cmd].src_addr == 0x8899aabbccddeeff >>> assert pkt[Dot15d4Cmd].cmd_id == 0x08 >>> assert Dot15d4CmdCoordRealign in pkt.layers() >>> assert pkt[Dot15d4CmdCoordRealign].panid == 0x99aa >>> assert pkt[Dot15d4CmdCoordRealign].coord_address == 0xc0de >>> assert pkt[Dot15d4CmdCoordRealign].channel == 20 >>> assert pkt[Dot15d4CmdCoordRealign].dev_address == 0xdead >>> assert Dot15d4CmdCoordRealignPage in pkt.layers() >>> assert pkt[Dot15d4CmdCoordRealignPage].channel_page == 0 >>> assert raw(pkt[Dot15d4CmdCoordRealignPage].payload) == b'' >>> assert pkt[Dot15d4FCS].fcs == 0x98c8 ###### ## SixLoWPAN tests ###### ###(006)=[passed] Set SixLoWPAN >>> conf.dot15d4_protocol = "sixlowpan" ###(007)=[passed] SixLoWPAN layers >>> pkt = SixLoWPAN()/LoWPANFragmentationFirst()/LoWPANFragmentationSubsequent()/LoWPANMesh()/LoWPANUncompressedIPv6() >>> assert SixLoWPAN in pkt.layers() >>> assert LoWPANFragmentationFirst in pkt.layers() >>> assert LoWPANFragmentationSubsequent in pkt.layers() >>> assert LoWPANMesh in pkt.layers() >>> assert LoWPANUncompressedIPv6 in pkt.layers() ###(008)=[passed] Default dissection >>> lowpan_frag_first = b'\xc29\x00\x17`\x00\x00\x00\x00\x00\x00\x00 \x02\r\xb8\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01 \x02\r\xb8\x00\x00\x00\x00\x00\x11"\xff\xfe3DU\xc4\xf9\x00Pw\x9b\x18\x9d\x00\x00\x01\xa2P\x18\x13X\x08\x10\x00\x00GET / HTTP/1.1\r\nHost: [aaaa::11:22ff' >>> lowpan_frag_first_packet = SixLoWPAN(lowpan_frag_first) >>> >>> assert lowpan_frag_first_packet.load == b'\xc4\xf9\x00Pw\x9b\x18\x9d\x00\x00\x01\xa2P\x18\x13X\x08\x10\x00\x00GET / HTTP/1.1\r\nHost: [aaaa::11:22ff' ###(009)=[passed] Frag second dissection >>> lowpan_frag_second = b'\xe29\x00\x17\x0c`\x00\x00\x00\x00\x00\x00\x00 \x02\r\xb8\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01 \x02\r\xb8\x00\x00\x00\x00\x00\x11"\xff\xfe3DUerer: http://[aaaa::11:22ff:fe33:4455]/sensor.shtml\r\nUse' >>> lowpan_frag_sec_packet = SixLoWPAN(lowpan_frag_second) >>> >>> assert LoWPANFragmentationSubsequent in lowpan_frag_sec_packet >>> assert lowpan_frag_sec_packet.datagramSize == 569 >>> assert lowpan_frag_sec_packet.datagramTag == 0x17 ###(010)=[passed] LoWPAN_IPHC dissections >>> lowpan_iphc = b"\x78\xf6\x00\x06\x80\x00\x01\x00\x50\xc4\xf9\x00\x00\x02\x12\x77\x9b\x1a\x9a\x50\x18\x04\xc4\x12\xd5\x00\x00\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x48\x54\x4d\x4c\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x48\x54\x4d\x4c\x20\x34\x2e\x30\x31\x20\x54\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x61\x6c\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70" >>> lowpan_frag_iphc = LoWPAN_IPHC(lowpan_iphc) >>> >>> assert IPv6 in lowpan_frag_iphc >>> assert lowpan_frag_iphc.load == b'>> >>> p = LoWPAN_IPHC(tf=0x0, flowlabel=0x8, nhField=0x3a, hopLimit=64)/IPv6(dst="aaaa::11:22ff:fe33:4455", src="aaaa::1")/ICMPv6EchoRequest() >>> p = LoWPAN_IPHC(raw(p)) >>> assert ICMPv6EchoRequest in p >>> assert p.dst == "aaaa::11:22ff:fe33:4455" >>> >>> q = LoWPAN_IPHC(tf=0x0) >>> assert raw(q) == b'`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ###(011)=[passed] LoWPAN_IPHC - M=1, DAC=1, DAM=0 >>> p = Dot15d4(b'a\x88\x10"\x00\x13\x00\x16Pw\x9cB\xe6\x87`\x12\xe1\x08~\x04\x08\x00\x00\x00\xf0Q\xc7\x1bX\x9e\xf3\x00\x00\x00\x1c\xfa\xfa\xfa\xfa\xe7k') >>> >>> assert p.m == 1 >>> assert p.dac == 1 >>> assert p.dam == 0 >>> assert p.dst == "ff00::f0:51c7" >>> >>> p = Dot15d4(raw(p)) >>> assert p.dst == "ff00::f0:51c7" >>> >>> assert raw(p) == b'a\x88\x10"\x00\x13\x00\x16Pw\x9cB\xe6\x87`\x12\xe1\x08~\x04\x08\x00\x00\x00\xf0Q\xc7\x1bX\x9e\xf3\x00\x00\x00\x1c\xfa\xfa\xfa\xfa\xe7k' ###(012)=[passed] LoWPAN_NHC - NHC_UDP >>> p = Dot15d4(b'A\x88\x00"\x00\xff\xff\x13\x00};\x01\xf0\xda\xc9\xda\xc9\x85\x80\xc8\x00\x00\x00\x00\x00\x00\x00\xf2\xeb') >>> >>> assert LoWPAN_NHC in p >>> assert p[LoWPAN_NHC].exts[0].udpSourcePort == 56009 >>> assert p[LoWPAN_NHC].exts[0].udpDestPort == 56009 >>> assert p[LoWPAN_NHC].exts[0].udpChecksum == 0x8580 >>> assert p[UDP].sport == 56009 >>> assert p[UDP].dport == 56009 >>> >>> p.clear_cache() >>> >>> assert raw(p) == b'A\x88\x00"\x00\xff\xff\x13\x00};\x01\xf0\xda\xc9\xda\xc9\x85\x80\xc8\x00\x00\x00\x00\x00\x00\x00\xf2\xeb' ###(013)=[passed] LoWPAN_NHC - compute UDP NHC_UDP >>> p = Dot15d4()/Dot15d4Data()/LoWPAN_IPHC()/LoWPAN_NHC()/IPv6()/UDP(sport=61618, dport=61621) >>> assert raw(p) == b'\x01\x08\x01\xff\xff\xff\xffd\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xf3%\x1et' >>> >>> assert p.exts[0].udpSourcePort == 2 >>> assert p.exts[0].udpDestPort == 5 >>> assert p.exts[0].udpChecksum == 0x1e74 ###(014)=[passed] LoWPAN_NHC - NHC_IPv6Ext >>> p = Dot15d4(b'a\x88\x07"\x00\x16\x00\x13\x00|f\x10\x00\x13\x00\x12\xe1\x08~\x04\n\x00\x00\x00\xf0Q\xc7\x1bX\x9f\t\x00\x00\x00\t\xfa\xfa\xfa\xfa\xf0\xeb') >>> >>> assert LoWPAN_NHC in p >>> assert p[LoWPAN_NHC].exts[0].eid == 0 >>> assert p[LoWPAN_NHC].exts[0].len == 8 >>> assert p[LoWPAN_NHC].exts[0].data == b'~\x04\n\x00\x00\x00\xf0Q' ###(015)=[passed] LoWPAN_HC1 dissection & build >>> dat = b'\x00"\x19\x100\xe5\x00\x1c\xda\x00\x00\x01\x08\x00E\x00\x00m\xc7\xf3\x00\x00@\x11W\x0f\xac\x10\x02)\xac\x10\x014EZEZ\x00Y\x8f\xaaEX\x02\x01\x00\x00\x01\x01\xff\x00\x0c\xd14\x7f\xc1H4\x00\x05\xc68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001A\xcc\xa5\xff\xff\x8a\x18\x00\xff\xff\xda\x1c\x00\x88\x18\x00\xff\xff\xda\x1c\x00B\xfb`@\x04\x01\x1f\x88\xc0Hello 005 0x626B\n\xa5\x0b' >>> p = Ether(dat) >>> p.clear_cache() >>> >>> assert p[LoWPAN_HC1].src == p[IPv6].src == 'fe80::21c:daff:ff00:1888' >>> assert p[LoWPAN_HC1].dst == p[IPv6].dst == 'fe80::21c:daff:ff00:188a' >>> assert p[LoWPAN_HC1].hopLimit == p[IPv6].hlim == 64 >>> assert p[LoWPAN_HC1].hc2Field.sc == 0 >>> assert p[LoWPAN_HC1].hc2Field.dc == 1 >>> assert p[LoWPAN_HC1].hc2Field.lc == 1 >>> assert p[IPv6].nh == socket.IPPROTO_UDP >>> assert p[LoWPAN_HC1].udpSourcePort == p.getlayer(UDP, 2).sport == 1025 >>> assert p[LoWPAN_HC1].udpDestPort == p.getlayer(UDP, 2).dport == 61617 >>> assert p[LoWPAN_HC1].udpChecksum == p.getlayer(UDP, 2).chksum == 0xf88c >>> assert p.getlayer(UDP, 2).len == 27 >>> >>> assert raw(p) == dat ###(016)=[passed] LoWPAN_HC1 build from scratch >>> a = Dot15d4()/Dot15d4Data()/LoWPAN_HC1()/IPv6()/UDP() >>> assert raw(a) == b'\x01\x08\x01\xff\xff\xff\xffB\x03\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x03P\x03P\x00\x8f\xf7 ' >>> >>> a = Dot15d4(raw(a)) >>> assert a[LoWPAN_HC1].nh == 1 >>> assert a[LoWPAN_HC1].hc2 == 1 >>> assert a[LoWPAN_HC1].udpDestPort >>> assert a[LoWPAN_HC1].udpSourcePort ###(017)=[passed] Advanced packets - dissection & FCS computation >>> ieee802_firstfrag = b"\x41\xcc\xa3\xcd\xab\x16\x15\x14\xfe\xff\x13\x12\x02\x55\x44\x33\xfe\xff\x22\x11\x02\xc3\x42\x00\x23\x78\xf6\x00\x06\x80\x00\x01\x00\x50\xc4\xf9\x00\x00\x02\x12\x77\x9b\x1a\x9a\x50\x18\x04\xc4\x12\xd5\x00\x00\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x48\x54\x4d\x4c\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x48\x54\x4d\x4c\x20\x34\x2e\x30\x31\x20\x54\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x61\x6c\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x39\xb5" >>> ieee = Dot15d4FCS(ieee802_firstfrag) >>> ieee.show() ###[ 802.15.4 - FCS ]### fcf_reserved_1= 0 fcf_panidcompress= True fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= Long fcf_framever= 0 fcf_destaddrmode= Long fcf_reserved_2= 0 seqnum = 163 fcs = 0xb539 ###[ 802.15.4 Data ]### dest_panid= 0xabcd dest_addr = 02:12:13:ff:fe:14:15:16 src_addr = 02:11:22:ff:fe:33:44:55 ###[ 6LoWPAN First Fragmentation Packet ]### reserved = 24 datagramSize= 834 datagramTag= 0x23 ###[ LoWPAN IP Header Compression Packet ]### _reserved = 3 tf = 3 nh = Inline hlim = Inline cid = Present (1) sac = Stateful (1) sam = Compressed (3) m = 0 dac = Stateful (1) dam = 16-bits inline (3) sci = 0 dci = 0 nhField = TCP hopLimit = 128 src = fe80:: dst = ::1 ###[ Raw ]### load = b'\x00P\xc4\xf9\x00\x00\x02\x12w\x9b\x1a\x9aP\x18\x04\xc4\x12\xd5\x00\x00>> assert ieee.fcs == 0xb539 >>> >>> del ieee.fcs >>> ieee = Dot15d4FCS(raw(ieee)) >>> assert ieee.fcs == 0xb539 >>> >>> >>> ieee802_secfrag = b"\x41\xcc\x4d\xcd\xab\x55\x44\x33\xfe\xff\x22\x11\x02\x16\x15\x14\xfe\xff\x13\x12\x02\xe2\x39\x00\x17\x10\x69\x76\x65\x0d\x0a\x52\x65\x66\x65\x72\x65\x72\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\x5b\x61\x61\x61\x61\x3a\x3a\x31\x31\x3a\x32\x32\x66\x66\x3a\x66\x65\x33\x33\x3a\x34\x34\x35\x35\x5d\x2f\x73\x65\x6e\x73\x6f\x72\x2e\x73\x68\x74\x6d\x6c\x0d\x0a\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x58\x31\x31\x3b\x20\x55\x3b\x20\x4c\x69\x66\xac" >>> ieee = Dot15d4FCS(ieee802_secfrag) >>> ieee.show() ###[ 802.15.4 - FCS ]### fcf_reserved_1= 0 fcf_panidcompress= True fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= Long fcf_framever= 0 fcf_destaddrmode= Long fcf_reserved_2= 0 seqnum = 77 fcs = 0xac66 ###[ 802.15.4 Data ]### dest_panid= 0xabcd dest_addr = 02:11:22:ff:fe:33:44:55 src_addr = 02:12:13:ff:fe:14:15:16 ###[ 6LoWPAN Subsequent Fragmentation Packet ]### reserved = 28 datagramSize= 569 datagramTag= 0x17 datagramOffset= 16 ###[ Raw ]### load = b'ive\r\nReferer: http://[aaaa::11:22ff:fe33:4455]/sensor.shtml\r\nUser-Agent: Mozilla/5.0 (X11; U; Li' >>> assert ieee.fcs == 0xac66 >>> >>> del ieee.fcs >>> ieee = Dot15d4FCS(raw(ieee)) >>> assert ieee.fcs == 0xac66 >>> >>> ieee802_iphc = b"\x41\xcc\xb5\xcd\xab\x16\x15\x14\xfe\xff\x13\x12\x02\x55\x44\x33\xfe\xff\x22\x11\x02\x78\xf6\x00\x06\x80\x00\x01\x00\x50\xc4\xfa\x00\x00\x01\xf7\x89\xf3\x02\x5f\x50\x18\x04\xc4\x48\x28\x00\x00\x43\x6f\x6e\x74\x65\x6e\x74\x2d\x74\x79\x70\x65\x3a\x20\x74\x65\x78\x74\x2f\x63\x73\x73\x0d\x0a\x0d\x0a\xc1\x16" >>> ieee = Dot15d4FCS(ieee802_iphc) >>> ieee.show() ###[ 802.15.4 - FCS ]### fcf_reserved_1= 0 fcf_panidcompress= True fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= Long fcf_framever= 0 fcf_destaddrmode= Long fcf_reserved_2= 0 seqnum = 181 fcs = 0x16c1 ###[ 802.15.4 Data ]### dest_panid= 0xabcd dest_addr = 02:12:13:ff:fe:14:15:16 src_addr = 02:11:22:ff:fe:33:44:55 ###[ LoWPAN IP Header Compression Packet ]### _reserved = 3 tf = 3 nh = Inline hlim = Inline cid = Present (1) sac = Stateful (1) sam = Compressed (3) m = 0 dac = Stateful (1) dam = 16-bits inline (3) sci = 0 dci = 0 nhField = TCP hopLimit = 128 src = fe80:: dst = ::1 ###[ IPv6 ]### version = 6 tc = 0 fl = 0 plen = 46 nh = TCP hlim = 128 src = fe80:: dst = ::1 ###[ TCP ]### sport = http dport = 50426 seq = 503 ack = 2314404447 dataofs = 5 reserved = 0 flags = PA window = 1220 chksum = 0x4828 urgptr = 0 options = [] ###[ HTTP 1 ]### ###[ Raw ]### load = b'Content-type: text/css\r\n\r\n' >>> assert ieee.fcs == 0x16c1 >>> >>> assert ieee[LoWPAN_IPHC].dst == '::1' >>> >>> del ieee.fcs >>> ieee = Dot15d4FCS(raw(ieee)) >>> assert ieee.fcs == 0x16c1 ###(018)=[passed] Dot15d4AuxSecurityHeader - build & dissect >>> p = Dot15d4AuxSecurityHeader(b"\x04\x05\x00\x00\x00") >>> assert p.sec_sc_keyidmode == 0 >>> assert p.sec_sc_seclevel == 4 >>> >>> p = Dot15d4AuxSecurityHeader(b"\x18\x05\x00\x00\x00\xff\xee\xdd\xcc\xbb\xaa\x00\x99\x88\x77") >>> assert p.sec_sc_keyidmode == 3 >>> assert p.sec_keyid_keysource == 11024999611375677183 ###(019)=[passed] Fragmentate packet & defragmentate >>> ipv6p = b"\x60\x00\x00\x00\x02\x11\x06\x80\x20\x02\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\x20\x02\x0d\xb8\x00\x00\x00\x00\x00\x11\x22\xff\xfe\x33\x44\x55" >>> tcpp = b"\xc4\xf9\x00\x50\x77\x9b\x18\x9d\x00\x00\x01\xa2\x50\x18\x13\x58\x08\x10\x00\x00" >>> httpp = b"\x47\x45\x54\x20\x2f\x20\x48\x54\x54\x50\x2f\x31\x2e\x31\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x5b\x61\x61\x61\x61\x3a\x3a\x31\x31\x3a\x32\x32\x66\x66\x3a\x66\x65\x33\x33\x3a\x34\x34\x35\x35\x5d\x0d\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x3a\x20\x6b\x65\x65\x70\x2d\x61\x6c\x69\x76\x65\x0d\x0a\x52\x65\x66\x65\x72\x65\x72\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\x5b\x61\x61\x61\x61\x3a\x3a\x31\x31\x3a\x32\x32\x66\x66\x3a\x66\x65\x33\x33\x3a\x34\x34\x35\x35\x5d\x2f\x73\x65\x6e\x73\x6f\x72\x2e\x73\x68\x74\x6d\x6c\x0d\x0a\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x58\x31\x31\x3b\x20\x55\x3b\x20\x4c\x69\x6e\x75\x78\x20\x69\x36\x38\x36\x3b\x20\x65\x6e\x2d\x55\x53\x29\x20\x41\x70\x70\x6c\x65\x57\x65\x62\x4b\x69\x74\x2f\x35\x33\x34\x2e\x31\x36\x20\x28\x4b\x48\x54\x4d\x4c\x2c\x20\x6c\x69\x6b\x65\x20\x47\x65\x63\x6b\x6f\x29\x20\x55\x62\x75\x6e\x74\x75\x2f\x31\x30\x2e\x31\x30\x20\x43\x68\x72\x6f\x6d\x69\x75\x6d\x2f\x31\x30\x2e\x30\x2e\x36\x34\x38\x2e\x31\x33\x33\x20\x43\x68\x72\x6f\x6d\x65\x2f\x31\x30\x2e\x30\x2e\x36\x34\x38\x2e\x31\x33\x33\x20\x53\x61\x66\x61\x72\x69\x2f\x35\x33\x34\x2e\x31\x36\x0d\x0a\x41\x63\x63\x65\x70\x74\x3a\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x78\x6d\x6c\x2c\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x78\x68\x74\x6d\x6c\x2b\x78\x6d\x6c\x2c\x74\x65\x78\x74\x2f\x68\x74\x6d\x6c\x3b\x71\x3d\x30\x2e\x39\x2c\x74\x65\x78\x74\x2f\x70\x6c\x61\x69\x6e\x3b\x71\x3d\x30\x2e\x38\x2c\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x2c\x2a\x2f\x2a\x3b\x71\x3d\x30\x2e\x35\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x45\x6e\x63\x6f\x64\x69\x6e\x67\x3a\x20\x67\x7a\x69\x70\x2c\x64\x65\x66\x6c\x61\x74\x65\x2c\x73\x64\x63\x68\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x4c\x61\x6e\x67\x75\x61\x67\x65\x3a\x20\x65\x6e\x2d\x55\x53\x2c\x65\x6e\x3b\x71\x3d\x30\x2e\x38\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x43\x68\x61\x72\x73\x65\x74\x3a\x20\x49\x53\x4f\x2d\x38\x38\x35\x39\x2d\x31\x2c\x75\x74\x66\x2d\x38\x3b\x71\x3d\x30\x2e\x37\x2c\x2a\x3b\x71\x3d\x30\x2e\x33\x0d\x0a\x0d\x0a" >>> ipv6_tcp_http = IPv6(ipv6p + tcpp + httpp) >>> pkt = sixlowpan_fragment(ipv6_tcp_http, 0x17) >>> >>> assert len(pkt) == 6 >>> assert isinstance(pkt[0], LoWPANFragmentationFirst) >>> assert all(isinstance(x, LoWPANFragmentationSubsequent) for x in pkt[1:]) >>> >>> ipv6 = sixlowpan_defragment(pkt)[0x17] >>> assert TCP in ipv6 >>> assert raw(ipv6_tcp_http) == raw(ipv6) ###(020)=[passed] Mesh Header. >>> ###(021)=[passed] SixLoWPAN - Advanced 1 >>> packet = LoWPAN_IPHC(b"\x7b\x49\x3a\x02\x01\xff\x02\x02\x02\x87\x00\x02\x0b\x00\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x12\x74\x02\x00\x02\x02\x02") >>> assert packet.nhField == 0x3a >>> assert packet.src == "::" >>> assert packet.dst == "ff02::1:ff02:202" ###(022)=[passed] SixLoWPAN - Advanced 2 >>> packet = SixLoWPAN(b"\x7b\x49\x3a\x02\x01\xff\x01\x01\x01\x87\x00\x57\xe6\x00\x00\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x02\x12\x74\x01\x00\x01\x01\x01") >>> assert packet.nhField == 0x3a >>> assert packet.src == "::" >>> assert packet.dst == "ff02::1:ff01:101" ###(023)=[passed] SixLoWPAN - Advanced 3 >>> packet = Ether()/IP()/UDP()/ZEP2()/Dot15d4(fcf_srcaddrmode=2)/Dot15d4Data(src_addr=0x0)/b"\x7b\x33\x3a\x88\x00\x3c\xb9\x60\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x12\x74\x02\x00\x02\x02\x02\x02\x02\x00\x12\x74\x02\x00\x02\x02\x02\x00\x00\x00\x00\x00\x00" >>> packet = Ether(raw(packet)) >>> packet.show2() ###[ Ethernet ]### dst = ff:ff:ff:ff:ff:ff src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 114 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c78 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = zep dport = zep len = 94 chksum = 0xe776 ###[ Zigbee Encapsulation Protocol (V2) ]### preamble = b'EX' ver = 0 type = 0 channel = 0 device = 0 lqi_mode = 1 lqi_val = 0 timestamp = 0 seq = 0 res = 0 length = 0 ###[ 802.15.4 ]### fcf_reserved_1= 0 fcf_panidcompress= False fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= Short fcf_framever= 0 fcf_destaddrmode= Short fcf_reserved_2= 0 seqnum = 1 ###[ 802.15.4 Data ]### dest_panid= 0xffff dest_addr = 0xffff src_panid = 0x0 src_addr = 0x0 ###[ LoWPAN IP Header Compression Packet ]### _reserved = 3 tf = 3 nh = Inline hlim = Compressed/HL255 cid = 0 sac = Stateless (0) sam = Compressed (3) m = 0 dac = Stateless (0) dam = Compressed (3) nhField = ICMPv6 src = fe80::ff:fe00:0 dst = fe80::ff:fe00:ffff ###[ IPv6 ]### version = 6 tc = 0 fl = 0 plen = 40 nh = ICMPv6 hlim = 255 src = fe80::ff:fe00:0 dst = fe80::ff:fe00:ffff ###[ ICMPv6 Neighbor Discovery - Neighbor Advertisement ]### type = Neighbor Advertisement code = 0 cksum = 0x3cb9 R = 0 S = 1 O = 1 res = 0x0 tgt = fe80::212:7402:2:202 ###[ ICMPv6 Neighbor Discovery Option - Destination Link-Layer Address ]### type = 2 len = 2 lladdr = 00:12:74:02:00:02 ###[ ICMPv6 Neighbor Discovery Option - Destination Link-Layer Address ]### type = 2 len = 2 lladdr = 00:00:00:00:00:00 >>> assert packet[LoWPAN_IPHC].src == 'fe80::ff:fe00:0' >>> assert packet[LoWPAN_IPHC].dst == 'fe80::ff:fe00:ffff' ###(024)=[passed] SixLoWPAN - Advanced 4 - SAM=3/SAC=0 decompression >>> packet = Dot15d4(b'A\xc8t\xcd\xab\xff\xff\xcf\r\xa4\xfe\xffn\x95\xe4z;:\x1a\x9b\x01\xd4^\x1e\xdc\x02\xba\x95\x7f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe6\x95n\xff\xfe\xaf\xff\xfd\x08\x1e@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x16\x80\x10\xff\xff\xff\xff\x00\x01\x00\x00\x00\x00\x00\x00\xe6\x95n\xff\xfe\xa4\x05O') >>> assert packet[LoWPAN_IPHC].sac == 0 >>> assert packet[LoWPAN_IPHC].sam == 3 >>> assert packet[LoWPAN_IPHC].dac == 0 >>> assert packet[LoWPAN_IPHC].dam == 3 >>> assert packet[LoWPAN_IPHC].src == "fe80::e695:6eff:fea4:dcf" >>> assert packet[LoWPAN_IPHC].dst == "ff02::1a" ###(025)=[passed] SixLoWPAN - Using ICMP >>> icmp = b"\x7b\xf6\x00\x3a\x00\x01\x87\x00\xaa\x66\x00\x00\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x02\x02\x11\x22\xff\xfe\x33\x44\x55\x00\x00\x00\x00\x00\x00" >>> packet = SixLoWPAN(icmp) >>> assert packet.tf == 0x3 >>> assert packet.nh == 0 >>> assert packet.hlim == 0x3 >>> assert packet.cid == True >>> assert packet.sac == True >>> assert packet.sam == 0x3 >>> assert packet.m == False >>> assert packet.dac == True >>> assert packet.dam == 0x2 >>> assert packet.nhField == 0x3a ###(026)=[passed] LoWPAN_IPHC - Extracted packet >>> icmp = Ether()/IP()/UDP()/ZEP2()/Dot15d4(fcf_srcaddrmode=2)/Dot15d4Data(src_addr=0xFFFF)/b"\x7b\x3b\x3a\x01\x86\x00\xd3\xfd\x80\x00\x00\xc8\x00\x05\x7e\x40\x00\x00\x00\x00\x03\x04\x40\xc0\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x05\x00\x01\x02\x02\x12\x13\xff\xfe\x14\x15\x16\x7b\x66\x6f\x6e\x74\x2d" >>> packet = Ether(raw(icmp)) >>> assert packet[LoWPAN_IPHC][IPv6].dst == 'ff02::1' >>> >>> eth = Ether()/IP()/UDP()/ZEP2()/Dot15d4()/Dot15d4Data()/b"\x41\xc8\x49\xcd\xab\xff\xff\x16\x15\x14\xfe\xff\x13\x12\x02\x7b\x3b\x3a\x01\x86\x00\xd3\xfd\x80\x00\x00\xc8\x00\x05\x7e\x40\x00\x00\x00\x00\x03\x04\x40\xc0\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x05\x00\x01\x02\x02\x12\x13\xff\xfe\x14\x15\x16\x7b\x66\x6f\x6e\x74\x2d\xa0\x90" >>> packet = Ether(raw(eth)) >>> assert LoWPANUncompressedIPv6 in packet ###(027)=[passed] LoWPAN_IPHC - Extracted packet 2 >>> udp = Ether()/IP()/UDP()/ZEP2()/Dot15d4()/Dot15d4Data()/b"\x7e\xf7\x00\xf0\x22\x3d\x16\x2e\x8e\x60\x10\x03\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00\x48\x65\x6c\x6c\x6f\x20\x31\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x63\x6c\x69\x65\x6e\x74\x2e\x2d\x2e\x2d\x2e\x2d\x20\x30\x20\x33\x34\x35\x36\x37\x38\x39\x20\x31\x20\x33\x34\x35\x36\x37\x38\x39\x20\x32\x20\x33\x34\x35\x36\x37\x38\x39\x20\x33\x20\x33\x34\x35\x36\x37\x38\x39\x20\x34\x20\x33\x34\x35\x36" >>> packet = Ether(raw(udp)) >>> assert packet.exts[0].udpSourcePort == 8765 >>> assert packet.exts[0].udpDestPort == 5678 >>> assert packet.exts[0].udpChecksum == 0x8e60 >>> assert packet[IPv6].nh == 0x11 # the ipv6 header >>> assert packet[IPv6][UDP].sport == 8765 #udp decompressed header >>> assert packet[IPv6][UDP].dport == 5678 #udp decompressed header >>> assert packet[IPv6][UDP].chksum == 0x8e60 #udp decompressed header >>> packet.show2() ###[ Ethernet ]### dst = ff:ff:ff:ff:ff:ff src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 165 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7c45 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = zep dport = zep len = 145 chksum = 0x54b ###[ Zigbee Encapsulation Protocol (V2) ]### preamble = b'EX' ver = 0 type = 0 channel = 0 device = 0 lqi_mode = 1 lqi_val = 0 timestamp = 0 seq = 0 res = 0 length = 0 ###[ 802.15.4 ]### fcf_reserved_1= 0 fcf_panidcompress= False fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= None fcf_framever= 0 fcf_destaddrmode= Short fcf_reserved_2= 0 seqnum = 1 ###[ 802.15.4 Data ]### dest_panid= 0xffff dest_addr = 0xffff ###[ LoWPAN IP Header Compression Packet ]### _reserved = 3 tf = 3 nh = Compressed hlim = Compressed/HL64 cid = Present (1) sac = Stateful (1) sam = Compressed (3) m = 0 dac = Stateful (1) dam = Compressed (3) sci = 0 dci = 0 src = fe80:: dst = fe80::ff:fe00:ffff ###[ LOWPAN_NHC ]### \exts \ |###[ LoWPAN_NHC_UDP ]### | res = 30 | C = 0 | P = 0 | udpSourcePort= 8765 | udpDestPort= 5678 | udpChecksum= 0x8e60 ###[ IPv6 ]### version = 6 tc = 0 fl = 0 plen = 96 nh = UDP hlim = 64 src = fe80:: dst = fe80::ff:fe00:ffff ###[ UDP ]### sport = ultraseek_http dport = rrac len = 96 chksum = 0x8e60 ###[ Raw ]### load = b'\x10\x03\x00\x00\xaa\xaa\x00\x00\x00\x00\x00\x00Hello 1 from the client.-.-.- 0 3456789 1 3456789 2 3456789 3 3456789 4 3456' ###(028)=[passed] SixLoWPAN - Check Traffic Class and Flow Label when TF=0 >>> packet = SixLoWPAN()/LoWPAN_IPHC(tf=0)/IPv6(tc = 12, fl=467) >>> packet = SixLoWPAN(raw(packet)) >>> assert (packet.tc_ecn << 6) + packet.tc_dscp == 12 >>> assert packet.flowlabel == 467 ###(029)=[passed] SixLoWPAN - Check Traffic Class and Flow Label when TF=1 >>> packet = SixLoWPAN()/LoWPAN_IPHC(tf=1)/IPv6(tc = 12, fl=467) >>> packet = SixLoWPAN(raw(packet)) >>> assert packet.tc_ecn == 0 and packet.flowlabel == 467 ###(030)=[passed] SixLoWPAN - Check Traffic Class and Flow Label when TF=2 >>> packet = SixLoWPAN()/LoWPAN_IPHC(tf=2)/IPv6(tc = 12, fl=467) >>> packet = SixLoWPAN(raw(packet)) >>> assert (packet.tc_ecn << 6) + packet.tc_dscp == 12 and packet.flowlabel is None >>> packet = SixLoWPAN()/LoWPAN_IPHC(tf=3)/IPv6(tc = 12, fl=467) >>> packet = SixLoWPAN(raw(packet)) >>> assert packet.tc_ecn is None and packet.tc_dscp is None and packet.flowlabel is None ###(031)=[passed] SixLoWPAN - Checking the Hop Limit value in the IPv6 packet decompressed >>> packet = SixLoWPAN()/LoWPAN_IPHC()/IPv6(tc = 12, fl=467, hlim=65)/ICMPv6EchoRequest() >>> packet = SixLoWPAN(raw(packet)) >>> assert packet[IPv6].hlim == 65 >>> packet = SixLoWPAN()/LoWPAN_IPHC(hlim=1)/IPv6(tc = 12, fl=467, hlim=65)/ICMPv6EchoRequest() >>> packet = SixLoWPAN(raw(packet)) >>> assert packet[IPv6].hlim == 1 >>> packet = SixLoWPAN()/LoWPAN_IPHC(hlim=2)/IPv6(tc = 12, fl=467, hlim=65)/ICMPv6EchoRequest() >>> packet = SixLoWPAN(raw(packet)) >>> assert packet[IPv6].hlim == 64 >>> packet = SixLoWPAN()/LoWPAN_IPHC(hlim=3)/IPv6(tc = 12, fl=467, hlim=65)/ICMPv6EchoRequest() >>> packet = SixLoWPAN(raw(packet)) >>> assert packet[IPv6].hlim == 255 ###(032)=[passed] SixLoWPAN - Check Source Address >>> packet = SixLoWPAN()/LoWPAN_IPHC(sam = 0, sac = 0, dst='ff02::1a')/IPv6(hlim=65, src="aaaa::1", dst="ff02::1a")/ICMPv6EchoRequest() >>> packet = SixLoWPAN(raw(packet)) >>> assert packet.src == "aaaa::1" >>> assert packet.dst == "ff02::1a" ###(033)=[passed] SixLoWPAN over Ethernet >>> packet = Ether(b'\xff\xff\xff\xff\xff\xffPQRg\x15i\xa0\xed~;\x02\xf0\x1f\x90\x1f\x90\x03Qtesttext2') >>> assert LoWPAN_IPHC in packet >>> assert packet[LoWPAN_IPHC].src == "fe80::5051:52ff:fe67:1569" >>> assert packet[LoWPAN_IPHC].dst == "ff02::2" >>> assert packet[UDP].dport == packet[UDP].sport == 8080 ###### ## Dot15d4 with SixLoWPAN - Advanced dissection ###### ###(034)=[passed] Compressed SixLoWPAN - real packets with ZEP2 >>> basic_ipv6 = b'\x00"\x19\x100\xe5\x00\x1c\xda\x00\x10\x04\x08\x00E\x00\x00g>\x0c\x00\x00@\x11\xe1\x95\xac\x10\x01\x90\xac\x10\x014EZEZ\x00S\xda\x93EX\x02\x01\x03\x00Y\x01\xff\x00\x02\xab\xa2\x81\xba\xc2\xdf\x00\x00<\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+A\x88U\xaa\x1b\xff\xfffU{;:\x1a\x9b\x01uE\x00\xf1\x03Z\x8b\xf0\x00\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x11"lF' >>> ack_frame = b'\x00"\x19\x100\xe5\x00\x1c\xda\x00\x10\x04\x08\x00E\x00\x00A>\x0e\x00\x00@\x11\xe1\xb9\xac\x10\x01\x90\xac\x10\x014EZEZ\x00-d7EX\x02\x01\x03\x00Y\x01\xff\x00\x02\xab\xa8\x84\xcb\x07\xd0\x00\x00<\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x00[\xeeY' >>> router_adv = b'\x00"\x19\x100\xe5\x00\x1c\xda\x00\x10\x04\x08\x00E\x00\x00\xab>F\x00\x00@\x11\xe1\x17\xac\x10\x01\x90\xac\x10\x014EZEZ\x00\x97\x81\xb0EX\x02\x01\x03\x00Y\x01\xff\x00\x02\xab\xe8E\xce\xbf\xec\x00\x00>> >>> pkt_1 = Ether(basic_ipv6) >>> pkt_2 = Ether(ack_frame) >>> pkt_3 = Ether(router_adv) >>> >>> assert ZEP2 in pkt_1 >>> assert pkt_1[LoWPAN_IPHC].src == "fe80::ff:fe00:5566" >>> >>> assert ZEP2 in pkt_2 >>> assert Dot15d4Ack in pkt_2 >>> >>> assert ZEP2 in pkt_3 >>> assert ICMPv6NDOptSrcLLAddr in pkt_3 >>> assert pkt_3[Dot15d4Data].dest_panid == 0x1baa ###(035)=[passed] SixLoWPAN - Using ETH >>> lowpan_iphc_header = Ether()/IP()/UDP()/ZEP2()/Dot15d4()/Dot15d4Data()/b"\x78\xe7\x00\x06\x80\x00\x01" >>> packet = Ether(raw(lowpan_iphc_header)) >>> assert packet.tf == 0x3 >>> assert packet.nh == 0 >>> assert packet.hlim == 0x0 >>> assert packet.cid == True >>> assert packet.sac == True >>> assert packet.sam == 0x2 >>> assert packet.m == 0x0 >>> assert packet.dac == 0x1 >>> assert packet.dam == 0x03 >>> assert packet.nhField == 0x06 >>> assert packet.hopLimit == 128 ###(036)=[passed] SixLoWPAN - Using ETH 2 >>> lowpan_iphc_header = Ether()/IP()/UDP()/ZEP2()/Dot15d4()/Dot15d4Data()/b"\x78\xf6\x00\x06\x80\x00\x01" >>> packet = Ether(raw(lowpan_iphc_header)) >>> assert packet.tf == 0x3 >>> assert packet.nh == 0 >>> assert packet.hlim == 0x0 >>> assert packet.cid == True >>> assert packet.sac == True >>> assert packet.sam == 0x3 >>> assert packet.m == 0x0 >>> assert packet.dac == 0x1 >>> assert packet.dam == 0x02 >>> assert packet.nhField == 0x06 >>> assert packet.hopLimit == 128 ###(037)=[passed] SixLoWPAN - Using ETH 3 >>> lowpan_iphc_header = Ether()/IP()/UDP()/ZEP2()/Dot15d4()/Dot15d4Data()/b"\x78\xe7\x00\x06\x80\x00\x01" >>> packet = Ether(raw(lowpan_iphc_header)) >>> assert packet.tf == 0x3 >>> assert packet.nh == 0 >>> assert packet.hlim == 0x0 >>> assert packet.cid == True >>> assert packet.sac == True >>> assert packet.sam == 0x2 >>> assert packet.m == 0x0 >>> assert packet.dac == 0x1 >>> assert packet.dam == 0x03 >>> assert packet.nhField == 0x06 >>> assert packet.hopLimit == 128 >>> packet.show2() ###[ Ethernet ]### dst = ff:ff:ff:ff:ff:ff src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 74 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0x7ca0 src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ UDP ]### sport = zep dport = zep len = 54 chksum = 0x4170 ###[ Zigbee Encapsulation Protocol (V2) ]### preamble = b'EX' ver = 0 type = 0 channel = 0 device = 0 lqi_mode = 1 lqi_val = 0 timestamp = 0 seq = 0 res = 0 length = 0 ###[ 802.15.4 ]### fcf_reserved_1= 0 fcf_panidcompress= False fcf_ackreq= False fcf_pending= False fcf_security= False fcf_frametype= Data fcf_srcaddrmode= None fcf_framever= 0 fcf_destaddrmode= Short fcf_reserved_2= 0 seqnum = 1 ###[ 802.15.4 Data ]### dest_panid= 0xffff dest_addr = 0xffff ###[ LoWPAN IP Header Compression Packet ]### _reserved = 3 tf = 3 nh = Inline hlim = Inline cid = Present (1) sac = Stateful (1) sam = 16-bits inline (3) m = 0 dac = Stateful (1) dam = Compressed (3) sci = 0 dci = 0 nhField = TCP hopLimit = 128 src = fe80::ff:fe00:1 dst = fe80::ff:fe00:ffff ###[ IPv6 ]### version = 6 tc = 0 fl = 0 plen = 0 nh = TCP hlim = 128 src = fe80::ff:fe00:1 dst = fe80::ff:fe00:ffff ###### ## Zigbee tests ###### ###(038)=[passed] Set zigbee >>> conf.dot15d4_protocol = "zigbee" ###(039)=[passed] ZigbeeNWKStub - ZigbeeNWK dispatch_hook >>> pkt = Dot15d4()/Dot15d4Data()/ZigbeeNWKStub() >>> pkt = Dot15d4(raw(pkt)) >>> assert ZigbeeNWKStub in pkt ###(040)=[passed] Zigbee - ZCLGeneralReadAttributesResponse >>> pkt = ZigbeeClusterLibrary()/ZCLGeneralReadAttributesResponse(read_attribute_status_record=[ZCLReadAttributeStatusRecord(attribute_data_type=0x08, attribute_value=b"\xee")]) >>> pkt = ZigbeeClusterLibrary(raw(pkt)) >>> assert ZCLGeneralReadAttributesResponse in pkt >>> assert pkt.read_attribute_status_record[0].attribute_data_type == 0x08 >>> assert pkt.read_attribute_status_record[0].attribute_value == b'\xee' >>> assert raw(pkt) == b'\x00\x00\x01\x00\x00\x00\x08\xee' ###(041)=[passed] Zigbee - ZigbeeAppDataPayload >>> pkt = ZigbeeAppDataPayload(b'@\x01\x00\x00\x04\x01\x01\r\x18 \x01\x00\x00\x00 \x01\x04\x00\x00B\x07sengled') >>> >>> assert ZigbeeClusterLibrary in pkt >>> assert ZCLGeneralReadAttributesResponse in pkt >>> assert pkt.command_identifier == 1 >>> assert len(pkt.read_attribute_status_record) == 2 >>> >>> assert pkt.read_attribute_status_record[0].status == 0 >>> assert pkt.read_attribute_status_record[0].attribute_data_type == 0x20 >>> assert pkt.read_attribute_status_record[0].attribute_value == b'\x01' >>> >>> assert pkt.read_attribute_status_record[1].status == 0 >>> assert pkt.read_attribute_status_record[1].attribute_data_type == 0x42 >>> assert pkt.read_attribute_status_record[1].attribute_value == b'\x07sengled' ###(042)=[passed] Zigbee - advanced dissection >>> import os >>> filename = scapy_path("/test/pcaps/zigbee-join-authenticate.pcap") >>> a = rdpcap(filename) >>> >>> pkt1 = a[0] # Data >>> pkt2 = a[1] # Command >>> pkt3 = a[2] # Beacon >>> pkt4 = a[38] # ack >>> >>> assert Dot15d4 in pkt1 >>> assert ZigbeeNWK in pkt1 >>> assert ZigbeeSecurityHeader in pkt1 >>> assert pkt1[ZigbeeNWK].flags == 18 >>> assert pkt1[ZigbeeNWK].ext_src == 3781220488824152 >>> f,v = pkt1[ZigbeeNWK].getfield_and_val("ext_src") >>> assert f.i2repr(None, v) == "00:0d:6f:00:00:0d:c5:58" >>> assert pkt1[ZigbeeSecurityHeader].source == 3781220488824152 >>> assert pkt1[ZigbeeSecurityHeader].key_type == 1 >>> assert pkt1[ZigbeeSecurityHeader].extended_nonce == 1 >>> >>> assert Dot15d4 in pkt2 >>> assert Dot15d4Cmd in pkt2 >>> assert pkt2[Dot15d4Cmd].dest_addr == 0xffff >>> assert pkt2[Dot15d4Cmd].dest_panid == 0xffff >>> assert pkt2[Dot15d4Cmd].cmd_id == 7 >>> >>> assert Dot15d4 in pkt3 >>> assert Dot15d4Beacon in pkt3 >>> assert ZigBeeBeacon in pkt3 >>> assert pkt3[Dot15d4Beacon].src_panid == 0x1ff >>> assert pkt3[ZigBeeBeacon].nwkc_protocol_version== 2 >>> assert pkt3[ZigBeeBeacon].extended_pan_id == 125823003551091 >>> f,v = pkt3[ZigBeeBeacon].getfield_and_val("extended_pan_id") >>> assert f.i2repr(None, v) == "00:00:72:6f:73:6e:65:73" >>> assert pkt3[ZigBeeBeacon].tx_offset == 16777215 ###(043)=[passed] Zigbee - skke_1 transport key >>> filename = scapy_path("/test/pcaps/zigbee-transport-key-skke_1.pcap") >>> a = rdpcap(filename) >>> >>> pkt1 = a[0] # AppCommandPayload with transport key >>> >>> assert Dot15d4FCS in pkt1 >>> assert ZigbeeNWK in pkt1 >>> assert ZigbeeAppDataPayload in pkt1 >>> assert ZigbeeAppCommandPayload in pkt1 >>> assert pkt1[ZigbeeAppCommandPayload].cmd_identifier == 5 >>> f,v = pkt1[ZigbeeAppCommandPayload].getfield_and_val("cmd_identifier") >>> assert f.i2repr(None, v) == "APS_CMD_TRANSPORT_KEY" >>> assert pkt1[ZigbeeAppCommandPayload].key == b"&Tkr;9jr{]RqQ}9/" >>> assert pkt1[ZigbeeAppCommandPayload].key_seqnum == 0 >>> assert pkt1[ZigbeeAppCommandPayload].dest_addr == 4502500120025882 >>> f,v = pkt1[ZigbeeAppCommandPayload].getfield_and_val("dest_addr") >>> assert f.i2repr(None, v) == "00:0f:ff:00:00:41:5b:1a" >>> assert pkt1[ZigbeeAppCommandPayload].src_addr == 18446744073709551615 >>> f,v = pkt1[ZigbeeAppCommandPayload].getfield_and_val("src_addr") >>> assert f.i2repr(None, v) == "ff:ff:ff:ff:ff:ff:ff:ff" ###(044)=[passed] Zigbee - Link Status >>> pkt = ZigbeeNWKCommandPayload(b'\x08c\x00\x00\x11\xad\xde\x11\xde\xc0\x11') >>> assert ZigbeeNWKCommandPayload in pkt.layers() >>> assert pkt[ZigbeeNWKCommandPayload].cmd_identifier == 0x08 >>> assert pkt[ZigbeeNWKCommandPayload].entry_count == 3 >>> assert pkt[ZigbeeNWKCommandPayload].first_frame == 1 >>> assert pkt[ZigbeeNWKCommandPayload].last_frame == 1 >>> assert len(pkt[ZigbeeNWKCommandPayload].link_status_list) == 3 >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[0].neighbor_network_address == 0x0000 >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[0].incoming_cost == 1 >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[0].outgoing_cost == 1 >>> assert raw(pkt[ZigbeeNWKCommandPayload].link_status_list[0].payload) == b'' >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[1].neighbor_network_address == 0xdead >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[1].incoming_cost == 1 >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[1].outgoing_cost == 1 >>> assert raw(pkt[ZigbeeNWKCommandPayload].link_status_list[1].payload) == b'' >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[2].neighbor_network_address == 0xc0de >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[2].incoming_cost == 1 >>> assert pkt[ZigbeeNWKCommandPayload].link_status_list[2].outgoing_cost == 1 >>> assert raw(pkt[ZigbeeNWKCommandPayload].link_status_list[2].payload) == b'' >>> assert raw(pkt[ZigbeeNWKCommandPayload].payload) == b'' ###(045)=[passed] Zigbee - Network Report >>> pkt = ZigbeeNWKCommandPayload(b'\t\x01\x88wfUD3"\x11\xaa\x99') >>> assert ZigbeeNWKCommandPayload in pkt.layers() >>> assert pkt[ZigbeeNWKCommandPayload].cmd_identifier == 0x09 >>> assert pkt[ZigbeeNWKCommandPayload].report_information_count == 0b00001 >>> assert pkt[ZigbeeNWKCommandPayload].report_command_identifier == 0b000 >>> assert pkt[ZigbeeNWKCommandPayload].epid == 0x1122334455667788 >>> assert pkt[ZigbeeNWKCommandPayload].PAN_ID_conflict_report == [0x99aa] >>> assert raw(pkt[ZigbeeNWKCommandPayload].payload) == b'' ###(046)=[passed] Zigbee - End Device Timeout Request >>> pkt = ZigbeeNWKCommandPayload(b'\x0b\x03\x00') >>> assert ZigbeeNWKCommandPayload in pkt.layers() >>> assert pkt[ZigbeeNWKCommandPayload].cmd_identifier == 0x0b >>> assert pkt[ZigbeeNWKCommandPayload].req_timeout == 3 >>> assert pkt[ZigbeeNWKCommandPayload].ed_conf == 0 >>> assert raw(pkt[ZigbeeNWKCommandPayload].payload) == b'' ###(047)=[passed] Zigbee - End Device Timeout Response >>> pkt = ZigbeeNWKCommandPayload(b'\x0c\x00\x03') >>> assert ZigbeeNWKCommandPayload in pkt.layers() >>> assert pkt[ZigbeeNWKCommandPayload].cmd_identifier == 0x0c >>> assert pkt[ZigbeeNWKCommandPayload].status == 0 >>> assert pkt[ZigbeeNWKCommandPayload].mac_data_poll_keepalive == 1 >>> assert pkt[ZigbeeNWKCommandPayload].ed_timeout_req_keepalive == 1 >>> assert raw(pkt[ZigbeeNWKCommandPayload].payload) == b'' ###(048)=[passed] Zigbee - Transport Key >>> pkt = ZigbeeAppCommandPayload(b'\x05\x01\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x00\x88wfUD3"\x11\xff\xee\xdd\xcc\xbb\xaa\x99\x88') >>> assert ZigbeeAppCommandPayload in pkt.layers() >>> assert pkt[ZigbeeAppCommandPayload].cmd_identifier == 0x05 >>> assert pkt[ZigbeeAppCommandPayload].key_type == 1 >>> assert pkt[ZigbeeAppCommandPayload].key == b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' >>> assert pkt[ZigbeeAppCommandPayload].key_seqnum == 0 >>> assert pkt[ZigbeeAppCommandPayload].dest_addr == 0x1122334455667788 >>> assert pkt[ZigbeeAppCommandPayload].src_addr == 0x8899aabbccddeeff >>> assert raw(pkt[ZigbeeAppCommandPayload].payload) == b'' ###(049)=[passed] Zigbee - Request Key >>> pkt = ZigbeeAppCommandPayload(b'\x08\x04') >>> assert ZigbeeAppCommandPayload in pkt.layers() >>> assert pkt[ZigbeeAppCommandPayload].cmd_identifier == 0x08 >>> assert pkt[ZigbeeAppCommandPayload].key_type == 0x04 >>> assert raw(pkt[ZigbeeAppCommandPayload].payload) == b'' ###(050)=[passed] Zigbee - Tunnel >>> pkt = ZigbeeAppCommandPayload(b'\x0e\x88wfUD3"\x11!\xe20\x0bP\x00\x00\xff\xee\xdd\xcc\xbb\xaa\x99\x88\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc') >>> assert ZigbeeAppCommandPayload in pkt.layers() >>> assert pkt[ZigbeeAppCommandPayload].cmd_identifier == 0x0e >>> assert pkt[ZigbeeAppCommandPayload].dest_addr == 0x1122334455667788 >>> assert pkt[ZigbeeAppCommandPayload].aps_frametype == 1 >>> assert pkt[ZigbeeAppCommandPayload].delivery_mode == 0 >>> assert pkt[ZigbeeAppCommandPayload].frame_control == 0b0010 >>> assert ZigbeeSecurityHeader in pkt.layers() >>> assert raw(pkt[ZigbeeSecurityHeader]) == b'0\x0bP\x00\x00\xff\xee\xdd\xcc\xbb\xaa\x99\x88\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xcc\xcc\xcc\xcc' ###(051)=[passed] Zigbee - Verify Key >>> pkt = ZigbeeAppCommandPayload(b'\x0f\x04\x88wfUD3"\x11\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f') >>> assert ZigbeeAppCommandPayload in pkt.layers() >>> assert pkt[ZigbeeAppCommandPayload].cmd_identifier == 0x0f >>> assert pkt[ZigbeeAppCommandPayload].key_type == 0x04 >>> assert pkt[ZigbeeAppCommandPayload].address == 0x1122334455667788 >>> assert pkt[ZigbeeAppCommandPayload].key_hash == b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' >>> assert raw(pkt[ZigbeeAppCommandPayload].payload) == b'' ###(052)=[passed] Zigbee - Confirm Key >>> pkt = ZigbeeAppCommandPayload(b'\x10\x00\x04\x88wfUD3"\x11') >>> assert ZigbeeAppCommandPayload in pkt.layers() >>> assert pkt[ZigbeeAppCommandPayload].cmd_identifier == 0x10 >>> assert pkt[ZigbeeAppCommandPayload].status == 0 >>> assert pkt[ZigbeeAppCommandPayload].key_type == 0x04 >>> assert pkt[ZigbeeAppCommandPayload].address == 0x1122334455667788 >>> assert raw(pkt[ZigbeeAppCommandPayload].payload) == b'' ###(053)=[passed] Zigbee - APS acknowledgment (with the Acknowledgment Format enabled) >>> pkt = ZigbeeAppDataPayload(b'\x12\xa8') >>> assert ZigbeeAppDataPayload in pkt.layers() >>> assert pkt[ZigbeeAppDataPayload].aps_frametype == 2 >>> assert pkt[ZigbeeAppDataPayload].delivery_mode == 0 >>> assert pkt[ZigbeeAppDataPayload].frame_control == 0b0001 >>> assert pkt[ZigbeeAppDataPayload].counter == 168 >>> assert raw(pkt[ZigbeeAppDataPayload].payload) == b'' ###(054)=[passed] Zigbee - APS acknowledgment (with the Acknowledgment Format disabled) >>> pkt = ZigbeeAppDataPayload(b'\x02\x00\x02\x00\x00\x00\x00\xa6') >>> assert ZigbeeAppDataPayload in pkt.layers() >>> pkt.show() ###[ Zigbee Application Layer Data Payload (General APS Frame Format) ]### frame_control= delivery_mode= unicast aps_frametype= ack dst_endpoint= 0 cluster = 0x2 profile = Zigbee_Device_Profile src_endpoint= 0 counter = 166 >>> assert pkt[ZigbeeAppDataPayload].aps_frametype == 2 >>> assert pkt[ZigbeeAppDataPayload].delivery_mode == 0 >>> assert pkt[ZigbeeAppDataPayload].frame_control == 0b0000 >>> assert pkt[ZigbeeAppDataPayload].dst_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].cluster == 0x0002 >>> assert pkt[ZigbeeAppDataPayload].profile == 0x0000 >>> assert pkt[ZigbeeAppDataPayload].src_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].counter == 166 >>> assert raw(pkt[ZigbeeAppDataPayload].payload) == b'' ###(055)=[passed] Zigbee - ZDP command >>> pkt = ZigbeeAppDataPayload(b'\x08\x006\x00\x00\x00\x00\xb5\x01\x14\x01') >>> assert ZigbeeAppDataPayload in pkt.layers() >>> assert pkt[ZigbeeAppDataPayload].aps_frametype == 0 >>> assert pkt[ZigbeeAppDataPayload].delivery_mode == 2 >>> assert pkt[ZigbeeAppDataPayload].frame_control == 0b0000 >>> assert pkt[ZigbeeAppDataPayload].dst_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].cluster == 0x0036 >>> assert pkt[ZigbeeAppDataPayload].profile == 0x0000 >>> assert pkt[ZigbeeAppDataPayload].src_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].counter == 181 >>> assert ZigbeeDeviceProfile in pkt.layers() >>> assert raw(pkt[ZigbeeDeviceProfile]) == b'\x01\x14\x01' ###(056)=[passed] Zigbee - ZDP command: Device_annce >>> pkt = ZigbeeAppDataPayload(b'\x08\x00\x13\x00\x00\x00\x00\x0c\x81\xad\xde\x88wfUD3"\x11\x8e') >>> assert ZigbeeAppDataPayload in pkt.layers() >>> assert pkt[ZigbeeAppDataPayload].aps_frametype == 0 >>> assert pkt[ZigbeeAppDataPayload].delivery_mode == 2 >>> assert pkt[ZigbeeAppDataPayload].frame_control == 0b0000 >>> assert pkt[ZigbeeAppDataPayload].dst_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].cluster == 0x0013 >>> assert pkt[ZigbeeAppDataPayload].profile == 0x0000 >>> assert pkt[ZigbeeAppDataPayload].src_endpoint == 0 >>> assert pkt[ZigbeeAppDataPayload].counter == 12 >>> assert ZigbeeDeviceProfile in pkt.layers() >>> assert pkt[ZigbeeDeviceProfile].trans_seqnum == 129 >>> assert ZDPDeviceAnnce in pkt.layers() >>> assert pkt[ZDPDeviceAnnce].nwk_addr == 0xdead >>> assert pkt[ZDPDeviceAnnce].ieee_addr == 0x1122334455667788 >>> assert pkt[ZDPDeviceAnnce].alternate_pan_coordinator == 0b0 >>> assert pkt[ZDPDeviceAnnce].device_type == 0b1 >>> assert pkt[ZDPDeviceAnnce].power_source == 0b1 >>> assert pkt[ZDPDeviceAnnce].receiver_on_when_idle == 0b1 >>> assert pkt[ZDPDeviceAnnce].reserved1 == 0b0 >>> assert pkt[ZDPDeviceAnnce].reserved2 == 0b0 >>> assert pkt[ZDPDeviceAnnce].security_capability == 0b0 >>> assert pkt[ZDPDeviceAnnce].allocate_address == 0b1 >>> assert raw(pkt[ZDPDeviceAnnce].payload) == b'' ###(057)=[passed] Zigbee - ZCL General command: Read Attributes >>> pkt = ZigbeeAppDataPayload(b'@\x01\n\x00\x04\x01\x01\x9d\x00\x00\x00\x00\x00') >>> assert ZigbeeAppDataPayload in pkt.layers() >>> assert pkt[ZigbeeAppDataPayload].aps_frametype == 0 >>> assert pkt[ZigbeeAppDataPayload].delivery_mode == 0 >>> assert pkt[ZigbeeAppDataPayload].frame_control == 0b0100 >>> assert pkt[ZigbeeAppDataPayload].dst_endpoint == 1 >>> assert pkt[ZigbeeAppDataPayload].cluster == 0x000a >>> assert pkt[ZigbeeAppDataPayload].profile == 0x0104 >>> assert pkt[ZigbeeAppDataPayload].src_endpoint == 1 >>> assert pkt[ZigbeeAppDataPayload].counter == 157 >>> assert ZigbeeClusterLibrary in pkt.layers() >>> assert pkt[ZigbeeClusterLibrary].zcl_frametype == 0b00 >>> assert pkt[ZigbeeClusterLibrary].manufacturer_specific == 0b0 >>> assert pkt[ZigbeeClusterLibrary].command_direction == 0b0 >>> assert pkt[ZigbeeClusterLibrary].disable_default_response == 0b0 >>> assert pkt[ZigbeeClusterLibrary].transaction_sequence == 0 >>> assert pkt[ZigbeeClusterLibrary].command_identifier == 0x00 >>> assert ZCLGeneralReadAttributes in pkt.layers() >>> assert len(pkt[ZCLGeneralReadAttributes].attribute_identifiers) == 1 >>> assert pkt[ZCLGeneralReadAttributes].attribute_identifiers[0] == 0x0000 >>> assert raw(pkt[ZCLGeneralReadAttributes].payload) == b'' ###(058)=[passed] Zigbee - ZCL General command: Read Attributes Response >>> pkt = ZCLGeneralReadAttributesResponse(b'!\x00\x00 \xc4') >>> assert ZCLGeneralReadAttributesResponse in pkt.layers() >>> assert len(pkt[ZCLGeneralReadAttributesResponse].read_attribute_status_record) == 1 >>> assert pkt[ZCLGeneralReadAttributesResponse].read_attribute_status_record[0].attribute_identifier == 0x0021 >>> assert pkt[ZCLGeneralReadAttributesResponse].read_attribute_status_record[0].status == 0x00 >>> assert pkt[ZCLGeneralReadAttributesResponse].read_attribute_status_record[0].attribute_data_type == 0x20 >>> assert pkt[ZCLGeneralReadAttributesResponse].read_attribute_status_record[0].attribute_value == b'\xc4' >>> assert raw(pkt[ZCLGeneralReadAttributesResponse].payload) == b'' ###(059)=[passed] Zigbee - ZCL IAS Zone command: Zone Enroll Response >>> pkt = ZCLIASZoneZoneEnrollResponse(b'\x00:') >>> assert ZCLIASZoneZoneEnrollResponse in pkt.layers() >>> assert pkt[ZCLIASZoneZoneEnrollResponse].rsp_code == 0x00 >>> assert pkt[ZCLIASZoneZoneEnrollResponse].zone_id == 0x3a >>> assert raw(pkt[ZCLIASZoneZoneEnrollResponse].payload) == b'' EAP regression tests for Scapy ━ Run at 04:11:37 from [test/scapy/layers/eap.uts] by UTscapy in 0.18897056579589844 └ Passed=45 └ Failed=0 ###### ## EAPOL class tests ###### ###(000)=[passed] EAPOL - Basic Instantiation >>> raw(EAPOL()) == b'\x01\x00\x00\x00' True ###(001)=[passed] EAPOL - Instantiation with specific values >>> raw(EAPOL(version = 3, type = 5)) == b'\x03\x05\x00\x00' True ###(002)=[passed] EAPOL - Dissection (1) >>> s = b'\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 1 >>> assert eapol.len == 0 ###(003)=[passed] EAPOL - Dissection (2) >>> s = b'\x03\x00\x00\x05\x01\x01\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 0 >>> assert eapol.len == 5 ###(004)=[passed] EAPOL - Dissection (3) >>> s = b'\x03\x00\x00\x0e\x02\x01\x00\x0e\x01anonymous\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 0 >>> assert eapol.len == 14 ###(005)=[passed] EAPOL - Dissection (4) >>> req = EAPOL(b'\x03\x00\x00\x05\x01\x01\x00\x05\x01') >>> ans = EAPOL(b'\x03\x00\x00\x0e\x02\x01\x00\x0e\x01anonymous') >>> ans.answers(req) 1 ###(006)=[passed] EAPOL - Dissection (5) >>> s = b'\x02\x00\x00\x06\x01\x01\x00\x06\r ' >>> eapol = EAPOL(s) >>> assert eapol.version == 2 >>> assert eapol.type == 0 >>> assert eapol.len == 6 >>> assert eapol.haslayer(EAP_TLS) ###(007)=[passed] EAPOL - Dissection (6) >>> s = b'\x03\x00\x00<\x02\x9e\x00<+\x01\x16\x03\x01\x001\x01\x00\x00-\x03\x01dr1\x93ZS\x0en\xad\x1f\xbaH\xbb\xfe6\xe6\xd0\xcb\xec\xd7\xc0\xd7\xb9\xa5\xc9\x0c\xfd\x98o\xa7T \x00\x00\x04\x004\x00\x00\x01\x00\x00\x00' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 0 >>> assert eapol.len == 60 >>> assert eapol.haslayer(EAP_FAST) ###### ## EAPOL-Key class tests ###### ###(008)=[passed] EAPOK-Key - over 802.11 - Dissection >>> s = b'\x08\x02:\x01\x00\xc0\xcab\xa4\xf6\x00"k\xfbI+\x00"k\xfbI+\xa0[\xaa\xaa\x03\x00\x00\x00\x88\x8e\x02\x03\x00u\x02\x00\x8a\x00\x10\x00\x00\x00\x00\x00\x00\x00\x04\x95X{I5\':3\x8f\x90\xb1I\xae\x1f\xd7-"\x82\x1e\\$\xefC=\x83\x97?M\xd6\xdf>\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xdd\x14\x00\x0f\xac\x04\x03\xca?d\xca\xed\xdd\xef\xf69;\xefX\xd4\x97w' >>> wifi = Dot11(s) >>> assert wifi[EAPOL].key_descriptor_type == 2 >>> assert wifi[EAPOL].encrypted_key_data == 0 >>> assert wifi[EAPOL].key_ack == 1 >>> assert wifi[EAPOL].key_type == 1 >>> assert wifi[EAPOL].key_descriptor_type_version == 2 >>> assert wifi[EAPOL].key_replay_counter == 4 >>> assert wifi[EAPOL].has_key_mic == 0 >>> assert wifi[EAPOL].key_data_length == 22 >>> assert len(wifi[EAPOL].key_data) == 22 ###(009)=[passed] EAPOL-Key - Key 1 - Dissection (1) >>> s = b'\x02\x03\x00\x75\x02\x00\x8a\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x12\x6a\xce\x64\xc1\xa6\x44\xd2\x7b\x84\xe0\x39\x26\x3b\x63\x3b\xc3\x74\xe3\x29\x9d\x7d\x45\xe1\xc4\x25\x44\x05\x48\x05\xbf\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xdd\x14\x00\x0f\xac\x04\x05\xb1\xb6\x8b\x5a\x91\xfc\x04\x06\x83\x84\x06\xe8\xd1\x5f\xdb' >>> eapol = EAPOL(s) >>> assert(eapol.version == 2) >>> assert(eapol.type == 3) >>> assert(eapol.len == 117) >>> assert(eapol.haslayer(EAPOL_KEY)) >>> eapol_key = eapol[EAPOL_KEY] >>> assert(eapol_key.key_descriptor_type == 2) >>> assert(eapol_key.key_descriptor_type_version == 2) >>> assert(eapol_key.key_type == 1) >>> assert(eapol_key.key_length == 16) >>> assert(eapol_key.install == 0) >>> assert(eapol_key.key_ack == 1) >>> assert(eapol_key.key_mic == b"\x00" * 16) >>> assert(eapol_key.secure == 0) >>> assert(eapol_key.key_data_length == 22) >>> assert(eapol_key.guess_key_number() == 1) ###(010)=[passed] EAPOL_KEY - Key 2 - Dissection (2) >>> s = b'\x02\x03\x00\x75\x02\x01\x0a\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x60\x5e\x85\xa7\x9c\xfa\xfd\xb0\xea\xa0\x50\x68\x3f\x97\xbe\x1b\x66\xde\xf7\xbc\x65\x20\x57\x31\x68\x71\xc2\x73\xc5\xae\x47\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x89\xcd\xf1\x88\x54\x8e\x73\xcd\x37\xd5\x78\x52\x66\x05\x88\x00\x16\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x02\x28\x00' >>> eapol = EAPOL(s) >>> assert(eapol.version == 2) >>> assert(eapol.type == 3) >>> assert(eapol.len == 117) >>> assert(eapol.haslayer(EAPOL_KEY)) >>> eapol_key = eapol[EAPOL_KEY] >>> assert(eapol_key.key_descriptor_type == 2) >>> assert(eapol_key.key_descriptor_type_version == 2) >>> assert(eapol_key.key_type == 1) >>> assert(eapol_key.key_length == 16) >>> assert(eapol_key.install == 0) >>> assert(eapol_key.key_ack == 0) >>> assert(eapol_key.has_key_mic == 1) >>> assert(eapol_key.secure == 0) >>> assert(eapol_key.key_data_length == 22) >>> assert(eapol_key.guess_key_number() == 2) ###(011)=[passed] EAPOL_KEY - Key 3 - Dissection (3) >>> s = b'\x02\x03\x00\x97\x02\x13\xca\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x12\x6a\xce\x64\xc1\xa6\x44\xd2\x7b\x84\xe0\x39\x26\x3b\x63\x3b\xc3\x74\xe3\x29\x9d\x7d\x45\xe1\xc4\x25\x44\x05\x48\x05\xbf\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x1f\x1e\x80\xe7\x6c\xbf\x4a\x5c\xe9\xce\x84\x6d\x20\x7f\x7d\x00\x38\x10\xcc\x53\x66\x65\x5f\x7f\xf5\xd5\x5a\xf8\xc3\x87\x69\x85\xde\x7d\x96\xaa\xfd\x2b\x93\x48\x9f\x6c\xdf\x5f\x9c\x26\x2b\xe1\xad\x21\xeb\xce\x62\xc9\x4d\x88\x97\x1f\xd7\x5e\x23\xf6\x96\xf6\xc0\xe0\x1e\xf3\x52\x85\xe2\xf2\xcc' >>> eapol = EAPOL(s) >>> assert(eapol.version == 2) >>> assert(eapol.type == 3) >>> assert(eapol.len == 151) >>> assert(eapol.haslayer(EAPOL_KEY)) >>> eapol_key = eapol[EAPOL_KEY] >>> assert(eapol_key.key_descriptor_type == 2) >>> assert(eapol_key.key_descriptor_type_version == 2) >>> assert(eapol_key.key_type == 1) >>> assert(eapol_key.key_length == 16) >>> assert(eapol_key.install == 1) >>> assert(eapol_key.key_ack == 1) >>> assert(eapol_key.has_key_mic == 1) >>> assert(eapol_key.secure == 1) >>> assert(eapol_key.key_data_length == 56) >>> assert(eapol_key.guess_key_number() == 3) ###(012)=[passed] EAPOL_KEY - Key 4 - Dissection (4) >>> s = b'\x02\x03\x00\x5f\x02\x03\x0a\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x60\x5e\x85\xa7\x9c\xfa\xfd\xb0\xea\xa0\x50\x68\x3f\x97\xbe\x1b\x66\xde\xf7\xbc\x65\x20\x57\x31\x68\x71\xc2\x73\xc5\xae\x47\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x95\xe1\x76\xeb\x6b\xba\xc1\x6e\x06\x16\xb4\x14\x94\xd6\x0a\x00\x00' >>> eapol = EAPOL(s) >>> assert(eapol.version == 2) >>> assert(eapol.type == 3) >>> assert(eapol.len == 95) >>> assert(eapol.haslayer(EAPOL_KEY)) >>> eapol_key = eapol[EAPOL_KEY] >>> assert(eapol_key.key_descriptor_type == 2) >>> assert(eapol_key.key_descriptor_type_version == 2) >>> assert(eapol_key.key_type == 1) >>> assert(eapol_key.key_length == 16) >>> assert(eapol_key.install == 0) >>> assert(eapol_key.key_ack == 0) >>> assert(eapol_key.has_key_mic == 1) >>> assert(eapol_key.secure == 1) >>> assert(eapol_key.key_data_length == 0) >>> assert(eapol_key.key_data == b'') >>> assert(eapol_key.guess_key_number() == 4) ###### ## EAPOL-MKA class tests ###### ###(013)=[passed] EAPOL-MKA - With Basic parameter set - Dissection >>> eapol = None >>> s = b'\x03\x05\x00T\x01\xff\xf0<\x00Bh\xa8\x1e\x03\x00\n\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7\x00\x00\x00\x01\x00\x80\xc2\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\xff\x00\x00\x10\xe5\xf5j\x86V\\\xb1\xcc\xa9\xb95\x04m*Cj' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 5 >>> assert eapol.len == 84 >>> assert eapol.haslayer(MKAPDU) >>> assert eapol[MKAPDU].basic_param_set.actor_member_id == b"\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7" >>> assert eapol[MKAPDU].haslayer(MKAICVSet) >>> assert eapol[MKAPDU][MKAICVSet].icv == b"\xe5\xf5j\x86V\\\xb1\xcc\xa9\xb95\x04m*Cj" ###(014)=[passed] EAPOL-MKA - With Potential Peer List parameter set - Dissection >>> eapol = None >>> s = b'\x03\x05\x00h\x01\x10\xe0<\xccN$\xc4\xf7\x7f\x00\x80q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00}\x00\x80\xc2\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x02\x00\x00\x10\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7\x00\x00\x00\x01\xff\x00\x00\x105\x01\xdc)\xfd\xd1\xff\xd55\x9c_o\xc9\x9c\xca\xc0' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 5 >>> assert eapol.len == 104 >>> assert eapol.haslayer(MKAPDU) >>> assert eapol[MKAPDU].basic_param_set.actor_member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol.haslayer(MKAPotentialPeerListParamSet) >>> assert eapol[MKAPDU][MKAPotentialPeerListParamSet].member_id_message_num[0].member_id == b"\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7" >>> assert eapol[MKAPDU].haslayer(MKAICVSet) >>> assert eapol[MKAPDU][MKAICVSet].icv == b"5\x01\xdc)\xfd\xd1\xff\xd55\x9c_o\xc9\x9c\xca\xc0" ###(015)=[passed] EAPOL-MKA - With Live Peer List parameter set - Dissection >>> eapol = None >>> s = b"\x03\x05\x00h\x01\xffp<\x00Bh\xa8\x1e\x03\x00\n\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7\x00\x00\x00\x02\x00\x80\xc2\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x00\x00\x10q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x80\xff\x00\x00\x10\xf4\xa1d\x18\tD\xa2}\x8e'\x0c/\xda,\xea\xb7" >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 5 >>> assert eapol.len == 104 >>> assert eapol.haslayer(MKAPDU) >>> assert eapol[MKAPDU].basic_param_set.actor_member_id == b'\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7' >>> assert eapol.haslayer(MKALivePeerListParamSet) >>> assert eapol[MKAPDU][MKALivePeerListParamSet].member_id_message_num[0].member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol[MKAPDU].haslayer(MKAICVSet) >>> assert eapol[MKAPDU][MKAICVSet].icv == b"\xf4\xa1d\x18\tD\xa2}\x8e'\x0c/\xda,\xea\xb7" ###(016)=[passed] EAPOL-MKA - With SAK Use parameter set - Dissection >>> eapol = None >>> s = b'\x03\x05\x00\x94\x01\xffp<\x00Bh\xa8\x1e\x03\x00\n\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7\x00\x00\x00\x03\x00\x80\xc2\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x03\x10\x00(q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x01\x00\x00\x00\x00q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\x10q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x83\xff\x00\x00\x10OF\x84\xf1@%\x95\xe6Fw9\x1a\xfa\x03(\xae' >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 5 >>> assert eapol.len == 148 >>> assert eapol.haslayer(MKAPDU) >>> assert eapol[MKAPDU].basic_param_set.actor_member_id == b'\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7' >>> assert eapol.haslayer(MKASAKUseParamSet) >>> assert eapol[MKAPDU][MKASAKUseParamSet].latest_key_key_server_member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol.haslayer(MKALivePeerListParamSet) >>> assert eapol[MKAPDU][MKALivePeerListParamSet].member_id_message_num[0].member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol[MKAPDU].haslayer(MKAICVSet) >>> assert eapol[MKAPDU][MKAICVSet].icv == b"OF\x84\xf1@%\x95\xe6Fw9\x1a\xfa\x03(\xae" ###(017)=[passed] EAPOL-MKA - With Distributed SAK parameter set - Dissection >>> eapol = None >>> s = b"\x03\x05\x00\xb4\x01\x10\xe0<\xccN$\xc4\xf7\x7f\x00\x80q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x81\x00\x80\xc2\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x00\x00\x10\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7\x00\x00\x00\x02\x03\x10\x00(q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x10\x00\x1c\x00\x00\x00\x01Cz\x05\x88\x9f\xe8-\x94W+?\x13~\xfb\x016yVB?\xbd\xa1\x9fu\xff\x00\x00\x10\xb0H\xcf\xe0:\xa1\x94RD'\x03\xe67\xe1Ur" >>> eapol = EAPOL(s) >>> assert eapol.version == 3 >>> assert eapol.type == 5 >>> assert eapol.len == 180 >>> assert eapol.haslayer(MKAPDU) >>> assert eapol[MKAPDU].basic_param_set.actor_member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol.haslayer(MKASAKUseParamSet) >>> assert eapol[MKAPDU][MKASAKUseParamSet].latest_key_key_server_member_id == b"q\x8b\x8a9\x86k/X\x14\xc9\xdc\xf6" >>> assert eapol.haslayer(MKALivePeerListParamSet) >>> assert eapol[MKAPDU][MKALivePeerListParamSet].member_id_message_num[0].member_id == b"\xbcj\x00\x96Ywz\x82:\x90\xd9\xe7" >>> assert eapol.haslayer(MKADistributedSAKParamSet) >>> assert eapol[MKADistributedSAKParamSet].sak_aes_key_wrap == b"Cz\x05\x88\x9f\xe8-\x94W+?\x13~\xfb\x016yVB?\xbd\xa1\x9fu" >>> assert eapol[MKAPDU].haslayer(MKAICVSet) >>> assert eapol[MKAPDU][MKAICVSet].icv == b"\xb0H\xcf\xe0:\xa1\x94RD'\x03\xe67\xe1Ur" ###### ## EAP class tests ###### ###(018)=[passed] EAP - Basic Instantiation >>> raw(EAP()) == b'\x04\x00\x00\x04' True ###(019)=[passed] EAP - Instantiation with specific values >>> raw(EAP(code = 1, id = 1, len = 5, type = 1)) == b'\x01\x01\x00\x05\x01' True ###(020)=[passed] EAP - Instantiation - Multiple desired authentication types >>> raw(EAP(code=2, type=3, desired_auth_types=[13,21,25,43])) == b'\x02\x00\x00\t\x03\r\x15\x19+' True ###(021)=[passed] EAP - Dissection (1) >>> s = b'\x01\x01\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eap = EAP(s) >>> assert eap.code == 1 >>> assert eap.id == 1 >>> assert eap.len == 5 >>> assert hasattr(eap, "type") >>> assert eap.type == 1 ###(022)=[passed] EAP - Dissection (2) >>> s = b'\x02\x01\x00\x0e\x01anonymous\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 1 >>> assert eap.len == 14 >>> assert eap.type == 1 >>> assert hasattr(eap, 'identity') >>> assert eap.identity == b'anonymous' ###(023)=[passed] EAP - Dissection (3) >>> s = b'\x01\x01\x00\x06\r ' >>> eap = EAP(s) >>> assert eap.code == 1 >>> assert eap.id == 1 >>> assert eap.len == 6 >>> assert eap.type == 13 >>> assert eap.haslayer(EAP_TLS) >>> assert eap[EAP_TLS].L == 0 >>> assert eap[EAP_TLS].M == 0 >>> assert eap[EAP_TLS].S == 1 ###(024)=[passed] EAP - Dissection (4) >>> s = b'\x02\x01\x00\xd1\r\x00\x16\x03\x01\x00\xc6\x01\x00\x00\xc2\x03\x01UK\x02\xdf\x1e\xde5\xab\xfa[\x15\xef\xbe\xa2\xe4`\xc6g\xb9\xa8\xaa%vAs\xb2\x1cXt\x1c0\xb7\x00\x00P\xc0\x14\xc0\n\x009\x008\x00\x88\x00\x87\xc0\x0f\xc0\x05\x005\x00\x84\xc0\x12\xc0\x08\x00\x16\x00\x13\xc0\r\xc0\x03\x00\n\xc0\x13\xc0\t\x003\x002\x00\x9a\x00\x99\x00E\x00D\xc0\x0e\xc0\x04\x00/\x00\x96\x00A\xc0\x11\xc0\x07\xc0\x0c\xc0\x02\x00\x05\x00\x04\x00\x15\x00\x12\x00\t\x00\xff\x01\x00\x00I\x00\x0b\x00\x04\x03\x00\x01\x02\x00\n\x004\x002\x00\x0e\x00\r\x00\x19\x00\x0b\x00\x0c\x00\x18\x00\t\x00\n\x00\x16\x00\x17\x00\x08\x00\x06\x00\x07\x00\x14\x00\x15\x00\x04\x00\x05\x00\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x0f\x00\x10\x00\x11\x00#\x00\x00\x00\x0f\x00\x01\x01' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 1 >>> assert eap.len == 209 >>> assert eap.type == 13 >>> assert eap.haslayer(EAP_TLS) >>> assert eap[EAP_TLS].L == 0 >>> assert eap[EAP_TLS].M == 0 >>> assert eap[EAP_TLS].S == 0 ###(025)=[passed] EAP - Dissection (5) >>> s = b'\x02\x9e\x00<+\x01\x16\x03\x01\x001\x01\x00\x00-\x03\x01dr1\x93ZS\x0en\xad\x1f\xbaH\xbb\xfe6\xe6\xd0\xcb\xec\xd7\xc0\xd7\xb9\xa5\xc9\x0c\xfd\x98o\xa7T \x00\x00\x04\x004\x00\x00\x01\x00\x00\x00' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 158 >>> assert eap.len == 60 >>> assert eap.type == 43 >>> assert eap.haslayer(EAP_FAST) >>> assert eap[EAP_FAST].L == 0 >>> assert eap[EAP_FAST].M == 0 >>> assert eap[EAP_FAST].S == 0 >>> assert eap[EAP_FAST].version == 1 ###(026)=[passed] EAP - Dissection (6) >>> s = b'\x02\x9f\x01L+\x01\x16\x03\x01\x01\x06\x10\x00\x01\x02\x01\x00Y\xc9\x8a\tcw\t\xdcbU\xfd\x035\xcd\x1a\t\x10f&[(9\xf6\x88W`\xc6\x0f\xb3\x84\x15\x19\xf5\tk\xbd\x8fp&0\xb0\xa4B\x85\x0c<:s\xf2zT\xc3\xbd\x8a\xe4D{m\xe7\x97\xfe>\xda\x14\xb8T1{\xd7H\x9c\xa6\xcb\xe3,u\xdf\xe0\x82\xe5R\x1e<\xe5\x03}\xeb\x98\xe2\xf7\x8d3\xc6\x83\xac"\x8f\xd7\x12\xe5{:"\x84A\xd9\x14\xc2cZF\xd4\t\xab\xdar\xc7\xe0\x0e\x00o\xce\x05g\xdc?\xcc\xf7\xe83\x83E\xb3>\xe8<3-QB\xfd$C/\x1be\xcf\x03\xd6Q4\xbe\\h\xba)<\x99N\x89\xd9\xb1\xfa!\xd7a\xef\xa3\xd3o\xed8Uz\xb5k\xb0`\xfeC\xbc\xb3aS,d\xe6\xdc\x13\xa4A\x1e\x9b\r{\xd6s \xd0cQ\x95y\xc8\x1d\xc3\xd9\x87\xf2=\x81\x96q~\x99E\xc3\x97\xa8px\xe2\xc7\x92\xeb\xff/v\x84\x1e\xfb\x00\x95#\xba\xfb\xd88h\x90K\xa7\xbd9d\xb4\xf2\xf2\x14\x02vtW\xaa\xadY\x14\x03\x01\x00\x01\x01\x16\x03\x01\x000\x97\xc5l\xd6\xef\xffcM\x81\x90Q\x96\xf6\xfeX1\xf7\xfc\x84\xc6\xa0\xf6Z\xcd\xb6\xe1\xd4\xdb\x88\xf9t%Q!\xe7,~#2G-\xdf\x83\xbf\x86Q\xa2$' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 159 >>> assert eap.len == 332 >>> assert eap.type == 43 >>> assert eap.haslayer(EAP_FAST) >>> assert eap[EAP_FAST].L == 0 >>> assert eap[EAP_FAST].M == 0 >>> assert eap[EAP_FAST].S == 0 >>> assert eap[EAP_FAST].version == 1 ###(027)=[passed] EAP - Dissection (7) >>> s = b'\x02\xf1\x00\t\x03\r\x15\x19+' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 241 >>> assert eap.len == 9 >>> assert eap.type == 3 >>> assert hasattr(eap, 'desired_auth_types') >>> assert eap.desired_auth_types == [13,21,25,43] ###(028)=[passed] EAP - Dissection (8) >>> s = b"\x02\x03\x01\x15\x15\x00\x16\x03\x01\x01\n\x01\x00\x01\x06\x03\x03\xd5\xd9\xd5rT\x9e\xb8\xbe,>\xcf!\xcf\xc7\x02\x8c\xb1\x1e^F\xf7\xc84\x8c\x01t4\x91[\x02\xc8/\x00\x00\x8c\xc00\xc0,\xc0(\xc0$\xc0\x14\xc0\n\x00\xa5\x00\xa3\x00\xa1\x00\x9f\x00k\x00j\x00i\x00h\x009\x008\x007\x006\x00\x88\x00\x87\x00\x86\x00\x85\xc02\xc0.\xc0*\xc0&\xc0\x0f\xc0\x05\x00\x9d\x00=\x005\x00\x84\xc0/\xc0+\xc0'\xc0#\xc0\x13\xc0\t\x00\xa4\x00\xa2\x00\xa0\x00\x9e\x00g\x00@\x00?\x00>\x003\x002\x001\x000\x00\x9a\x00\x99\x00\x98\x00\x97\x00E\x00D\x00C\x00B\xc01\xc0-\xc0)\xc0%\xc0\x0e\xc0\x04\x00\x9c\x00<\x00/\x00\x96\x00A\x00\xff\x01\x00\x00Q\x00\x0b\x00\x04\x03\x00\x01\x02\x00\n\x00\x1c\x00\x1a\x00\x17\x00\x19\x00\x1c\x00\x1b\x00\x18\x00\x1a\x00\x16\x00\x0e\x00\r\x00\x0b\x00\x0c\x00\t\x00\n\x00\r\x00 \x00\x1e\x06\x01\x06\x02\x06\x03\x05\x01\x05\x02\x05\x03\x04\x01\x04\x02\x04\x03\x03\x01\x03\x02\x03\x03\x02\x01\x02\x02\x02\x03\x00\x0f\x00\x01\x01" >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 3 >>> assert eap.len == 277 >>> assert eap.type == 21 >>> assert eap.haslayer(EAP_TTLS) >>> assert eap[EAP_TTLS].L == 0 >>> assert eap[EAP_TTLS].M == 0 >>> assert eap[EAP_TTLS].S == 0 >>> assert eap[EAP_TTLS].version == 0 ###(029)=[passed] EAP - EAP_TLS - Basic Instantiation >>> raw(EAP_TLS()) == b'\x01\x00\x00\x06\r\x00' True ###(030)=[passed] EAP - EAP_FAST - Basic Instantiation >>> raw(EAP_FAST()) == b'\x01\x00\x00\x06+\x00' True ###(031)=[passed] EAP - EAP_TTLS - Basic Instantiation >>> raw(EAP_TTLS()) == b'\x01\x00\x00\x06\x15\x00' True ###(032)=[passed] EAP - EAP_PEAP - Basic Instantiation >>> raw(EAP_PEAP()) == b'\x01\x00\x00\x06\x19\x01' True ###(033)=[passed] EAP - EAP_MD5 - Basic Instantiation >>> raw(EAP_MD5()) == b'\x01\x00\x00\x06\x04\x00' True ###(034)=[passed] EAP - EAP_MD5 - Request - Dissection (8) >>> s = b'\x01\x02\x00\x16\x04\x10\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eap = EAP(s) >>> assert eap.code == 1 >>> assert eap.id == 2 >>> assert eap.len == 22 >>> assert eap.type == 4 >>> assert eap.haslayer(EAP_MD5) >>> assert eap[EAP_MD5].value_size == 16 >>> assert eap[EAP_MD5].value == b'\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb' >>> assert eap[EAP_MD5].optional_name == b'' ###(035)=[passed] EAP - EAP_MD5 - Response - Dissection (9) >>> s = b'\x02\x02\x00\x16\x04\x10\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> eap = EAP(s) >>> assert eap.code == 2 >>> assert eap.id == 2 >>> assert eap.len == 22 >>> assert eap.type == 4 >>> assert eap.haslayer(EAP_MD5) >>> assert eap[EAP_MD5].value_size == 16 >>> assert eap[EAP_MD5].value == b'\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf' >>> assert eap[EAP_MD5].optional_name == b'' ###(036)=[passed] EAP - LEAP - Basic Instantiation >>> raw(LEAP()) == b'\x01\x00\x00\x08\x11\x01\x00\x00' True ###(037)=[passed] EAP - LEAP - Request - Dissection (10) >>> s = b'\x01D\x00\x1c\x11\x01\x00\x088\xb6\xd7\xa1E>> eap = LEAP(s) >>> assert eap.code == 1 >>> assert eap.id == 68 >>> assert eap.len == 28 >>> assert eap.type == 17 >>> assert eap.haslayer(LEAP) >>> assert eap[LEAP].version == 1 >>> assert eap[LEAP].count == 8 >>> assert eap[LEAP].challenge_response == b'8\xb6\xd7\xa1E>> assert eap[LEAP].username == b"supplicant-1" ###(038)=[passed] EAP - LEAP - Response - Dissection (11) >>> s = b'\x02D\x00,\x11\x01\x00\x18\xb3\x82[\x82\x8a\xc8M*\xf3\xe7\xb3\xad,7\x8b\xbfG\x81\xda\xbf\xe6\xc1\x9b\x95supplicant-1' >>> eap = LEAP(s) >>> assert eap.code == 2 >>> assert eap.id == 68 >>> assert eap.len == 44 >>> assert eap.type == 17 >>> assert eap.haslayer(LEAP) >>> assert eap[LEAP].version == 1 >>> assert eap[LEAP].count == 24 >>> assert eap[LEAP].challenge_response == b'\xb3\x82[\x82\x8a\xc8M*\xf3\xe7\xb3\xad,7\x8b\xbfG\x81\xda\xbf\xe6\xc1\x9b\x95' >>> assert eap[LEAP].username == b"supplicant-1" ###(039)=[passed] EAP - PEAP - Request - Dissection >>> s = b'\x01\x03\x00\x06\x19 ' >>> eap = EAP_PEAP(s) >>> assert eap.code == 1 >>> assert eap.id == 3 >>> assert eap.len == 6 >>> assert eap.type == 25 >>> assert eap.haslayer(EAP_PEAP) >>> assert eap[EAP_PEAP].S == 1 >>> assert eap[EAP_PEAP].version == 0 ###(040)=[passed] EAP - PEAP - Response - Dissection >>> s = b'\x02\x03\x008\x19\x01\x16\x03\x03\x00-\x01\x00\x00)\x03\x03Zt9\xb6\xdem\xb9\xd4\x00\xed\xa5Bp>\x9a9\x8a[\x91\xe1U\xfa\xb6H\xd1\xbd\x9b\xd5\xadl\rV\x00\x00\x02\x00/\x01\x00' >>> eap = EAP_PEAP(s) >>> assert eap.code == 2 >>> assert eap.id == 3 >>> assert eap.len == 56 >>> assert eap.type == 25 >>> assert eap.haslayer(EAP_PEAP) >>> assert eap[EAP_PEAP].S == 0 >>> assert eap[EAP_PEAP].version == 1 >>> assert hasattr(eap[EAP_PEAP], "tls_data") ###(041)=[passed] EAP - Layers (1) >>> eap = EAP_MD5() >>> assert EAP_MD5 in eap >>> assert not EAP_TLS in eap >>> assert not EAP_FAST in eap >>> assert not LEAP in eap >>> assert EAP in eap >>> eap = EAP_TLS() >>> assert EAP_TLS in eap >>> assert not EAP_MD5 in eap >>> assert not EAP_FAST in eap >>> assert not LEAP in eap >>> assert EAP in eap >>> eap = EAP_FAST() >>> assert EAP_FAST in eap >>> assert not EAP_MD5 in eap >>> assert not EAP_TLS in eap >>> assert not LEAP in eap >>> assert EAP in eap >>> eap = EAP_TTLS() >>> assert EAP_TTLS in eap >>> assert not EAP_MD5 in eap >>> assert not EAP_TLS in eap >>> assert not EAP_FAST in eap >>> assert not LEAP in eap >>> assert EAP in eap >>> eap = EAP_PEAP() >>> assert EAP_PEAP in eap >>> assert EAP in eap >>> eap = LEAP() >>> assert not EAP_MD5 in eap >>> assert not EAP_TLS in eap >>> assert not EAP_FAST in eap >>> assert LEAP in eap >>> assert EAP in eap ###(042)=[passed] EAP - Layers (2) >>> eap = EAP_MD5() >>> assert type(eap[EAP]) == EAP_MD5 >>> eap = EAP_TLS() >>> assert type(eap[EAP]) == EAP_TLS >>> eap = EAP_FAST() >>> assert type(eap[EAP]) == EAP_FAST >>> eap = EAP_TTLS() >>> assert type(eap[EAP]) == EAP_TTLS >>> eap = EAP_PEAP() >>> assert type(eap[EAP]) == EAP_PEAP >>> eap = LEAP() >>> assert type(eap[EAP]) == LEAP ###(043)=[passed] EAP - sessions (1) >>> p = IP()/TCP()/EAP() >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 ###(044)=[passed] EAP - sessions (2) >>> p = IP()/UDP()/EAP() >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 HSRP regression tests for Scapy ━ Run at 04:11:37 from [test/scapy/layers/hsrp.uts] by UTscapy in 0.01064753532409668 └ Passed=1 └ Failed=0 ###### ## HSRP tests ###### ###(000)=[passed] HSRP - build & dissection >>> defaddr = conf.route.route('0.0.0.0')[1] >>> pkt = IP(raw(IP()/UDP(dport=1985, sport=1985)/HSRP()/HSRPmd5())) >>> assert pkt[IP].dst == "224.0.0.2" and pkt[UDP].sport == pkt[UDP].dport == 1985 >>> assert pkt[HSRP].opcode == 0 and pkt[HSRP].state == 16 >>> assert pkt[HSRPmd5].type == 4 and pkt[HSRPmd5].sourceip == defaddr HTTP regression tests for Scapy ━ Run at 04:11:38 from [test/scapy/layers/http.uts] by UTscapy in 1.4719605445861816 └ Passed=19 └ Failed=0 ###### ## HTTP ###### ###(000)=[passed] TCPSession - dissect HTTP 1.0 chunked image >>> load_layer("http") >>> >>> import os >>> >>> filename = scapy_path("/test/pcaps/http_chunk.pcap.gz") >>> >>> a = sniff(offline=filename, session=TCPSession) >>> >>> a[2].show() ###[ Ethernet ]### dst = 90:e2:ba:2f:3a:01 src = 98:5f:d3:3c:ef:ab type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 19962 flags = DF frag = 0 ttl = 128 proto = tcp chksum = None src = 192.168.62.91 dst = 191.236.16.125 \options \ ###[ TCP ]### sport = 53226 dport = http seq = 4110649981 ack = 1205747592 dataofs = 5 reserved = 0 flags = PA window = 255 chksum = 0xcb2c urgptr = 0 options = [] ###[ HTTP 1 ]### ###[ HTTP Request ]### Method = GET Path = /httpgallery/chunked/chunkedimage.aspx?0.2911017199439567 Http_Version= HTTP/1.1 A_IM = None Accept = image/webp,image/apng,image/*,*/*;q=0.8 Accept_Charset= None Accept_Datetime= None Accept_Encoding= gzip, deflate Accept_Language= fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7 Access_Control_Request_Headers= None Access_Control_Request_Method= None Authorization= None Cache_Control= None Connection= keep-alive Content_Length= None Content_MD5= None Content_Type= None Cookie = _ga=GA1.2.535792095.1551908432; _gid=GA1.2.1942743104.1551908432; ARRAffinity=7a12659f1b02b1cc5637d9e9039ba653ae8c8d5b929ff97a475517a868a08cac DNT = None Date = None Expect = None Forwarded = None From = None Front_End_Https= None HTTP2_Settings= None Host = www.httpwatch.com If_Match = None If_Modified_Since= None If_None_Match= None If_Range = None If_Unmodified_Since= None Keep_Alive= None Max_Forwards= None Origin = None Permanent = None Pragma = None Proxy_Authorization= None Proxy_Connection= None Range = None Referer = http://www.httpwatch.com/httpgallery/chunked/ Save_Data = None TE = None Upgrade = None Upgrade_Insecure_Requests= None User_Agent= Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36 Via = None Warning = None X_ATT_DeviceId= None X_Correlation_ID= None X_Csrf_Token= None X_Forwarded_For= None X_Forwarded_Host= None X_Forwarded_Proto= None X_Http_Method_Override= None X_Request_ID= None X_Requested_With= None X_UIDH = None X_Wap_Profile= None Unknown_Headers= None >>> assert HTTPRequest in a[2] >>> assert a[2].Path == b'/httpgallery/chunked/chunkedimage.aspx?0.2911017199439567' >>> assert a[2].Accept_Encoding == b'gzip, deflate' >>> assert a[2].Accept == b'image/webp,image/apng,image/*,*/*;q=0.8' >>> assert a[2].Http_Version == b'HTTP/1.1' >>> assert a[2].Referer == b'http://www.httpwatch.com/httpgallery/chunked/' >>> >>> a[29].show() ###[ Ethernet ]### dst = 98:5f:d3:3c:ef:ab src = 90:e2:ba:2f:3a:01 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 22897 flags = DF frag = 0 ttl = 103 proto = tcp chksum = None src = 191.236.16.125 dst = 192.168.62.91 \options \ ###[ TCP ]### sport = http dport = 53226 seq = 1205747592 ack = 4110650576 dataofs = 5 reserved = 0 flags = PA window = 1023 chksum = 0x393c urgptr = 0 options = [] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= None Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= no-cache, no-store Connection= None Content_Disposition= None Content_Encoding= None Content_Language= None Content_Length= None Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= image/jpeg; charset=utf-8 Date = Wed, 06 Mar 2019 23:50:52 GMT Delta_Base= None ETag = None Expires = -1 IM = None Keep_Alive= None Last_Modified= None Link = None Location = None P3P = None Permanent = None Pragma = no-cache Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = Microsoft-IIS/10.0 Set_Cookie= None Status = None Strict_Transport_Security= None Timing_Allow_Origin= None Tk = None Trailer = None Transfer_Encoding= chunked Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= None X_Correlation_ID= None X_Frame_Options= None X_Powered_By= ASP.NET X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= None Unknown_Headers= {b'X-AspNet-Version': b'4.0.30319', b'Arr-Disable-Session-Affinity': b'True'} ###[ Raw ]### load = b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00II*\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xec\x00\x11Ducky\x00\x01\x00\x04\x00\x00\x00<\x00\x00\xff\xed\x00,Photoshop 3.0\x008BIM\x04%\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xee\x00\x0eAdobe\x00d\xc0\x00\x00\x00\x01\xff\xdb\x00\x84\x00\x06\x04\x04\x04\x05\x04\x06\x05\x05\x06\t\x06\x05\x06\t\x0b\x08\x06\x06\x08\x0b\x0c\n\n\x0b\n\n\x0c\x10\x0c\x0c\x0c\x0c\x0c\x0c\x10\x0c\x0e\x0f\x10\x0f\x0e\x0c\x13\x13\x14\x14\x13\x13\x1c\x1b\x1b\x1b\x1c\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x07\x07\x07\r\x0c\r\x18\x10\x10\x18\x1a\x15\x11\x15\x1a\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\xff\xc0\x00\x11\x08\x02\xb7\x02\x9d\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x01\xa2\x00\x00\x00\x07\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\x03\x02\x06\x01\x00\x07\x08\t\n\x0b\x01\x00\x02\x02\x03\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x10\x00\x02\x01\x03\x03\x02\x04\x02\x06\x07\x03\x04\x02\x06\x02s\x01\x02\x03\x11\x04\x00\x05!\x121AQ\x06\x13a"q\x81\x142\x91\xa1\x07\x15\xb1B#\xc1R\xd1\xe13\x16b\xf0$r\x82\xf1%C4S\x92\xa2\xb2cs\xc25D\'\x93\xa3\xb36\x17Tdt\xc3\xd2\xe2\x08&\x83\t\n\x18\x19\x84\x94EF\xa4\xb4V\xd3U(\x1a\xf2\xe3\xf3\xc4\xd4\xe4\xf4eu\x85\x95\xa5\xb5\xc5\xd5\xe5\xf5fv\x86\x96\xa6\xb6\xc6\xd6\xe6\xf67GWgw\x87\x97\xa7\xb7\xc7\xd7\xe7\xf78HXhx\x88\x98\xa8\xb8\xc8\xd8\xe8\xf8)9IYiy\x89\x99\xa9\xb9\xc9\xd9\xe9\xf9*:JZjz\x8a\x9a\xaa\xba\xca\xda\xea\xfa\x11\x00\x02\x02\x01\x02\x03\x05\x05\x04\x05\x06\x04\x08\x03\x03m\x01\x00\x02\x11\x03\x04!\x121A\x05Q\x13a"\x06q\x81\x912\xa1\xb1\xf0\x14\xc1\xd1\xe1#B\x15Rbr\xf13$4C\x82\x16\x92S%\xa2c\xb2\xc2\x07s\xd25\xe2D\x83\x17T\x93\x08\t\n\x18\x19&6E\x1a\'dtU7\xf2\xa3\xb3\xc3()\xd3\xe3\xf3\x84\x94\xa4\xb4\xc4\xd4\xe4\xf4eu\x85\x95\xa5\xb5\xc5\xd5\xe5\xf5FVfv\x86\x96\xa6\xb6\xc6\xd6\xe6\xf6GWgw\x87\x97\xa7\xb7\xc7\xd7\xe7\xf78HXhx\x88\x98\xa8\xb8\xc8\xd8\xe8\xf89IYiy\x89\x99\xa9\xb9\xc9\xd9\xe9\xf9*:JZjz\x8a\x9a\xaa\xba\xca\xda\xea\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xf5N*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbc\xe3\xf3\x9f\xcegI\xd1\xc6\x8bg\'\x1dCRS\xea\xb2\x9a\x18\xed\xebF?\xf3\xd3\xec\x8fj\xe6\xd3\xb34\xdcr\xe3<\xa3\xf7\xbc\xff\x00ok\xfc,~\x1c~\xa9\xfd\x83\xf6\xf2\xf9\xa4^S\xf3>\xa3>\x91oq\x05\xd3\xa3\xa8\xe12\x06\xaa\xf3M\x8dW\xec\xef\xd7\xe9\xceW\xb5qOK\xa9\x94bH\x89\xdc{\x8f\xea\xe4\xf6}\x83\xa9\x86\xb7G\t\xcc\x031\xe9\x97\xbc~\xb1G\xe2\xca\xad\xbc\xef\xaaEA:Gp;\x9287\xde\xbb~\x19\x8f\x0e\xd3\xc89\xd1s\xb2vV3\xc8\x90\x9b\xda\xf9\xe7L\x92\x82\xe29-\xdb\xb9\xfbk\xf7\x8d\xff\x00\x0c\xcc\x87i\xe3<\xc1\x0e\x16N\xca\xc8>\x92\nqi\xab\xe9\x97t\x16\xf71\xbb\x1e\x89Z7\xfc\t\xa1\xcc\xccz\x8cs\xe4C\x83\x93M\x92\x1fTJ/.iv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xa8M_U\xb3\xd2t\xcb\x9dJ\xf5\xf8[Z\xa1\x92C\xdfn\x80{\xb1\xd8{\xe4\xf1\xe33\x90\x88\xe6Z\xb3\xe6\x8e(\x19\xcb\x90|\xaf\xe6=z\xf3^\xd6\xae\xb5[\xb3\xfb\xdb\x87\xaa\xa5j\x11\x06\xc8\x8b\xec\xab\xb6u\xd8q\x0cp\x11\x1d\x1f5\xd5je\x9b!\x9c\xb9\x94\xef\xc8\x1a\x97\xa5y-\x83\xb7\xc1p9\xc4\x0f\xf3\xa0\xdc\x0f\x9a\xfe\xac\xe7=\xa8\xd1\xf1\xe1\x19G8s\xf7\x1f\xda\xf5\xde\xc4v\x87\x87\xa8\x96\x02v\xc86\xfe\xb0\xfdb\xfeA\x9d\x9c\xe0\x9fUk\x02Z\xc5Q\xb6\xba\xd6\xabiOB\xeaD\x03\xa2\x93\xc9\x7f\xe0Z\xa3.\x86\xa7$9\x12\xd1\x93K\x8e\x7fTBok\xe7\xcdJ:\x0b\x88c\x9dGqTc\xf4\x8a\x8f\xc33!\xda\x93\x1fP\x05\xc2\xc9\xd98\xcf\xd2H\xfbS\x9b_<\xe9\x12\xd0N\xb2[\xb7r\xc3\x92\xfd\xebS\xf8fl;O\x19\xe7a\xc1\xc9\xd9YG*\x92sk\xa9\xe9\xd7`}Z\xe69I\xfd\x95a\xcb\xfe\x07\xaefC4\'\xf4\x90\\\x1c\x98\'\x0f\xa8\x10\x89\xcbZ\x9d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbc?\xf3\xbb\xce\x9f[\xbe_-\xd9\xbdm\xad\x18=\xf3)\xfbS\xd3\xe1M\xbb ;\xff\x00\x95\xf2\xcd\xff\x00e\xe9\xb8G\x88y\x9e^\xe7\x8d\xf6\x87_\xc5/\x06<\xa3\xcf\xdf\xdd\xf0\xfb\xfd\xcf*\xcd\xbb\xcd+\xd9\xddKiw\x15\xccF\x92B\xe1\xd7\xde\x87\xa1\xa7c\x95\xe6\xc5\x1c\x900\x97)\nm\xd3\xe7\x96\x1c\x91\xc9\x1f\xaa$\x11\xf0z\xed\xbd\xc4w6\xd1\\Dk\x1c\xa8\x1d\x0f\xb3\n\x8c\xf2MF\tb\xc9(K\x9cM>\xfd\xa4\xd4\xc7>(\xe4\x8f\xd30\n\xfc\xa1\xc9k\x15q\xc0\x96\xb1V\x8e)[\xdf\x02\xa6\x16\x9e`\xd6m(!\xbb\x90(\xe8\x8cy\xaf\xdc\xd5\xcc\x8cz\xbc\x90\xe5"\xe3d\xd1\xe2\x9f8\x84\xe2\xd3\xf3\x02\xfd(.\xad\xe3\x99\x7f\x99\t\x8d\xbf\xe3a\xf8fn>\xd5\x98\xfa\x80?c\x85\x93\xb1\xe0~\x92G\xda\x9dZy\xe7D\x9a\x82S%\xb3\x7f\x96\xb5_\xbdyff>\xd3\xc5.v\x1c\x0c\x9d\x95\x96<\xaaI\xd5\xae\xa1ct+mq\x1c\xde\xc8\xc0\x9f\xa4\r\xf36\x19a?\xa4\x82\xe0\xe4\xc38}@\x85|\xb1\xad\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5X\xdf\xe6\x07\x9bb\xf2\xc7\x97f\xbd\x04\x1b\xd9\x7fsc\x19\xde\xb2\xb0\xfbT\xf0A\xf1\x1f\xbb\xbeeh\xf4\xfe,\xeb\xa7W_\xdaz\xd1\xa7\xc4e\xfcGa\xef\xfd\x8f\x98%\x9aY\xa5y\xa5s$\xb21y\x1d\x8dY\x99\x8dI$\xf7\':\xb0(P|\xe6R$\xd9\xe6\xb7\n\x1b\xc5\x0c\xfb\xc8Z\x97\xad\xa7\xc9b\xe7\xe3\xb6nQ\xff\x00\xc675\xfc\x1a\xbf~p\xbe\xd4\xe8\xf8rG(\xe5-\x8f\xbc~\xb1\xf7>\xa3\xec7h\xf1\xe1\x96\x9eGxn?\xaay\xfc\x8f\xfb\xa6Q\x9c\x9b\xde5\x8a\xb8\xe0KX\xabG\x14\xad\xc0\xad\x1cU\xa3\x8aZ8\x12\xe0H \x83B:\x11\x8a\xa6V\x9ef\xd7mh#\xbbvQ\xfb2~\xf0\x7f\xc3W2q\xebr\xc7\x94\xbfK\x8b\x93C\x86|\xe2>\xe4\xea\xd3\xf3\x0e\xedh.\xedRA\xdd\xa3%\x0f\xdcyfn>\xd6\x90\xfa\x85\xb8\x19;\x1a\'\xe9\x95{\xd3\xbb?\xf1\x99\xb1\x9cd,\x1bp\'\tD\xd4\x85*d\x98\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xe6\x9f\x9d~s\xfd\x17\xa4\r\n\xceJ_jJ}r:\xa5\xb5h\x7f\xe4a\x1c~U\xcd\xaffi\xb8\xe5\xc6yG\xefy\xfe\xdf\xd7\xf8x\xfc8\xfdS\xe7\xee\xfd\xbf\xad\xe0\x99\xd0\xbcK\x86(o\x15o\x147\x8a\xbdC\xcb\x1a\x97\xd7\xf4xdf\xac\xd1\x0fJm\xeay\'s\xf3\x149\xe6]\xbd\xa3\xf052\xaf\xa6^\xa1\xf1\xe7\xf6\xbe\xd7\xec\xbfh~gG\x12O\xae\x1e\x93\xf0\xe5\xf3\x15\xf1M3L\xf4N8\x12\xd6*\xd1\xc5+p+G\x15h\xe2\x96\x8e\x04\xbb\x02\xad8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\xc7,\xb18x\x9d\xa3q\xd1\x94\x90~\xf1\x84H\x83aLA\x14wN,\xfc\xe5\xe6\x1bZ\x01rfA\xfb3\x00\xff\x00\xf0\xc7\xe2\xfcs3\x1fh\xe6\x8f[\xf7\xb8Y;7\x04\xff\x00\x86\xbd\xdb~\xc4\xf2\xcf\xf3$\xec/l\xfeo\x0b\x7f\xc6\xad\xff\x005fv>\xd8\xfet~N\xbf/b\x7f2_?\xc7\xe8O,\xbc\xe9\xe5\xeb\xaa\x0f\xac\xfa\x0e\x7ff`S\xfe\x1b\xec\xfe9\x9d\x8f\xb4p\xcb\xad{\xdc\x0c\xbd\x99\x9e\x1d/\xdd\xf8\xb4\xe6)\xa1\x99\x03\xc3"\xc8\x87\xa3!\x0c>\xf1\x99\x91\x90"\xc1\xb7\x06Q14E/\xc91v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5PZ\xce\xafe\xa3\xe9w:\x9d\xebp\xb6\xb5C#\x9e\xe6\x9d\x15}\xd8\xec=\xf2x\xb1\x99\xc8Ds-9\xf3G\x14\x0c\xe5\xc8>V\xf3\x0e\xb9y\xae\xeb7Z\xad\xe1\xfd\xf5\xcb\xf2\xe3Z\x84Q\xb2 \xf6U\x00g_\x87\x10\xc7\x11\x11\xd1\xf3mV\xa2Y\xb2\x19\xcb\x99K\xf2\xc6\x87\x0cP\xde*\xde(o\x15d\xdeD\xd4\xbd\rI\xec\xdc\xfe\xee\xe9~\x1fg@H\xfb\xc5\x7f\x0c\xe7=\xa6\xd1\xf8\x988\xc7\xd5\x8f\xee<\xff\x00A{\x1fb\xfbG\xc1\xd5\x1cG\xe9\xca+\xfc\xe1\xb8\xfd#\xe2\x19\xf6y\xe3\xeb\x8e8\x12\xd6*\xd1\xc5+p+G\x15h\xe2\x96\x8e\x04\xbb\x02\xad8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%|7\x17\x16\xef\xce\t^\'\xfedb\xa7\xef\x19(\xcc\xc7pi\x8c\xa1\x19\n"\xd3\xab?Q\x8f\xf8o\x96t\x1d\x97\xa6\xe1\x8f\x19\xe6y{\x9e7\xda\r\x7f\x1c\xfc(\xfd1\xe7\xef\xfd\x9f{\xcb3l\xf3m\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xa9\x04\xd2A4sDx\xc9\x13\x07C\xd6\x85MFG$\x04\xe2by\x1d\x99\xe2\xcb,s\x13\x89\xa9D\xd8\xf7\x87\xadX\xdd\xc7yg\r\xd4\x7fbd\x0e\x07\x85z\x83N\xe3\xa6y&\xb3Lpe\x963\xfc\'\xfb>\xc7\xdf\xbb?Y\x1dN\x08e\x8f)\x8b\xfdc\xe0vV9\x8a\xe6\xb5\x8a\xb4qJ\xdc\n\xd1\xc5Z8\xa5\xa3\x81.\xc0\xabN)h\xe2\xae\xc0\x96\x8e*\xd6\x04\xb5\x8a\xb4p+G\x14\xb4qKX\x15\xac\th\xe2\x96\xb1V\xb0%\xacUZ\xda\xf6\xf2\xd5\xf9\xdbO$\r\xe3\x1b\x15\xfdG%\x0c\x92\x89\xb8\x92\x18O\x14f*@\x14\xee\xcf\xcf\xdeb\xb6\xa0yR\xe5\x07\xec\xcc\xa2\xbf\xf0K\xc4\xfd\xf9\x9d\x8f\xb5sG\x99\xe2\xf7\xb8\x19{#\x04\xb9\x0e\x1fr}e\xf9\x9dh\xd4\x17\xb6o\x1f\x8b\xc4\xc1\xc7\xce\x8d\xc6\x9f~g\xe3\xed\xa8\x9f\xaa5\xeeu\xd9{\x0eC\xe8\x90>\xf4\xfe\xcb\xcd\xbe]\xbc\xa0\x8e\xf5\x11\x8f\xecKX\xcd|>:\x0f\xbb3\xf1\xeb\xf0\xcf\x94\x87\xc7g]\x97\xb3\xb3\xc3\x9cO\xc3\x7f\xb96VVP\xcaC)\xdc\x11\xb89\x96\r\xb8dSxP\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5X\xc7\xe6\'\x9b\xe3\xf2\xc7\x97&\xbbR\r\xfc\xf5\x86\xc23\xbdea\xf6\x88\xf0A\xf1\x1f\xbb\xbee\xe8\xf4\xfe,\xeb\xa7W]\xdaz\xd1\xa7\xc4e\xfcGa\xef\xfd\x8f\x98$\x92Ididb\xf2;\x16wcRX\x9a\x92I\xees\xab\x02\x9f<\x91$\xd9k\x16-\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xce<\x85\xa9z\x96\xd3i\xee~(O\xa9\x10\xff\x00!\x8f\xc4\x07\xc9\xbf^q>\xd5\xe8\xeaQ\xcc:\xfaO\xe8\xfcy>\x99\xec\'h\xdcg\xa7\x97\xf0\xfa\xa3\xee\xeb\xf6\xd7\xcc\xb2\xc3\x9cs\xe8mb\xad\x1cR\xb7\x02\xb4qV\x8e)h\xe0K\xb0*\xd3\x8aZ8\xab\xb0%\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xab\xdajZ\x85\x9bV\xd6\xe6H\x0f\xfcV\xe5A\xf9\x80rx\xf3N\x1fI!\xab&\x18O\xea\x00\xa7\xd6_\x98\x9ea\xb7\xa0\x99\xa3\xbaQ\xfe\xfcZ5>i\xc7\xf1\xcc\xfc}\xaf\x9a<\xea^\xf7_\x97\xb1\xb0\xcb\x95\xc7\xdd\xfbS\xfb\x1f\xcc\xfd=\xe8\xb7\xb6\xb2@\x7f\x9a2$_\xa6\xbc\x0f\xeb\xcd\x86.\xda\x81\xfa\xa2G\xda\xeb\xb2\xf6\x14\xc7\xd1 }\xfb\'\xf6>i\xf2\xfd\xed\x04\x17\xd1\xf2=\x11\xcf\xa6\xdfs\xf1\xaf\xd1\x99\xf8\xb5\xd8g\xcaC\xee\xfb\xddv]\x06l|\xe2~\xff\x00\xb95\x04\x11Q\xb8=\x0ee\xb8n\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5ZwDFw`\xa8\xa0\x96bh\x00\x1b\x92I\xc4\x04\x13O\x98\xff\x002\xbc\xe4\xfeg\xf3\x14\x93D\xc7\xf4m\xa5a\xb0O\x14\x07\xe2\x93\xe7!\xdf\xe5A\xdb:\xad\x16\x9b\xc2\x85\x7f\x11\xe6\xf9\xf7j\xeb\xbf1\x96\xc7\xd06\x1f\xaf\xe2\xc5\x06f:\xc6\xf1Cx\xab\x86(o\x15o\x147\x8a\xbb\x14&\x1a\x16\xa2t\xfdR\x0b\x9a\xd20\xdce\xeb\xf6\x1bf\xe9\xe1\xd70\xbbGH5\x18%\x8f\xa9\x1b{\xfa;.\xc7\xd7\x9d&\xaa\x19z\x03\xbf\xf5N\xc7\xec\xfb^\xa9Z\x8a\x8e\x99\xe4\xc4\x10h\xbe\xf7\x19\x02,rk\x03&\x8e)[\x81Z8\xabG\x14\xb4p%\xd8\x15i\xc5-\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0+G\x14\xa2\xac\xb5}R\xc4\x83iu, ~\xca9\x0b\xf4\xafC\x96\xe3\xd4d\x87\xd3"\x1ar\xe9\xf1\xe4\xfa\xa2\x0b \xb2\xfc\xc9\xd7\xe0\xa0\xb8\x11]/r\xeb\xc1\xbe\xf4\xa0\xfc3?\x17lf\x8f:\x93\xae\xcb\xd8\x98e\xf4\xdc\x7f\x1el\x82\xcb\xf3?I\x96\x82\xf2\xde[f=Yi"\x0f\xa7\xe1o\xc368\xbbk\x19\xfa\x81\x1fk\xad\xcb\xd8Y\x07\xd2D\xbe\xc6Ac\xe6M\x06\xfa\x9fV\xbe\x89\x98\xf4Fn\x0f\xff\x00\x02\xfc[\xf0\xcd\x86-f)\xfd2\x0e\xb7.\x8b6?\xaa%2\xcc\x97\x15\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbc\xc7\xf3\xb7\xce\x9f\xa3t\xa5\xd0,\xe4\xa5\xee\xa2\xb5\xba*wKn\x84\x7f\xcfC\xb7\xca\xb9\xb5\xec\xbd7\x14\xb8\xcf(\xfd\xff\x00\xb1\xe7\xbb{]\xe1\xc3\xc2\x8f\xd5.~\xef\xda\xf0L\xe8^-\xb1\x8a\xb7\x8a\x1b\xc5\\1Cx\xabx\xa1\xbcU\xd8\xa1\xbcU\xe9>R\xd4~\xb9\xa3D\x1b\xfb\xdbo\xdc\xbf\xc9G\xc2\x7f\xe0i\x9em\xed\x16\x8f\xc1\xd4\x99\x0f\xa6~\xaf\x8f_\xb7\x7f\x8b\xec\xde\xc8v\x87\xe64b\'\xea\xc5\xe9>\xef\xe1\xfb6\xf8\'9\xa1z\x96\x8e)[\x81Z8\xabG\x14\xb4p%\xd8\x15i\xc5-\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0+G\x14\xb5\x81-b\xad\x1c\n\xd1\xc5(\xeb\x1d{Y\xb0\xa0\xb4\xbc\x96%\x1d\x101)\xff\x00\x00j\xbf\x86_\x8bU\x93\x1f\xd3"\x1c|\xbaLY>\xa8\x82\xc8,\x7f3\xb5\xc8h.\xa2\x8a\xed{\x9azo\xf7\xaf\xc3\xff\x00\x0b\x9b\x0c]\xb5\x96?P\x12\xfb?\x1f\'[\x97\xb0\xb1K\xe9&?o\xe3\xe6\xc8l\x7f3\xf49\xa8\xb7QKj\xc7\xabPH\x83\xe9_\x8b\xfe\x1768\xbbk\x11\xfa\x81\x8f\xdb\xf8\xf9:\xdc\xbd\x85\x96?I\x12\xfb?\x1f6Ec\xaf\xe8\xb7\xf4\x16\x97\xb0\xca\xc7\xa2\x06\x01\xff\x00\xe0\r\x1b\xf0\xcd\x86-V)\xfd2\x05\xd6e\xd2e\xc7\xf5D\x84~d8\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xa8\x1dsY\xb2\xd1t\x9b\xadR\xf5\xb8\xdb\xda\xa1v\xf1c\xd1U}\xd9\xa8\x06Y\x8b\x19\x9c\x84G2\xd3\xa8\xcf\x1cP3\x97 \xf9S_\xd6\xefu\xcdb\xebU\xbc5\x9e\xe9\xcb\x15\xea\x15z*/\xb2\xad\x00\xce\xbb\x0e!\x8e"#\xa3\xe6\xfa\x9dD\xb3d3\x972\x97\xe5\x8d\r\x8cU\xbcP\xde*\xe1\x8a\x1b\xc5[\xc5\r\xe2\xae\xc5\r\xe2\xac\x87\xc9Z\x88\xb5\xd5}\x074\x8a\xecp\xde\x80s]\xd3\xf8\x8f\xa74\x1e\xd1\xe8\xfcm1\x90\xfa\xb1\xef\xf0\xeb\xfa\xfe\x0fW\xecwh\xfe_X O\xa3/\xa7\xe3\xfc?n\xdf\x17\xa0\xe7\x9b\xbe\xc8\xd1\xc5+p+G\x15h\xe2\x96\x8e\x04\xbb\x02\xad8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)v\x05h\xe2\x96\xb0%\xacU\xa3\x81Z8\xa5\xac\n\xd1\xc5Z\xc5-\x1c\tL\xac|\xcb\xafXPZ\xdfJ\x8a\xbd#-\xcd\x07\xfb\x07\xe4\xbf\x86d\xe2\xd6e\xc7\xf4\xc8\xb8\xb9t8r}Q\x0c\x93L\xfc\xce\xd6\x83\xacWV\xd1]\x7f\x94\xb5\x89\xbe\x929/\xfc.l\xb0v\xd6[\xa9\x01/\xb1\xd2\xeb\xbb\'\x06(\x1c\x9cF |\x7f\x1f7\xa5Z\xdc\xc5sm\x15\xc4F\xb1\xcc\x81\xd0\xfb0\xaet\xb0\x98\x94D\x87"\xf3\x92\x8f\t\xa5L\x93\x17b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xf0\x7f\xce\xff\x00:~\x90\xd5\x17\xcb\xd6rV\xcfOnWez=\xc5)\xc7\xe5\x184\xff\x00Z\xbe\x19\xd0v^\x9b\x86yc\xee;{\xba}\x8f\xbe\xf6N\xbcj\xf4\xd0\xcc?\x88o\xef\xe4~\xd4I\xcc7d\xb7\x02\xb4qV\x8e)h\xe0K\xb0*\xd3\x8aZ8\xab\xb0%\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xb5\x81V\xe2\x97`V\x8e)k\x02Z\xc5Z8\x15\xa3\x8aZ\xc0\xad\x1cU\xacR\xd1\xc0\x97b\xa9\x8d\x84\x1c\x13\xd4a\xf1?Oa\x99x!B\xde\x17\xda.\xd0\xf12xQ\xfaa\xcf\xce_\xb3\xf5\xbd\'\xc8\x1a\x97\xada%\x8b\x9f\x8e\xd9\xb9G\xff\x00\x18\xdc\xd7\xf0j\xfd\xe3:>\xcc\xcdq0=>\xe3\xfb]~9qc\x07\xbbc\xf0\xe5\xf6}\xcc\xab6\x89v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1V-\xf9\x8f\xe7\x08\xfc\xaf\xe5\xc9nca\xfaB\xe6\xb0\xd8!\xff\x00~\x11\xbb\xd3\xc1\x06\xff\x00p\xef\x99z-7\x8b:\xe89\xba\xee\xd4\xd6\x8d>"G\xd4v\x1f\x8f\'\xcc\x0f#\xc9#I#\x17w%\x9d\x89\xa9$\xeeI9\xd5\x81O\x9e\x93{\x95\xb8\xa1\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\x99\xf9\x0fQ\xaa\xcf\xa7\xb9\xdd\x7f{\x085\xe8vq\xf7\xd0\xfd\xf9\xc7{W\xa3\xb1\x1c\xc3\xfa\xa7\xf4~\x97\xd1}\x83\xed\x1a3\xd3H\xff\x00J?t\xbfA\xf9\xb2\xe3\x9cK\xe9kp+G\x15h\xe2\x96\x8e\x04\xbb\x02\xad8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)v\x05h\xe2\x96\xb0%\xacU\xa3\x81Z8\xa5\xac\n\xd1\xc5Z\xc5-\x1c\tV\xb4\x83\xd5\x97\x7f\xb0\xbb\xb7\xf4\xcb1C\x88\xba\x9e\xd8\xed\x0f\xcba$}r\xd8~\xbf\x82j3=\xf3\x8bM|\xb7\xa9~\x8e\xd6 \x9d\x9b\x8c,})\xcfA\xc1\xf6$\xfb)\xa3}\x19\x91\xa5\xcb\xe1\xe4\x12\xe9\xd7\xdd\xf8\xdd\xcb\xd1\xcb\xd4c\xfc\xef\xbf\xa7\xea\xf8\xbdS:w%\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xadI"F\x8d$\x8c\x11\x10\x16v&\x80\x01\xb9$\xe2\x05\xa0\x9a\x16_/\xfedy\xc6O4y\x8e[\x98\xd8\xfe\x8e\xb6\xac6\x08kOL\x1d\xde\x9e2\x1d\xfeT\x1d\xb3\xab\xd1i\xbc(W\xf1\x1eo\x9fv\xa6\xb4\xea2\x92>\x91\xb0\xfcy\xb1l\xcbu\xae\xc5[\xc5\r\x8cU\xbcP\xde*\xe1\x8a\x1b\xc5[\xc5\r\xe2\xae\xc5\r\xe2\xae\xc5Q\x9aM\xf3Xj0]\r\xc4m\xf1\x8f\x15;0\xff\x00\x819\x8d\xad\xd3\x0c\xf8e\x8c\xff\x00\x10\xfe\xcf\xb5\xcd\xec\xddi\xd2\xea!\x98\x7f\x01\xfb:\x8f\x88z\xa2\xb2\xba\x06R\n\xb0\xaa\x91\xb8 \xe7\x91\xce\x0621<\xc3\xf4\x06,\x91\x9cD\xa2n2\x16=\xc5\xac\x836\x8e*\xd1\xc5-\x1c\tv\x05ZqKG\x15v\x04\xb4qV\xb0%\xacU\xa3\x81Z8\xa5\xa3\x8aZ\xc0\xad`KG\x14\xb5\x8a\xb5\x81-b\xae\xc0\xabN)h\xe0Wb\x96\xb0*\xdcR\xec\n\xd1\xc5-`KX\xabG\x02\xb4qKX\x15\xa3\x8a\xb5\x8a]BM\x06\xe4\xf4\x18\xa2R\x00Y\xe4\x9a\xdb\xc2"\x88/~\xac}\xf3;\x1c8C\xe6\xbd\xa9\xae:\x9c\xc6_\xc26\x8f\xbb\xf6\xaa\x8c\xb1\xd6\xae\xc5 \xd6\xefP\xf2\xae\xa5\xf5\xfd\x16\x17cY\xa1\xfd\xcc\xc7\xa9\xe4\x80P\x9f\xf5\x96\x87:M\x16n\x8c\x9e\x93\xf1\xe5\xf6\xfd\x96\xf4,\xf3\x17\xdb\x1a8\xabG\x14\xb4p%\xd8\x15i\xc5-\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0+G\x14\xb5\x81-b\xad\x1c\n\xd1\xc5-`V\x8e*\xdcq\x99\x1c(\xef\xdf\x0cE\x9ah\xd5\xeac\x83\x19\xc9.C\xf1I\xaa(U\n6\x03a\x99\xf1\x14)\xf2\xfc\xf9\xe5\x96fr\xe7%\xd8Z\x9b\x18Uv)T\x82i \x9a9\xa2\xecP\xde*\xecU\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(\\\x8cU\x83)!\x81\xa8#\xa88\n\xdd=CH\xbe\x17\xdat\x17_\xb4\xeb\xf1\x8e\x94q\xb3~#<\xa3\xb5t\x7f\x97\xd4J\x1d9\x8fq\xe5\xfa\x9f{\xec.\xd0\xfc\xde\x92\x19\x7f\x8a\xaa_\xd6\x1b\x1f\xd7\xf1E\x9c\xd7;f\x8e)h\xe0K\xb0*\xd3\x8aZ8\xab\xb0%\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xb5\x81V\xe2\x97`V\x8e)k\x02Z\xc5Z8\x15\xa3\x8aZ\xc0\xad\x1cU\x1dg\x0f\x04\xe6~\xd3~\x032\xb0\xc2\x85\xbc/\xb4\x1d\xa1\xe2\xe4\xf0\xe3\xf4C\xed?\xb3\x97\xcd\x122\xf7\x9do\x15laU\xd8\xa5\xb1\x85Y\xc7\xe5\xfe\xa5\xce\xde}9\xcf\xc5\x11\xf5a\x1f\xe41\xa3\x01\xf2m\xfe\x9c\xdcvf]\x8c\x0fM\xc7\xe9\xfcy\xbb\xd0\xd9\x87\x8e\xe2\x9fvr^\xd5\xe8\xf8\xb1\xc70\xe7\x1d\x8f\xb8\xf2\xfb~\xf7\xbf\xf6\x0f\xb4x2\xcbO#\xb4\xfdQ\xf7\x8e\x7f1\xfe\xe5\x98\x1c\xe1\x1fRh\xe2\x96\x8e\x04\xbb\x02\xad8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)v\x05h\xe2\x96\xb0%\xacU\xa3\x81Z8\xa5\xac\n\xabm\x17\xa9&\xff\x00ew9-\x9c\xad\xb9\xa3\x81.\xc0\xabN)h\xe2\xae\xc0\x96\x8e*\xd6\x04\xb5\x8a\xb4p+G\x14\xb4qKX\x15\xac\th\xe2\x96\xb1V\xb0%\xacU\xd8\x15i\xc5-\x1c\n\xecR\xd6\x05[\x8a]\x81Z8\xa5\xac\tk\x15h\xe0V\x8e)h\x02M\x07S\xd3\x162\x90\x88$\xf2\t\x8c1\x88\xe3\x0b\xdf\xb9\xf7\xcc\xbcq\xa0\xf9\xafjk\x8e\xa71\x97\xf0\xf2\x1e\xe5L\xb1\xd760\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xbd+\xc9\xda\x97\xd74X\xd1\x8df\xb5\xfd\xcb\xfc\x94|\x07\xfe\x06\x9fNt\x1a\x0c\xbcx\xc0\xeb\x1d\xbfS\xb6\x94\xb8\xc0\x9f\xf3\xbe\xfe\xbf\xaf\xe2\x9d\xe6k\x17b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xf2\xaf\xcf/:\xfdGN_.Y\xc9K\xbb\xe5\xe7z\xcawKz\xec\x9f9\x08\xff\x00\x81\xf9\xe6\xdb\xb2\xf4\xdcR\xe3<\x87/{\xce\xf6\xf6\xbb\x82\x1e\x14y\xcb\x9f\xbb\xf6\xbc#:\x07\x8ep\xc5[\xc5]\x8a\x1b\xc5]\x8a\xb7\x8a\x1b\x18\xabx\xa1\xbcU\xc3\x147\x8a\xb7\x8a\x1b\xc5]\x8a\x1b\xc5]\x8a\xb7\x85\r\x8c\n\xd8\xc2\x86y\xe4\xdd@\xdci\xa6\xdd\xcdd\xb5n#\xaf\xd8m\xd7\xaf\xd23\xcf\xbd\xa9\xd1\xf0f\x19G)\xfd\xe3\xf6W\xda\xfa\xdf\xb0\xdd\xa3\xe2\xe9\x8e\x19\x1fV#\xb7\xf5O\xea7\xf6\'\xc79w\xb8h\xe0K\xb0*\xd3\x8aZ8\xab\xb0%\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xb5\x81V\xe2\x97`V\x8e)k\x02Z\xc5Z8\x15\xa3\x8aQ\x16\x91o\xea\x1f\x92\xe5\xd8\xa3\xd5\xe5\xbd\xa3\xed\x0e\x18\xf81\xe6~\xafww\xc7\xf1\xcd\x163!\xe2\xdb\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xac\x83\xc9:\x97\xd55q\x03\x9aEx=3\xfe\xb8\xdd\x0f\xeb_\xa73t\x19x2WIm\xfa\xbf\x1env\x92V\x0c>#\xf4\xfd\x9b\xfc\x1e\x8b\x9d\x03s\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xa5\xdeb\xd7l\xb4\x1d\x16\xebU\xbc?\xb9\xb6N\\kB\xecvD\x1e\xec\xc4\x0c\xb7\x0e#\x92B#\xabF\xa7Q\x1c8\xcc\xe5\xc8>P\xd6\xf5\x8b\xddgU\xb9\xd4\xef_\x9d\xcd\xd3\x97s\xd8v\n\xb5\xfd\x95\x14\x03\xdb:\xdcX\xc4""9\x07\xces\xe6\x96Y\x99\xcb\x99A\xe5\x8d.\x18\xabx\xab\xb1Cx\xab\xb1V\xf1Cc\x15o\x147\x8a\xb8b\x86\xf1V\xf1Cx\xab\xb1Cx\xab\xb1V\xf0\xa1\xb1\x81[\x18P\x9b\xf9b\xff\x00\xeaz\xbcE\x8d#\x9b\xf72\x7f\xb2;\x1f\xf8*f\xa7\xb6\xb4\x7f\x98\xd3J#\xea\x1e\xa1\xef\x1f\xacl\xef\xbd\x99\xed\x1f\xcaka#\xf4K\xd3/q\xfdF\x8b\xd0\xceyc\xee\xad\x1c\tv\x05ZqKG\x15v\x04\xb4qV\xb0%\xacU\xa3\x81Z8\xa5\xa3\x8aZ\xc0\xad`KG\x14\xb5\x8a\xb5\x81-b\xae\xc0\xabN)h\xe0Wb\x96\xb0*\xdcR\xec\n\xd1\xc5-`KX\xabG\x02\xb6\x88]\x82\x8e\xfdN\x10,\xd3\x8f\xac\xd5G\x06#\x92]>\xdf$z\xa8P\x00\xe8:f`\x14\xf9\x86|\xd2\xcb39s\x92\xe1\x85\xa9\xbc*\xd8\xc2\x96\xf1V\xc6\x15]\x8a[\x18U\xbc*\xba7tutb\xae\x8420\xea\x085\x07\xe88\xfb\x9b1d0\x90\x90\xe8\xf5\x9d*\xfd5\r:\x0b\xb5\xa0\xf5P\x16Q\xd9\xc6\xcc\xbfC\x023\xa8\xc1\x97\xc4\x80\x97{\xb3\x9c@;r\xe9\xee\xe8\x8a\xcbX;\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xf3\xff\x00\xe7w\x9d\x7fJk\x03A\xb3\x92\xb6\x1ak\x1f\xac\x10v\x92\xe6\x94?D`\xf1\xf9\xd7:\x1e\xcc\xd3pG\x8c\xf3\x97\xdc\xf1\x9d\xbb\xae\xf1\'\xe1\xc7\xe9\x8f?\x7f\xec\xfdo2\xcd\xab\xa0o\x148b\xad\xe2\xae\xc5\r\xe2\xae\xc5[\xc5\r\x8cU\xbcP\xde*\xe1\x8a\x1b\xc5[\xc5\r\xe2\xae\xc5\r\xe2\xae\xc5[\xc2\x86\xc6\x05laCx\xa1\xe9Z\x1e\xa1\xf5\xfd2\x19\xc9\xac\xb4\xe37J\xf3]\x894\xf1\xeb\x9eW\xdbZ?\xcb\xeae\x11\xf4\x9d\xc7\xb8\xfe\xaeO\xbb\xfb7\xda?\x9b\xd1\xc2d\xfa\xe3\xe9\x97\xbc~\xb1G\xe2\x8e9\xa9w\xce\xc0\xabN)h\xe2\xae\xc0\x96\x8e*\xd6\x04\xb5\x8a\xb4p+G\x14\xb4qKX\x15\xac\th\xe2\x96\xb1V\xb0%\xacU\xd8\x15i\xc5-\x1c\n\xecR\xd6\x05[\x8a]\x81Z8\xa5\xac\tk\x15h\xe0T]\xbc|W\x91\xfbM\xfa\xb3#\x14kw\x83\xf6\x83\xb4<\\\x9e\x1cO\xa2\x1fi\xfd\x9c\x95\xb2\xe7\x9flb\xad\xe1V\xc6\x14\xb7\x8a\xb60\xaa\xecR\xd8\xc2\xad\xe1V\xc6*\xcc\xbc\x81\xa9oq\xa79\xff\x00\x8b\xe1\xfc\x15\xc7\xea?~m\xbb3.\xe6\x07\xde?K\xb2\xc3.,~q\xdb\xe0y~\x9f\xb1\x99f\xdd\x93\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xacC\xf3?\xce\x8b\xe5\x7f.I$\x0c?I\xdeV\x1b\x05\xee\x18\x8f\x8aZxF\r~t\xcc\xcd\x0e\x9b\xc5\x9e\xff\x00H\xe6\xeb;W]\xf9|V>\xb9l?_\xc1\xf3\x0b33\x16bY\x98\xd5\x98\xeeI=\xceu/\x02K\xb0\xa1\xbcP\xe1\x8a\xb7\x8a\xbb\x147\x8a\xbb\x15o\x1461V\xf1Cx\xab\x86(o\x15o\x147\x8a\xbb\x147\x8a\xbb\x15o\n\x1b\x18\x15\xb1\x85\r\xe2\x86M\xe4\x9dC\xd3\xba\x96\xc5\xcf\xc30\xe7\x10\xae\xdc\xd4n\x00\xf7_\xd5\x9c\xb7\xb5:><#(\xe7\x0e~\xe3\xfb\x7fK\xdd{\x0b\xda>\x16\xa2X$}9F\xdf\xd6\x1f\xac_\xc83#\x9e|\xfa\xdb\xb0*\xd3\x8aZ8\xab\xb0%\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xb5\x81V\xe2\x97`V\x8e)k\x02Z\xc5W\xc3\x1f7\xa9\xe8:\xe4\xa1\x1b.\xa3\xb6{C\xf2\xf8v\xfa\xe5\xb0\xfd\'\xe1\xf7\xa3\x06e>t\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xb60\xaa\xecR\xd8\xc2\xad\xe1V\xc6*\x8b\xd2\xef\x9e\xc3P\x82\xedk\xfb\xa7\x05\xc0\xee\x87f\x1fJ\x93\x96b\xc8a!.\xe7\'K1\x19\xd1\xe5-\xbf\x1e\xe3E\xeb\x08\xe8\xe8\xae\x8420\x05Xt \xee\x0eu\x00\xd8\xb0\xe6\x10A\xa2\xde\x14;\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xad\x9ah\xa1\x85\xe6\x99\xc4qD\xa5\xe4\x91\x8d\x15UEI$\xf6\x03\x08\x16h"D\x01g\x93\xe5\x9f\xcc?8K\xe6\x9f2Oz\t\x161~\xe6\xc23\xb5"S\xf6\xa9\xfc\xce~#\xf7v\xce\xafI\xa7\xf0\xa1]z\xbe}\xdaZ\xc3\xa8\xcae\xfc#a\xeec9\x94\xeb\xdb\xc5[\xc5\x0e\x18\xabx\xab\xb1Cx\xab\xb1V\xf1Cc\x15o\x147\x8a\xb8b\x86\xf1V\xf1Cx\xab\xb1Cx\xab\xb1V\xf0\xa1\xb1\x81[\x18P\xde(U\xb4\xb9\x92\xda\xe6;\x88\xcf\xc7\x13\x06^\xb44\xeci\xd8\xe5Y\xb1G$\x0c%\xcaB\x9b\xf4\xda\x89a\xc9\x1c\x90\xfa\xa2A\x1f\x07\xa8A4s\xc3\x1c\xd1\x9a\xc7*\x87C\xec\xc2\xa3<\x83S\x82XrJ\x12\xe7\x13O\xd0\xba=Tu\x18c\x96?L\xc0+\xf2\x87%i\xc5-\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0+G\x14\xb5\x81.\x00\x93A\xd4\xe2\xc6s\x11\x04\x9d\x80E\xc6\x81\x16\x9f~d\xc24\x1f4\xed-q\xd4\xe63\xfe\x1eC\xdc\xbcd\xdc\x06\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xb61V\xf0\xab\xd0\xfc\x95\xa8\xfdkH\x16\xeek-\x99\xf4\xce\xfb\xfagt?*|?Fo{;/\x16>\x1e\xb1\xfb\xba~\xaf\x83\xb6\xe2\xe3\x88\x9f\x7f?x\xe7\xfa\xfe,\x833\xd8\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbc\x9f\xf3\xd3\xce\xdfS\xb0_-YIK\x9b\xc5\x0f~\xcawH?e6\xef!\xeb\xfeO\xcf6\xfd\x97\xa6\xe2>!\xe49{\xdes\xb7\xb5\xdc1\xf0\xa3\xce\\\xfd\xdf\xb5\xe19\xbfy\x17b\x86\xf1V\xf1C\x86*\xde*\xecP\xde*\xecU\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(l`V\xc6\x147\x8a\x1c0+6\xf2]\xf8\x96\xc5\xec\xd8\xfcv\xe6\xa9\xd3\xec9\xaf\xd3F\xaep~\xd5\xe8\xf8rG0\xe5-\x8f\xbc~\xcf\xb9\xf5_`\xbbG\x8f\x0c\xb4\xe7\x9c\x0f\x10\xfe\xa9\xe7\xf2?\xee\x99\x16r/\xa0-8\xa5\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)v\x05h\xe2\x96\xb0%Z\x04\xfd\xb3\xf4e\x98\xe3\xd5\xe5=\xa3\xed\x0e\x11\xe0\xc7\x99\xde^\xee\x81_2\x1e5\xb1\x8a[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15]\x8a[\x18U\xbc*\xd8\xc5[\xc2\xa9\xdf\x94u/\xa9k1\xab\x1aCu\xfb\x99<*\xc7\xe0?\xf0[}9\x97\xa2\xcb\xc1\x90w\x1d\xbfW\xdb\xf7\xb9\xdaI]\xc3\xe2=\xe3\xf6_\xc8=#:\x16\xe7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xaaY\xe6]~\xcb\xcb\xfa%\xd6\xadx\x7ful\x95T\xad\x0b\xb9\xd9\x11}\xd9\xb6\xcbp\xe29&":\xb4j\xb5\x11\xc3\x8c\xce]\x1f\'\xeb\x1a\xb5\xee\xaf\xaa\\\xeaw\xaf\xce\xea\xeaC$\x87\xb6\xfd\x00\xf6Q\xb0\xf6\xce\xbb\x1e1\x08\x88\x8eA\xf3\xac\xd9\xa5\x92fr\xe6P\x996\xa7b\x86\xf1V\xf1C\x86*\xde*\xecP\xde*\xecU\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(l`V\xc6\x147\x8a\x1c0*g\xe5\xfb\xff\x00\xa8\xea\x90\xcaO\x18\x9c\xfas\x13@8\xb7r}\x8d\x0ek\xbb[G\xf9\x8d<\xa1\xfc\\\xc7\xbc~)\xdc\xf6\x07h\xfeOY\x0c\x87\xe9\xba\x97\xf5O?\x97?\x83\xd1s\xc9\xdf|Zp%\xa3\x8a\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)v\x05h\xe2\x97*\x96j}\xf8\x81e\xc6\xd6j\xa3\x83\x11\xc9.\x9fiE\x00\x00\xa0\xe83$\n|\xc36id\x99\x9c\xbe\xa2\xbb$\xd6\xd8\xc5-\xe1V\xc6*\xde\x15laKx\xabc\n\xae\xc5-\x8c*\xde\x15lb\xad\xe1V\xc5{\x1a\x1e\xc4u\xc5\xb3\x1c\xccd$9\x87\xaahz\x88\xd44\xbb{\xa2G\xa8\xcbI@\xda\x92/\xc2\xdb|\xc6\xde\xd9\xd2\xe9\xb2\xf8\x98\xc4\xba\xfe\x97g0.\xc7#\xb8Ge\xec\x1d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1W\xcf\x7f\x9d\xbev\xfd/\xad\r\x0e\xceJ\xe9\xfa[\x111\x07i.z1\xff\x00\x9e\x7fd{\xd7:.\xcc\xd3pG\x8c\xf3\x97\xdc\xf1\x9d\xb9\xae\xf12xq\xfaa\xf7\xfe\xc7\x9a\x0c\xda:\x16\xf1Wb\x86\xf1V\xf1C\x86*\xde*\xecP\xde*\xecU\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(l`V\xc6\x147\x8a\x1c0+c\x15z/\x97\xaf\xfe\xbb\xa5C#\x12e\x8czR\x93Ry/rOZ\x8a\x1c\xf3\x0e\xdf\xd1\xf8\x1a\x99W\xd3?P\xf8\xf3\xfb_q\xf6S\xb4\x7f5\xa2\x8d\x9f^?A\xf8r\xf9\x8a\xf8\xda`sH\xf4\xad\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0+G\x14\xab\xc4\x9cEOS\x97c\x8d<\x17o\xf6\x87\x8d\x97\x82?D>\xd3\xd7\xf5*e\x8e\x81\xbc*\xd8\xc5-\xe1V\xc6*\xde\x15laKx\xabc\n\xae\xc5-\x8c*\xde\x15lb\xad\xe1V\xc6\x14\xb2\xcf!j<.\'\xd3\xdc\xfc3\x0fV\x11\xfeZ\x8a0\xfaV\x9fvl\xbb7-H\xc3\xbf\x7f\xc7\xe3\xa3\xb0\xc1.,u\xd6?q\xfdG\xeff\xd9\xb9f\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5Xo\xe6\xa7\x9d\x07\x96<\xb6\xe6\xdd\xe9\xaa_r\x82\xc4wSO\x8e_\xf6\x00\xed\xeeFf\xe8t\xde,\xf7\xfaG7Y\xda\xba\xdf\x03\x16\xdf\\\xb6\x1f\xaf\xe0\xf9\x84\xb33\x16bK\x13RN\xe4\x93\x9dC\xc1\x16\xc6\x147\x8a\xbb\x147\x8a\xb7\x8a\x1c1V\xf1Wb\x86\xf1Wb\xad\xe2\x86\xc6*\xde(o\x15p\xc5\r\xe2\xad\xe2\x86\xf1Wb\x86\xf1Wb\xad\xe1Cc\x02\xb60\xa1\xbcP\xe1\x81[\x18\xab"\xf2e\xf1\x8a\xfd\xed\x18\xfc\x17\x0bU\xff\x00]7\xff\x00\x88\xd7\xf0\xceo\xda}\x1f\x8b\xa7\xe3\x1fV=\xfe\x07\x9f\xeb{?b;G\xc1\xd5\xf8D\xfar\x8a\xff\x008r\xfd#\xe4\xcc\xcey\xcb\xecm\x1cU\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xb0*\xe8\xd6\xa6\xa7\xa0\xc9F6]?mv\x87\xe5\xf0\xd4~\xb9l?IW\x19{\xe7\x8d\xe1V\xf0\xabc\x14\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xbb\x14\xb60\xabxU\xb1\x8a\xb7\x85[\x18R\x88\xb2\xbb\x92\xce\xf2\x1b\xb8\xf7x\x1c8\x1e u_\xf6B\xa3%\t\x98\xc8Hs\r\xfal\x823\x17\xc8\xec}\xdf\xb3\x9b\xd5\xe1\x9a9\xe1\x8eh\x8f(\xe5P\xe8\xde*\xc2\xa0\xe7O\x19\t\x00G"\xe6\xca$\x1a=\x17\xe4\x90\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1U\x93\xcf\r\xbc\x12O;\x88\xe1\x89K\xcb#\x1a\x05U\x15bO\x80\x18@$\xd0D\xa4\x00\xb3\xc8>V\xfc\xc1\xf3|\xdei\xf3$\xf7\xf5"\xce?\xdc\xd8Dv\xe3\n\x9d\x89\x1f\xcc\xff\x00h\xe7W\xa4\xd3\x8cP\x03\xafW\xcf\xbbGXu\x19L\xbf\x87\xa7\xb9\x8d\x8c\xcap[\x18\xa1\xbcU\xd8\xa1\xbcU\xbcP\xe1\x8a\xb7\x8a\xbb\x147\x8a\xbb\x15o\x1461V\xf1Cx\xab\x86(o\x15o\x147\x8a\xbb\x147\x8a\xbb\x15o\n\x1b\x18\x15\xb1\x85\r\xe2\x87\x0c\n\xd8\xc5U \x95\xe1\x9a9\xa34x\xd8:\x9e\xbb\xa9\xa8\xc8\xce\x02Q1<\x8e\xcc\xf1e\x969\x89\xc7iD\xd8\xf7\x87\xa6Z\xdc\xc7um\x15\xc4\x7fbU\x0c\x06\xdbW\xb1\xa7q\x9eC\xad\xd3\x1c\x19\xa5\x8c\xff\x00\t\xfe\xcf\xb1\xfa\x1b\xb3\xb5\xb1\xd5i\xe1\x9a<\xa7\x1b\xf8\xf5\x1f\x03\xb2\xa1\xccW5\xd8\x12\xd1\xc5Z\xc0\x96\xb1V\x8e\x05h\xe2\x96\x8e)k\x02\xb5\x81-\x1cR\xd6*\xd6\x04\xb5\x8a\xbb\x02\xad8\xa5\xa3\x81]\x8aZ\xc0\xabqK\xa9SL\x0cg1\x18\x99\x1d\x80VQAL\xbe"\x83\xe6\x9d\xa3\xad:\x9c\xa6g\x97Or\xf1\x92p[\xc2\xad\xe1V\xc6)o\n\xb61V\xf0\xabc\n[\xc5[\x18Uv)laV\xf0\xabc\x15o\n\xb60\xa5\xbcU\x9e\xf9\x1bQ\xf5\xf4\xd7\xb3sY-\x1b\xe1\xff\x00\x8coR\xbfq\xa8\xf9S7]\x9d\x96\xe0c\xfc\xdf\xb8\xbbA.8\t|\x0f\xc3\xf6W\xc6\xd9&lP\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1W\x91~{y\xdf\xea\xb6k\xe5\x8b\'\xfd\xfd\xd2\x895\x16S\xba\xc3Z\xa4\x7f7"\xa7\xdb\xe7\x9b\x8e\xcb\xd3Y\xf1\x0fNO9\xdb\xda\xee\x18\xf8Q\xe6y\xfb\xbb\xbe/\x0b\xcd\xf3\xc961V\xc6(o\x15v(o\x15o\x148b\xad\xe2\xae\xc5\r\xe2\xae\xc5[\xc5\r\x8cU\xbcP\xde*\xe1\x8a\x1b\xc5[\xc5\r\xe2\xae\xc5\r\xe2\xae\xc5[\xc2\x86\xc6\x05laCx\xa1\xc3\x02\xb61V\xf1C0\xf2e\xff\x00;i,\x9c\xfcP\x9eq\x8e\xfc[\xa8\x1f&\xfdy\xc4{Y\xa3\xa3\x1c\xc3\xaf\xa4\xfe\x8f\xd2\xfa\x87\xb0\x1d\xa3q\x9e\x9a]=Q\xf7\x7f\x17\xdbG\xe2\xc8\xceq\x8f\xa3\xbb\x02Z8\xabX\x12\xd6*\xd1\xc0\xad\x1cR\xd1\xc5-`V\xb0%\xa3\x8aZ\xc5Z\xc0\x96\xb1W`U\xa7\x14\xb4p+\xb1KX\x15n)T\x8d\x7fk\xee\xc9\xc0uyOh\xfbB\x87\x81\x1e\xbb\xcb\xf4\x0f\xd2\xbf-x\xe5\xc3\x14\xb7\x85[\xc2\xad\x8cR\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xb60\xaa\xecR\xd8\xc2\xad\xe1V\xc6*\xde\x15laKx\xaam\xe5\x8dC\xea:\xc4\x121\xa4R\x9fF_\xf5\\\x8a\x1f\xa1\xa8~Y\x93\xa5\xcb\xc1\x90\x1e\x87o\x9f\xeds4r\xdc\xc3\xf9\xdfx\xfc\x11\xf1z^tM\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xa5^h\xf3\r\x97\x97\xb4+\xadZ\xec\xfc\x16\xe9T\x8e\xb42HvD\x1e\xec\xdf\xd7-\xc1\x84\xe4\x98\x88\xea\xe3\xea\xb5\x11\xc3\x8c\xce]\x1f\'j\xfa\xad\xee\xad\xa9\xdc\xeaW\xaf\xea]]Hd\x95\xbd\xcfa\xe0\x00\xd8\x0f\x0c\xeb\xb1\xe3\x10\x88\x88\xe4\x1f<\xcd\x96Y&e.e\t\x93jlb\xad\x8cP\xde*\xecP\xde*\xde(p\xc5[\xc5]\x8a\x1b\xc5]\x8a\xb7\x8a\x1b\x18\xabx\xa1\xbcU\xc3\x147\x8a\xb7\x8a\x1b\xc5]\x8a\x1b\xc5]\x8a\xb7\x85\r\x8c\n\xd8\xc2\x86\xf1C\x86\x05lb\xad\xe2\x84~\x8b}\xf5-F\x19\xc9\xa4`\xf1\x97\xaf\xd8m\x8e\xc3\xad:\xe6\x17h\xe9\x06\xa3\x04\xb1\xf7\x8d\xbd\xfd>\xd7k\xd8\xba\xf3\xa4\xd5C/H\x9d\xff\x00\xaav?c\xd13\xc8\xe5\x12\r\x1eo\xd01\x90\x90\xb1\xc8\xbb"\xc9\xa3\x8a\xb5\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x14\xb5\x81ZQSL@\xb7\x17[\xab\x8e\x9f\x11\x99\xe9\xf6\x95Q\x97\x80\xf9\x96l\xb2\xc9#)s-\xe1k\\1KxU\xbc*\xd8\xc5-\xe1V\xc6*\xde\x15laKx\xabc\n\xae\xc5-\x8c*\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xb7@A\x07\xa1\xeb\x86\x93\x19\x18\x90G0\xf4\xef.j_\xa44\x88&f\xe52\x0fN\x7f\x1ei\xb1\'\xfdaF\xfas\xa1\xd2e\xe3\xc6\t\xe7\xc8\xfe>\xd7k:>\xa1\xca[\xfe=\xc7d\xcb2X;\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15|\xef\xf9\xd9\xe7o\xd3:\xd8\xd1\xac\xe4\xe5\xa6\xe9lVB\xa7i.z;|\x93\xec\x8f\xa7\xc7:>\xcd\xd3pC\x88\xfdR\xfb\x9e3\xb6\xf5\xde.N\x08\xfd0\xfb\xff\x00c\xcdsf\xe8\x9b\xc5[\x18\xabc\x147\x8a\xbb\x147\x8a\xb7\x8a\x1c1V\xf1Wb\x86\xf1Wb\xad\xe2\x86\xc6*\xde(o\x15p\xc5\r\xe2\xad\xe2\x86\xf1Wb\x86\xf1Wb\xad\xe1Cc\x02\xb60\xa1\xbcP\xe1\x81[\x18\xabx\xa1z\xe0,\xa2\xcf|\xb9{\xf5\xad.>F\xb2C\xfb\xa7\xff\x00b>\x13\xff\x00\x03L\xf3_h\xf4~\x0e\xa4\xc8}97\xf8\xf5\xfd\x7f\x17\xda\xfd\x8f\xed\x1f\xcch\xc4I\xf5\xe2\xf4\xfc?\x87\xec\xdb\xe0\x99\xe7>\xf5m\x1cU\xac\tk\x15h\xe0V\x8e)h\xe2\x96\xb0+X\x12\xd1\xc5-b\xad`KX\xab\xb0*\xd3\x8aZ8\x15\xd8\xa5\xac\n\xbdE\x07\xbeY\x10\xf0]\xbd\xda\x1e6^\x08\xfd\x10\xfbO_\xd4\xd8\xc9\xba\x16\xf0\xaa\xe1\x8a[\xc2\xad\xe1V\xc6)o\n\xb61V\xf0\xabc\n[\xc5[\x18Uv)laV\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Y?\x91\xb5\x1fF\xfeK\x17?\x05\xd0\xe5\x18\xff\x00\x8b\x10Wo\xf5\x93\xf5f\xc3\xb3\xb2\xf0\xcf\x87\xf9\xdfx\xfd\x9fs\xb0\xd3K\x8a\x04\x7f7\x7f\x81\xe7\xf6\xd7\xcc\xb3\x9c\xdd3v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15a_\x9b\x1eu\x1eY\xf2\xdb\x8bg\xe3\xaa\xea\x1c\xa1\xb2\xa7T\x14\xfd\xe4\xbf\xec\x01\xdb\xfc\xa23;A\xa6\xf1g\xbf\xd29\xba\xbe\xd6\xd6\xf8\x18\xb6\xfa\xe5\xb0\xfdo\x98\xeaN\xe7rz\x9c\xea\x1e\x11\xacP\xde*\xd8\xc5[\x18\xa1\xbcU\xd8\xa1\xbcU\xbcP\xe1\x8a\xb7\x8a\xbb\x147\x8a\xbb\x15o\x1461V\xf1Cx\xab\x86(o\x15o\x147\x8a\xbb\x147\x8a\xbb\x15o\n\x1b\x18\x15\xb1\x85\r\xe2\x87\x0c\n\xd8\xc5[\xc5\x0b\xd7\x01e\x14\xfb\xca\xb7\xa2\x0b\xff\x00E\x8d\x12\xe0\x05\xec\x071\xba\xf5\xfaG\xd3\x9c\xff\x00\xb4z?\x1bLd>\xa8z\xbe\x1d~\xcd\xfe\x0fc\xecwh~_X"O\xa7/\xa7\xe3\xfc?n\xdf\x16e\x9ej\xfb+G\x15k\x02Z\xc5Z8\x15\xa3\x8aZ8\xa5\xac\n\xd6\x04\xb4qKX\xabX\x12\xd6*\xec\n\xb4\xe2\x96\x8e\x05v)r\x8d\xeb\x86"\xdd7m\xf6\x87\xe5\xf1T~\xb9\xec?I^2\xd7\xcf\\1V\xf0\xaa\xe1\x8a[\xc2\xad\xe1V\xc6)o\n\xb61V\xf0\xabc\n[\xc5[\x18Uv)laV\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Um\xe7\x96\xdex\xee"4\x96\x16\x0e\x9d\x85T\xd6\x87\xd8\xf7\xc2$bls\r\xda|\x9c\x13\x04\xf2\xeb\xee\xea\xf5kK\x98\xae\xadb\xb9\x88\xd69\x90:\xd7\xad\x18W\x7f|\xe9\xb1\xccN"C\x91s\xe7\x1e\x12B\xaeM\x8b\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xa7qq\x05\xb5\xbc\xb7\x17\x0e"\x82\x15i%\x91\x8d\x15UEX\x93\xec0\x80I\xa0\xc6R\x11\x16y\x07\xca\x9e\x7f\xf3t\xfei\xf3%\xc6\xa2j\xb6\xab\xfb\xab\x18\x8f\xecB\xa4\xf1\xa8\xf1o\xb4}\xceu\x9aM8\xc5\x01\x1e\xbd_?\xed\rY\xcf\x94\xcb\xa7Os\x1c\xcc\x97\t\xd8\xa1\xbcU\xb1\x8a\xb61Cx\xab\xb1Cx\xabx\xa1\xc3\x15o\x15v(o\x15v*\xde(lb\xad\xe2\x86\xf1W\x0cP\xde*\xde(o\x15v(o\x15v*\xde\x1460+c\n\x1b\xc5\x0e\x18\x15\xb1\x8a\xb7\x8a\x17\xae\x02\xca*\xd1;\xc6\xca\xe8J\xba\x90\xca\xc3\xa8#pr\x12\x00\x8a.F9\x18\x90G0\xf4{V\x96{\x0b{\xc3\x13$w\x08\x19X\x83\xc4\x9e\x84\x02@\xad\x08#<\x9b\xb4tgO\x9aP\xe8\x0e\xde\xee\x8f\xbevN\xbcj\xb4\xf0\xcb\xd6Q\xdf\xdf\xd7\xed\\s\x05\xd95\x81-b\xad\x1c\n\xd1\xc5-\x1cR\xd6\x05k\x02Z8\xa5\xacU\xac\tk\x15v\x05ZqKG\x02\xbb\x163\x98\x84L\xa5\xb0\x0b\x86X\x05>i\xda\x1a\xc3\xa8\xcafyt\xf2\r\x8c\x93\x84\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xde*\xcd\xfc\x89\xa8z\x96\x93X9\xf8\xad\xdb\x9c_\xeaHjG\xd0\xd5\xfb\xc6m\xfb7-\x83\x0e\xef\xd3\xfb~\xf7g\tq\xc0\x1e\xa3c\xfa>\xcd\xbe\x0c\xa36j\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbc\x7f\xf3\xe3\xce\xe6\xde\xdd<\xade%&\xb8\x02]I\x94\xee\xb1\xf5H\xb6\xfe\x7f\xb4\xde\xd4\xf1\xcd\xc7e\xe9\xac\xf8\x87\xe0\xf3}\xbd\xad\xa1\xe1G\x99\xe7\xfa\x9e\x19\x9b\xe7\x94o\x15v(o\x15lb\xad\x8cP\xde*\xecP\xde*\xde(p\xc5[\xc5]\x8a\x1b\xc5]\x8a\xb7\x8a\x1b\x18\xabx\xa1\xbcU\xc3\x147\x8a\xb7\x8a\x1b\xc5]\x8a\x1b\xc5]\x8a\xb7\x85\r\x8c\n\xd8\xc2\x86\xf1C\x86\x05lb\xad\xe2\x85\xeb\x80\xb2\x8a\x7f\xe4\xdf-O\xe6-v\xdfN\x8e\xab\t\xf8\xee\xa5\x1f\xb1\n\xfd\xa3\xf3=\x07\xb9\xccmVq\x8a\x06N\xcf\xb3\xb4\x87Q\x90@r\xeb\xee})ogkmi\x1d\xa41\xaa[B\x828\xe2\x03\xe1\x08\xa2\x80S9I\x9e"I\xde\xdfF\xc7\x11\x00\x04v\x01\x01y\xe5}\x06\xee\xa6KDF?\xb7\x17\xee\xcf\xfc-\x01\xfas\x0f&\x87\x14\xf9\xc7\xe5\xb3\x9d\x8f_\x9a\x1c\xa5\xf3\xdd#\xbc\xfc\xb9\xb6j\x9b;\xb7\x8c\xf6I@q\xf7\xaf\x1f\xd5\x98Y;"?\xc3/\x9b\x9f\x8f\xb6\xa5\xfcQ\xf9$w\x9eG\xd7\xed\xeaR%\xb8Q\xde&\x04\xff\x00\xc0\xb7\x13\x989;74z_\xb9\xd8c\xed\\2\xe6x}\xe9%\xcd\xa5\xd5\xb3p\xb8\x85\xe1o\t\x14\xa9\xfcs\x06x\xe5\x1eb\x9c\xe8d\x8c\xb7\x89\x05D\xe4\x1b\x1a8\xa5\xac\n\xd6\x04\xb4qKX\xabX\x12\xd6*\xec\n\xb4\xe2\x96\x8e\x05p\xc9D<\xa7\xb4}\xa1C\xc0\x89\xf3\x97\xe8\x1f\xa7\xe4\xd8\xc9\xbcz\xe1\x85.\x18\xabxUp\xc5-\xe1V\xf0\xabc\x14\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xbb\x14\xb60\xabxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xad\xe2\xa9\x86\x85\xa8~\x8f\xd5`\xb9cH\xab\xc2s\xdb\xd3}\x89?\xea\xec\xdfF]\x83/\x871.\x9d}\xdf\x8d\xdc\xcd\x1c\xbd\\?\xce\xfb\xfa~\xaf\x8b\xd3\xf3\xa4ov*\xecU\xd8\xab\xb1Wb\xa9O\x9a\xfc\xc7g\xe5\xcd\x06\xebV\xba\xdd`_\xddGZ\x19%m\x91\x07\xcc\xfd\xc3|\xbb\x06\x13\x92b!\xc7\xd5\xeac\x87\x19\x99\xe8\xf93T\xd4\xef5MJ\xe3Q\xbd\x7fR\xea\xeaF\x96W\xf7cZ\x0f\x00:\x01\xe1\x9dl #\x11\x11\xc8>y\x97,\xb2H\xca\\\xca\x17&\xd6\xde*\xecP\xde*\xd8\xc5[\x18\xa1\xbcU\xd8\xa1\xbcU\xbcP\xe1\x8a\xb7\x8a\xbb\x147\x8a\xbb\x15o\x1461V\xf1Cx\xab\x86(o\x15o\x147\x8a\xbb\x147\x8a\xbb\x15o\n\x1b\x18\x15\xb1\x85\r\xe2\x87\x0c\n\xd8\xc5[\xc5\x0b\xd7\x01e\x17\xd0\xff\x00\x95\xdeQ\xfd\x01\xa0\xac\xd7)\xc7R\xbf\x0b-\xc5z\xa2S\xe0\x8f\xe8\x06\xa7\xdc\xe71\xaf\xd4\xf8\x93\xa1\xf4\x87\xd0\xfb\x17A\xe0b\xb9}r\xdc\xfe\x80\xcc\xb3\x05\xdc;\x15v*\xecUl\x91\xc7"\x94\x91C\xa1\xea\xac\x01\x07\xe88\x08\x07b\x90H\xdc%\x17\x9eP\xf2\xfd\xd5KZ\xacN\x7fj\x12c\xfc\x07\xc3\xf8f&N\xcf\xc3/\xe1\xafs\x9b\x8f\xb4sC\xf8\xaf\xdf\xbaG{\xf9m\x19\xa9\xb2\xbc+\xe0\x93-\x7f\xe1\x96\x9f\xf1\x1c\xc0\xc9\xd8\xe3\xf8e\xf3v\x18\xbbl\xff\x00\x1c~I\r\xef\x92|\xc3mR \x17\x08?j\x16\r\xff\x00\nh\xdf\x86`\xe4\xec\xdc\xd1\xe9~\xe7a\x8b\xb50O\xad{\xd2Y\xed\xee ~\x13\xc4\xf1?\xf2\xba\x95?q\xcc\x19@\xc4\xd1\x14\xe7Fq\x90\xb0mH\xe4[\x1a\xc5Z\xc0\x96\xb1W`U\xa7\x14\xbb\x17\x13]\xab\x8e\x9f\x11\x99\xf8y\x96\xb2\xc0\xf9\x9eL\x92\x9c\x8c\xa4l\x96\xc6-k\x86\x14\xb8b\xad\xe1U\xc3\x14\xb7\x85[\xc2\xad\x8cR\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xb60\xaa\xecR\xd8\xc2\xad\xe1V\xc6*\xde\x15laKx\xabc\n\xb7\x8a\xb7\xd7\nA\xa7\xa3\xf9[Q7\xda?/\xc7\xe9H/|\x99\xe6+Z\x93jfA\xfbP\x91%\x7f\xd8\x8f\x8b\xf0\xcc\x0c\x9d\x9d\x9a?\xc3~\xed\xdd\x8e.\xd3\xc1?\xe2\xaf~\xdf\xb1&\x96)br\x92\xa3F\xe3\xaa\xb0*G\xd0s\nQ#b\xe7\xc6@\x8b\x1b\xac\xc8\xa5i\xc5-\x1f\x0c\x90\x0f\x01\xdb\xbd\xa1\xe3\xe5\xe0\x8f\xd1\x0f\xb4\xf5.\xc9:6\xc6*\xb8aK\x86*\xde\x15\\1KxU\xbc*\xd8\xc5-\xe1V\xc6*\xde\x15laKx\xabc\n\xae\xc5-\x8c*\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xb60\xabx\xaa\xe1\x85,\x83\xc9z\x87\xd5\xf5Cl\xe6\x91]\xaf\x11\xff\x00\x19\x12\xa5~U\x1c\x87\xdd\x99\xba\x0c\xbc9+\xa4\xbe\xff\x00\xc5\xb9\xdaY\\\x0c{\xb7\x1f\xa7\xf4|\x8b=\xcd\xe3c\xb1Wb\xae\xc5X?\xe6\xdf\x9d\xbf\xc3^[h\xedd\xe3\xabj<\xa1\xb4\xa1\xf8\x91i\xfb\xc9\x7f\xd8\x83A\xeeFgh4\xde,\xf7\xfaC\xaa\xedmo\x81\x8a\x87\xd7._\xad\xf3\x1et\xef\x0c\xde*\xec(o\x15v(o\x15lb\xad\x8cP\xde*\xecP\xde*\xde(p\xc5[\xc5]\x8a\x1b\xc5]\x8a\xb7\x8a\x1b\x18\xabx\xa1\xbcU\xc3\x147\x8a\xb7\x8a\x1b\xc5]\x8a\x1b\xc5]\x8a\xb7\x85\r\x8c\n\xd8\xc2\x86\xf1C\x86\x05lb\xa8\x9d:\xc2\xebP\xbe\x82\xc6\xd1=K\x9b\x97\x11\xc4\x83\xbb1\xa7\xdd\x91\x9c\xc4A\'\x90g\x8b\x14\xb2LF<\xcb\xe9\xff\x00+\xf9z\xd7\xcb\xfa\x1d\xb6\x97o\xbf\xa4\xb5\x9aZP\xc9+n\xee~g\xa7\xb6\xd9\xc8\xea3\x1c\xb32/\xa7h\xb4\x91\xd3\xe2\x18\xc7O\xb4\xa6\xb9K\x96\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xaaW\x16\x96\xb7)\xc2\xe2\x14\x99?\x96E\x0c>\xe3\x90\x9e8\xc8T\x85\xb3\x86ID\xdcI\t%\xef\x91<\xbbuR\xb0\xb5\xb3\x9f\xda\x85\x88\xff\x00\x85nK\xf8f\x16N\xcb\xc3.\x95\xees\xf1v\xb6xu\xe2\xf7\xb0\x9f6yb\xdbC\x11\x18\xef=g\x98\x9e\x102Q\x82\x8e\xacH?\xc34\xba\xdd\x0cp\xd5J\xef\xa3-go\xcb\xc21\x02\xa7.\xb6\xc7\x06`\xbc\x93xU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xde*\xb8aJ\xe8\xe4\x927I#q\xa3H\x8c\xb1\x8b\xb1Wb\xaf\x95?2u\xcd_[\xf3=\xc5\xf6\xa1m5\xa4_\xddX\xdb\xce\x8c\x85 C\xf0\xec\xc3\xabW\x91\xf79\xd4h\x061\x8c\x08\x11.\xfa7\xbb\xc1v\x9e\\\x992\x99N&=\xc0\x8a\xd9\x8b\x0c\xcdu\xcd\xe2\xae\xc2\x86\xf1Wb\x86\xf1V\xc6*\xd8\xc5\r\xe2\xae\xc5\r\xe2\xad\xe2\x87\x0cU\xbcU\xd8\xa1\xbcU\xd8\xabx\xa1\xb1\x8a\xb7\x8a\x1b\xc5\\1Cx\xabx\xa1\xbcU\xd8\xa1\xbcU\xd8\xabxP\xd8\xc0\xad\x8c(o\x148`V\xc6*\xf6_\xc9?\'\xfaP\xbf\x99o\x13\xf7\x92\x86\x8bNV\xec\x9d$\x97\xfd\x97\xd9\x1e\xd5\xf1\xcd\x1fj\xeal\xf8c\xe2\xf6\x1e\xcev}\x0f\x1e]v\x8f\xe9?\xa1\xeb\x19\xa5z\xc7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecUN\xe2\xe2\x1bx$\x9ef\t\x14J]\xd8\xf6\n*r2\x90\x88$\xf2\x08&\x85\xbck^\xd6&\xd5\xf5I\xaf$\xa8V\xd6\xd5\x7f\x93\x1f\x1f\xd4\xe1j\xb2\x7f\x08`Y\xa3p\x9b\x18\xa5\xbc*\xd8\xc5W\x0c)p\xc5[\xc2\xab\x86)o\n\xb7\x85[\x18\xa5\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15o\x15\\0\xa5\xbc*\x8c\xd2\xaf\xcd\x86\xa1\x05\xdf\xec\xc6\xdf\xbd\x1b\xef\x1bl\xfd=\x8dG\xbeY\x8b\'\x04\x84\xbb\xbe\xee\xaeV\x92U>\x1e\x92\xdb\xf5}\xbfc\xd4\x01\x04Tn\x0fC\x9d#\x90\xecU\xd8\xaa_\xac\xc1\xce\x05\x94u\x88\xef\xd7\xec\xb6\xdd\xbd\xe9\x98\x1d\xa3\x8b\x8b\x1d\xf5\x8b\x91\xa6\x9dJ\xbb\xd2|\xd0;\x16\x8e\x05k\x02T\xaemm\xaebhnbI\xe1o\xb5\x1c\x8a\x1dO\xcc5FJ\x19%\x03q$\x1f&\x191\xc6c\x86@\x11\xdcwc:\x97\xe5\x97\x93\xaf\xb97\xd4\xbe\xab#\x7f\xbb-\x98\xc7O\x92o\x1f\xfc.m\xb0{A\xab\xc7\xfc\\C\xfa[\xfd\xbc\xfe\xd7Q\xa8\xf6{I\x97\xf8xO\xf4v\xfb9}\x8cWR\xfc\x93o\x89\xb4\xcdH\x1f\xe5\x8a\xe5)\xf7\xc8\x9f\xf3Fn\xb4\xfe\xd6\x8f\xf2\x90\xf8\xc4\xfe\x83\xfa\xdd&\xa3\xd9\x03\xcf\x14\xfe\x12\x1f\xa4~\xa6+\xa9~[y\xc2\xc2\xa4\xd8\x9b\x98\xc7\xfb\xb2\xd8\x89k\xf2Q\xf1\xff\x00\xc2\xe6\xefO\xdb\xfaL\xbf\xc7\xc2\x7f\xa5\xb7\xdb\xcb\xedtz\x8fg\xf5x\xbf\x83\x88\x7fG\x7f\xb3\x9f\xd8\xc7g\xb7\xb8\xb7\x90\xc5q\x13\xc3(\xea\x92)V\x1fA\xcd\xbc\'\x19\x0b\x89\x04y:\x89\xe3\x94\rH\x10|\xd6d\x98;\x147\x8a\xb7\x8a\x1c1V\xf1Wb\x86\xf1Wb\xad\xe2\x86\xc6*\xde(o\x15p\xc5\r\xe2\xad\xe2\x86\xf1Wb\x86\xf1Wb\xad\xe1Cc\x02\xb60\xa1\xbcP\xd8\xc0\xaf\xa2\xff\x00+\xbc\x9f\xfe\x1e\xf2\xfa\xc9r\x9cu;\xfaKuQ\xf1"\xd3\xe0\x8b\xfd\x88;\xfb\x93\x9c\xbfhj|Y\xed\xf4\x87\xd0\xfb\x17\xb3\xff\x00/\x86\xe5\xf5\xcbs\xfa\x032\xcc\x17r\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xa5\xfa\xfe\xb1\x0e\x91\xa5\xcdy%\x0b(\xe3\n\x7f4\x87\xec\x8f\xeb\xed\x98\xfa\x9c\xe3\x14\x0c\x8b^I\xf0\xc6\xde1qq5\xc4\xf2O3\x17\x96V.\xec{\x9659\xc8JFD\x93\xcc\xba\xa2l\xda\xcc\x08lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xb61V\xf0\xabc\n[\xc5[\x18U\xbcUp\xc2\x96\xf0\xabc\x15z\x07\x945\x0f\xadi\t\x13\x1a\xcbh}\x16\xff\x00T}\x83\xff\x00\x03\xb7\xccf\xefA\x97\x8b\x1du\x8e\xdf\xa9\xda\xca\\@O\xf9\xdf\x7f_\xd7\xf1N\xf35\x83\xb1V\xa4E\x91\x19\x18UX\x15a\xecv\xc0E\x8a*\xc6\xa4\x8d\xe2\x91\xa3\x7f\xb4\x84\x83\xb5+N\xff\x00Nr\xd9\xb1\xf0L\xc7\xb9\xdbc\x97\x10\x05a\xca\x99\xb5\x81.\xc5Z\xc8\xabX\xa5\xd8\x15\x0fwcey\x1f\xa5wo\x1d\xcc_\xef\xb9Q]~\xe6\x04e\x98\xb3O\x19\xb8\x13\x13\xe4i\xaf.\x18d\x158\x89\x0f1lgR\xfc\xaf\xf2\x85\xe8%-\x9a\xceC\xb9{g+\xff\x00\n\xdc\xd3\xee\\\xdci\xfd\xa3\xd5\xe3\xe7.1\xfd!\xfaE\x1f\xb5\xd3j=\x9b\xd2e\xe5\x13\x03\xfd\x13\xfa\r\x8f\xb1\x8bj?\x92\xf7+\xc9\xb4\xddE$\xfeX\xae\x10\xa1\xff\x00\x83NU\xff\x00\x81\xcd\xde\x9f\xda\xe8\x9f\xef G\xf5M\xfd\x86\xbe\xf7G\xa8\xf6>C|S\x07\xcaB\xbe\xd1\x7fs\x17\xd4\x7f/\xfc\xddaS&\x9e\xf3 \xfd\xbbzL\x0f\xbd\x12\xad\xf7\x8c\xdd\xe9\xfbwI\x97\x94\xc0?\xd2\xdb\xef\xd9\xd1j;\x07Y\x8b\x9c\t\x1f\xd1\xf5}\xdb\xfd\x89\x04\x91I\x13\x98\xe4B\x92.\xcc\x8c\x08 \xfb\x83\x9bX\xc8HX\xdc:\x99D\xc4\xd1\x14V\x8c\x93\x16\xf1Wb\x86\xf1Wb\xad\xe2\x86\xc6*\xde(o\x15p\xc5\r\xe2\xad\xe2\x86\xf1Wb\x86\xf1Wb\xad\xe1Cc\x02\xb60\xa1\xbcP\xf4\x1f\xca\x0f\'~\x99\xd6\xbfJ]\xa5t\xed5\x83\x00zI?T_p\xbfh\xfd\x1e9\xac\xed-O\x048G\xd5/\xb9\xdf\xf6\x07g\xf8\xd9|I}\x10\xfbO\xe3w\xbe\xe76\xf7\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1W\x94y\xe7\xcc\x1f\xa55C\x04-[;BR:tg\xfd\xa7\xfe\x03\xfbs\x97\xed-W\x89:\x1fL]f\xa3/\x11\xa1\xc81\xbc\xd747\x85[\x18\xa5\xbc*\xd8\xc5W\x0c)p\xc5[\xc2\xab\x86)o\n\xb7\x85[\x18\xa5\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15o\x15\\0\xa5\xbc*\xd8\xc5S\xbf(\xea\x1fT\xd5\xd664\x8a\xeczM\xe1\xcf\xacg\xef\xaa\xff\x00\xb2\xcc\xbd\x16^\x0c\x83\xba[~\xaf\xd5\xf1s\xb4\xb2\xb0a\xf1\x1f\xa7\xec\xdf\xe0\xf4\x0c\xde\xb6;\x15v*\x94k0q\x95\'\x02\x82O\x85\xba\x0f\x88t\xf9\xd4~\xac\xd3\xf6\x9e.S\xf89\x9aY\xf3\ti\xcdC\x9a\xd6\x04\xbb\x15k"\xadb\x97`V\xb0%\xd8\xabX\x15\xc7\x02P\xb7\xban\x9d|\x9c/mb\xb9N\xc2TW\xa7\xcb\x909n\x1dNLF\xe1#\x1fq\xa6\x9c\xda|yEN"C\xcc[\x19\xd4\xbf+|\xa7wV\x8a\x19,\x9c\xf7\x81\xcd+\xfe\xab\xf3\x1fu3u\xa7\xf6\x9fW\x8f\x99\x13\x1f\xd2\x1f\xaa\x9d&\xa3\xd9\x8d&N@\xc0\xff\x00D\xfe\x83l_R\xfc\x9b\xbfJ\xb6\x9d\x7f\x1c\xe3\xf9\'S\x19\xf9r^`\xfe\x19\xbc\xd3\xfb_\x8c\xff\x00y\x03\x1fv\xff\x00\xab\xf4\xba-O\xb1\xd9\x07\xf7S\x12\xfe\xb6\xdfu\xfe\x86/\xa8\xf9\x1f\xcdZx&}:FA\xfe\xec\x86\x92\xad<\x7fvZ\x9fNo4\xfd\xb7\xa4\xcb\xf4\xe4\x17\xe7\xb7\xde\xe8\xb5\x1d\x87\xab\xc5\xf5c$yz\xbe\xe4\x91\x95\x95\x8a\xb0*\xc0\xd0\x83\xb1\x076\x80\xde\xe1\xd5\x11[\x16\xb0\xa1\xbcP\xd8\xc5[\xc5\r\xe2\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(l`V\xc6\x14"\xb4\xdd:\xefR\xd4-\xec-\x13\xd4\xb9\xb9q\x1cK\xee\xc7\xa9\xf0\x03\xa99\x0c\x93\x10\x89\x91\xe4\x1b0\xe2\x96I\x88G\x99}C\xe5\x8f/\xdah\x1a%\xb6\x97m\xba\xc2\xbf\xbc\x93\xbb\xc8\xdb\xbb\x9f\x99\xfc6\xceG>c\x92fE\xf4\xdd\x1e\x9681\x0cq\xe9\xf6\x94\xd3)r\x9d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1V3\xe7\xbf0~\x8c\xd3>\xad\x03R\xf2\xf0\x15B:\xaatf\xfe\x03\xfb3[\xdaZ\xaf\x0e\x14>\xa98\xfa\x8c\xbc"\x872\xf2\x91\x9c\xc3\xado\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xde*\xb8aKxU\xb1\x8a\xb6\x0b\x02\n\xb1V\x1b\xab\x0e\xa0\x8d\xc1\x1f,[1d0\x90\x90\xe8\xf4\xfd&\xfdo\xf4\xe8.\xc6\xc6E\xf8\xd4t\x0e>\x17\x1fC\x03\x9d\x1e\x0c\xbe$\x04\x9d\x8c\xe2\x01\xdb\x97Oq\xe4\x8b\xcbX;\x15Q\xbd\x83\xd7\xb6x\xc7\xda\xa5S\xb7\xc47\x1b\xe5Y\xf1q\xc0\xc5\x9c%\xc2Ac\x95\xae\xf9\xcb\x11[;`m\xac\x8a]\x8a\xb5\x91V\xb1K\xb0+X\x12\xecU\xac\n\xe3\x81-`W\x1c\n\xd6)h\xe0T\x1d\xf6\x91\xa5\xdf\xaf\x1b\xdbHnGc*+\x11\xf2$Te\xf85yp\xff\x00w)G\xdc\\|\xfaLY\xbf\xbc\x8ce\xef\x16\xc6u\x0f\xca\xbf+\xdc\xd4\xdb\xac\xb6Nw\x1e\x93\xf2Z\xff\x00\xab\'?\xc0\x8c\xdei\xfd\xaa\xd5\xc3\xea\xe1\x98\xf3\x1f\xaa\x9d\x1e\xa3\xd9M&O\xa7\x8a\x07\xc8\xfe\xbbc:\x87\xe5\x06\xab\x1dZ\xc2\xf2+\x85\xec\xb2\x83\x13|\xb6\xe6\xbf\x88\xcd\xe6\x9f\xdb\x0c2\xdb$%\x1fv\xe3\xf4\x17C\xa8\xf6;4\x7f\xbb\x9ce\xef\xdb\xf5\xfe\x863\xa8y?\xcc\xday?Y\xd3\xe5\xe0:\xc9\x18\xf5R\x9e<\xa3\xe4\x07\xd3\x9b\xed7lis}\x19#}\xc7c\xf24\xe8u=\x8b\xab\xc3\xf5c\x97\xc3q\xf6ZPA\x06\x87b:\x8c\xd9:\xb7b\xae\x18\xa1\xbcU\xbcP\xde*\xecP\xde*\xecU\xbc(l`V\xc6\x14=\xa3\xf2O\xc9\xc6\x0bv\xf3-\xe2RY\xc1\x8fOV\x1b\xac}\x1eO\xf6]\x07\xb5|sC\xda\xba\x9b>\x18\xe9\xcd\xec}\x9c\xec\xfe\x11\xe3K\x99\xfa}\xdd\xff\x00\x1f\xc77\xab\xe6\x99\xea\x9d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1U;\x9b\x98m\xad\xe4\xb8\x9d\x82C\x12\x97v=\x80\x159\x19\xccD\x12y\x04\x13B\xcb\xc5\xb5\xedbm_S\x9a\xf6]\x83\x1aD\x9f\xcb\x18\xfb+\xfd}\xf3\x8f\xd4\xe79fd]NI\xf1J\xd0\x03(`\xde*\xde\x15lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xb61V\xf0\xabc\n[\xc5[\x18U\xbcUp\xc2\x96\xf0\xabc\x15o\nY_\x91u\nI>\x9e\xe7f\xfd\xfc?1Eq\xff\x00\x11?~l{;-\x13\x0f\x8f\xeb\xfd\x1fk\xb0\xc3.,~q\xdb\xe0\x7fm\xfd\x8c\xbf6\xc9v*\xecU \xd4\xe00\xdd\xbd>\xcc\x9f\x1a\xf5\xef\xd4W\xe7\x9c\xf7hb\xe0\xc9}$\xect\xd3\xb8\xd7r\x130\x1c\x97b\xaddU\xacR\xec\n\xd6\x04\xbb\x15k\x02\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02P:\x86\x87\xa3\xea\x03\xfd6\xca\x19\xdb\xb3\xba\x02\xc3\xe4\xdfh}\xf9\x95\xa7\xd7\xe7\xc3\xfd\xdc\xe5\x1f\x8e\xdf.N&\xa3A\x837\xf7\x90\x8c\xbd\xe3\x7f\x9b\x19\xbf\xfc\xab\xf2\xe5\xc5M\xabMf\xdd\x8274\xfaC\xf2o\xf8l\xde\xe9\xfd\xad\xd5C\xeb\x11\x98\xf7Q\xfb6\xfb\x1d\x0e\xa3\xd9\x1d$\xfe\x8e({\x8d\x8f\xb6\xcf\xda\xc6\xef\xff\x00)\xb5\x98jl\xee\xa1\xba_\x06\xacN~\x83\xc9\x7f\xe1\xb3{\xa7\xf6\xc3O/\xef#(\x7f\xb2\x1f\xa0\xfd\x8e\x87Q\xecn\xa2?\xdd\xca3\xff\x00b\x7fH\xfbX\xd5\xff\x00\x95\xfc\xc3aSu\xa7\xcc\x8a:\xba\xaf4\x1f\xec\xd3\x92\xfe9\xbe\xd3\xf6\xb6\x977\xd1\x92\'\xca\xe8\xfc\x8e\xee\x83Q\xd9\x1a\xac?^9\x0f\x85\x8f\x98\xb0\x96f\xc1\xd6\xb7\x8a\xbb\x147\x8a\xbb\x15o\n\x1b\x18\x15\x90\xf9\x1b\xca\xd3y\x97\xcc0X\n\xad\xb2\xfe\xf6\xf2Q\xfb0\xa9\x1c\xa9\xee\xdfd{\x9c\xc6\xd5\xea\x06(\x19u\xe8\xe7vn\x88\xeas\x08\x7f\x0f3\xee}9o\x046\xf0Go\x02\x08\xe1\x89BE\x1a\xec\x15TP\x01\xf2\x19\xc9\x92I\xb2\xfaTb"\x00\x1c\x82\xfc\x0c\x9d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1W\x9f\xfedy\x87\x93.\x8dn\xdb\n=\xe1\x1e=Q?\xe3c\xf4f\x87\xb5\xb5_\xe4\xc7\xc7\xf58:\xac\xbf\xc2\x18\x16h\xdc&\xc6\x14\xb7\x8a\xb7\x85[\x18\xa5\xbc*\xd8\xc5W\x0c)p\xc5[\xc2\xab\x86)o\n\xb7\x85[\x18\xa5\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15o\x15\\0\xa5\xbc*\xd8\xc5[\xc2\x94E\x85\xe3\xd9^\xc1v\x9b\x98\x1c1\x03\xa9^\x8e>\x95$d\xa13\t\t\x0e\x9f\x8f\xb9\xc8\xd2\xcf\x86tyKc\xf8\xf24^\x9f\xeb\xc3\xe8}c\x98\xf48\xfa\x9e\xa5~\x1e\x14\xaf*\xf8S:>!W\xd1\xcb\xe07]W\xe4\x98\xbb\x15@\xeb\x16\xfe\xa5\xb7\xa8\x07\xc5\x11\xaf\xfb\x13\xb3\x7f_\xa30\xb5\xf8\xb8\xf1\xdfQ\xbb~\x9e|2\xf7\xa4y\xce;7b\xaddU\xacR\xec\n\xd6\x04\xbb\x15k\x02\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02]\x81Z\xc0\x96\x8e*\xec\tK\xaf\xfc\xbf\xa2j\x157\x960\xcc\xe7\xac\x85@\x7f\xf81F\xfcs7O\xdaz\x8c\x1f\xdd\xce@w^\xdf.N\x0e\xa7\xb3t\xf9\xff\x00\xbc\x84d{\xeb\x7f\x9f67\xa8~U\xe83\xd5\xad%\x9a\xd1\xbb-}D\xfb\x9b\xe2\xff\x00\x86\xcd\xf6\x9b\xdb\rL?\xbc\x11\x9f\xd8~\xcd\xbe\xc7A\xa9\xf6;K?\xa0\xca\x1fh\xfbw\xfbX\xde\xa1\xf9Y\xae\xc0\x0bZK\x15\xda\x8e\x8b_M\xcf\xd0\xdf\x0f\xfc6o\xb4\xde\xd8i\xa7\xb6A(}\xa3\xec\xdf\xect\x1a\x9fcu0\xdf\x1c\xa3?\xf6\'\xed\xdb\xedc\xb7\xfe^\xd6\xec*n\xecf\x89TT\xc8T\x94\xff\x00\x83Z\xaf\xe3\x9b\xfd7ii\xf3\xff\x00w8\xc8\xf7^\xff\x00.o?\xa9\xec\xbdN\x0f\xef1\xc8\x0e\xfa\xdb\xe66K\xb35\xc0o\n\x1bPI\xa0\xdc\x9e\x83\x02\xbe\x90\xfc\xb0\xf2x\xf2\xe7\x97\x94\xdc\'\x1dN\xfb\x8c\xd7\x95\xea\xbb|\x11\x7f\xb0\x07\x7frs\x97\xd7\xea|Y\xed\xf4\x8eO\xa1\xf66\x83\xf2\xf8w\xfa\xe5\xb9\xfd\x03\xe1\xf7\xb3\x0c\xc1v\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xaa[\xe6\x1dj-\x1fJ\x96\xf1\xe8\\|0F\x7fjF\xfb#\xf8\x9fl\xc7\xd5j\x06(\x19\x1f\x87\xbd\xaf.N\x18\xdb\xc5\xe6\x9e[\x89\xe4\x9ef/,\xac^G=K1\xa99\xc7\xcaFF\xcf2\xeaI\xb3k2(laKx\xabxU\xb1\x8a[\xc2\xad\x8cUp\xc2\x97\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15]\x8a[\x18U\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laV\xf1U\xc3\n[\xc2\xad\x8cU\xbc)mA&\x80T\x9e\x83\x15g\xdf\xa2\xef\x7f\xc2\x9f\xa3\xf9\x9f\xac\xfa\xc6i\xe7\xbe9J\x1f\xec\x87\xeb\xfbW\xf9/\xf2\xe6-7\xcc\xb0\xdfj\xf7\x11\xcdek\xfb\xd8\x15CU\xa6\x07\xe0\xe6\xb4\xd8/\xda\xeaw\xcd\xa6Ok\xb0e\xc7\xc3R\x84\x8f\x7f/\xb3\xf58\x1aOdr\xe1\xcc\'#\x19\xc2;\x8e\xfb\xf7~\xd7\xb3\xc3wm?\xf7R\xab\xfb\x02+\xf7e\x18\xb58\xf2}2\x05\xdf\xcf\x1c\xa3\xcc*\xe5\xcc\x1d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1W\x92y\xe7\xcc?\xa5uS\x14\r[+J\xa4T\xe8\xcd\xfbO\xf4\xf4\x1e\xd9\xca\xf6\x8e\xab\xc5\x9d\x0f\xa6.\xb3Q\x97\x8a[r\x0cpf\xbd\xc7o\x15laKx\xabxU\xb1\x8a[\xc2\xad\x8cUp\xc2\x97\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15]\x8a[\x18U\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laV\xf1U\xc3\n[\xc2\xad\x8cU\xbc)d~O\xd2>\xb3toeZ\xc3n~\x00z4\x9d\xbf\xe0z\xe6~\x87\x07\x14\xb8\x8f \xdd\x86\x16m\x9b\xe6\xe1\xcbv*\xecU\xd8\xaaS\xad\xc1F\x8eq\xdf\xe0o\xd6?\x8ej{S\r\x811\xees4\x93\xde\x92\xbc\xd2\xb9\xcddU\xacR\xec\n\xd6\x04\xbb\x15k\x02\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02]\x81Z\xc0\x96\x8e*\xec\tk\x02\xbb\x02\xb5\x81]\x81-\x1c\n\xd6\x05k\x02]\x8a\xa2`\xd5/\xe0\xfe\xeev\xa7\xf2\xb7\xc4>\xe3\\\xcb\xc5\xda\x19\xf1\xfd2?\x7f\xde\xd5=<%\xcc#\xe1\xf3=\xc2\xd0M\x12\xb8\xf1Z\xa9\xfe9\xb1\xc5\xdb\xf9\x07\xd7\x10}\xdb~\xb7\x16}\x9f\x13\xc8\xd2a\x07\x98\xb4\xe96r\xd1\x1f\xf2\x85G\xde+\x9b<]\xb7\x82\\\xee>\xff\x00\xd8\xe3OC\x90r\xdd\x1f\r\xcd\xbc\xc2\xb1H\xb2\x7f\xaaA\xcd\x96,\xf0\xc9\xf4\xc8\x1fs\x8d,r\x8f1J\x99k\x07b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xac[\xcf\xdea\xfd\x1b\xa6}R\x06\xa5\xe5\xe0*)\xd5#\xe8\xcd\xf4\xf4\x1f\xd9\x9a\xce\xd3\xd5xp\xe1\x1fT\xbe\xe7\x1bS\x97\x84P\xe6^S\x9c\xc3\xadlb\xad\xe2\xad\x8c)o\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xde*\xb8aKxU\xb1\x8a\xab\xd9\xdaMwu\x1d\xb4"\xb2Hh=\xbcI\xf9d\xf1\xc0\xc8\x80\x19DY\xa7\xa6\xd8YCei\x1d\xb4C\xe0\x8cR\xbd\xc9\xeeO\xcc\xe7E\x8f\x18\x84@\x0e|cB\x95\xf2iv*\xecU\xd8\xaa\x95\xd4\x02{w\x88\xf5a\xf0\x93\xd0\x11\xb8;{\xe5yq\x89\xc4\xc4\xf5e\tQ\xb64A\x06\x84\x10GPv#9ID\x83E\xdb\x83b\xda\xc8%\xacR\xec\n\xd6\x04\xbb\x15k\x02\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02]\x81Z\xc0\x96\x8e*\xec\tk\x02\xbb\x02\xb5\x81]\x81-\x1c\n\xd6\x05k\x02]\x8a\xb5\x81-\x1c\n\xd6\x04\xb6\t\x06\xa0\xd0\x8e\x87\x004\xa8\xa85\x8dJ\x1a\x05\x9d\x88\x1d\x9f\xe2\x1f\x8ds7\x17i\xea1\xf2\x91\xf8\xef\xf7\xb4OK\x8e\\\xc2a\x07\x9af\x1bO\n\xb7\xf9HJ\xfe\x06\xb9\xb3\xc5\xed\x0c\x87\xd7\x10}\xdb~\xb7\x16}\x9c?\x84\xa6\x10y\x8bM\x97fv\x88\xf88\xfe"\xa36x{oO>d\xc7\xdf\xfb\x1ci\xe8r\x0f4\xc2)\xe0\x98V)\x16A\xe2\xa4\x1f\xd5\x9b$\xab\xa7V\xccp\xe2/HUUP\xaa\x00U\x14\x00t\x00g@\x03\x9c\xde*\xecU\xd8\xab\xb1Wb\xae\xc5PZ\xb4\x1e\xa5\xa38\xfbQ|c\xe4>\xd7\xe1\xbea\xeb\xb0\xf1\xe3=\xe3v\xec\x13\xe1\x92C\x9c\xcb\xb4k\x14\xbb\x02\xb5\x81.\xc5Z\xc0\xae8\x12\xd6\x05q\xc0\xadb\x96\x8e\x05k\x02\xbb\x02Z\xc5Z\xc0\x97`V\xb0%\xa3\x8a\xbb\x02Z\xc0\xae\xc0\xad`W`KG\x02\xb5\x81Z\xc0\x97b\xad`KG\x02\xb5\x81.\xc0\xad`K\xb0+Y\x14\xb5\x8a\xbb"\xad`K\xb0+\x92I#nH\xc5\x1b\xc5I\x07\xf0\xc9Fr\x89\xb8\x9a(1\x07\x9a:\r\x7fU\x84PM\xccxH9~=\x7f\x1c\xd8\xe1\xed\x9dN?\xe2\xe2\x1e{\xfe\xd7\x1az,r\xe9O8\xbc7\x06\xeecp\xc5\xe7.\xc6V=K\x13\xb9\xfar\xce>?W{\xc4f\x81\x8c\xcce\xcc\x15!\x8b[xR\xd8\xc5[\xc5[\x18R\xde*\xde\x15lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xb61V\xf0\xabc\n[\xc5[\x18U\xbcUp\xc2\x96\xd4\x12@\x02\xa4\xec\x00\xc2\x15\xe9>]\xd2F\x9b\xa7\xaa0\xff\x00H\x93\xe3\x9c\xfb\x9e\x8b\xfe\xc77\xfa\\>\x1c+\xab\x9d\x8e\x1c!3\xcc\x96\xc7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\x19\xba\x80\xc1p\xf1vS\xf0\xf5\xfb\'q\xb9\xf6\xce[W\x87\xc3\xc8GGm\x86|Q\x05G1\x9b]\x81Z\xc0\x97b\xad`W\x1c\tk\x02\xb8\xe0V\xb1KG\x02\xb5\x81]\x81-b\xad`K\xb0+X\x12\xd1\xc5]\x81-`W`V\xb0+\xb0%\xa3\x81Z\xc0\xad`K\xb1V\xb0%\xa3\x81Z\xc0\x97`V\xb0%\xd8\x15\xac\x8aZ\xc5]\x91V\xb0%\xd8\x15n\x05v\x04\xb1\xbf1\xdap\xb9[\x85\x1f\x0c\xa2\x8d\xfe\xb2\xff\x00fg\xe9gb\xbb\x9eW\xb74\xfc9\x04\xc7)}\xe1\'\x19\x94\xe8\xdb\xc2\x96\xc6*\xde*\xd8\xc2\x96\xf1V\xf0\xabc\x14\xb7\x85[\x18\xaa\xe1\x85.\x18\xabxUp\xc5-\xe1V\xf0\xabc\x14\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xbb\x14\xb60\xabxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xad\xe2\xab\x86\x14\xb2_&\xe8\xff\x00X\xba7\xd3-a\xb7?\xbb\x07\xf6\xa4\xff\x00\x9bsa\xa0\xc1\xc5.#\xc87\xe0\x85\x9bg\x19\xb9r\xdd\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5R\xbdn\xde\xaa\x97\n7\x1f\x03\xfc\xba\x83\xf4\x1f\xd7\x9a\xae\xd4\xc3q\x13\xeer\xf4\x93\xa3]\xe9>h\x9d\x83\xb0+X\x12\xecU\xac\n\xe3\x81-`W\x1c\n\xd6)h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x94\x1e\xabk\xf5\x9b\x19#\x02\xae\x07$\xff\x00Y\x7f\xafL\xb3\x0c\xf8d\x0b\x85\xda\x1a\x7f\x17\t\x8f^c\xde\x18x\xcd\xab\xc37\x85-\x8cU\xbcU\xb1\x85-\xe2\xad\xe1V\xc6)o\n\xb61U\xc3\n\\1V\xf0\xaa\xe1\x8a[\xc2\xad\xe1V\xc6)o\n\xb61V\xf0\xabc\n[\xc5[\x18Uv)laV\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85[\xc5Q\x166s^]\xc7m\x08\xac\x92\x9a\x0f\x00;\x93\xf2\x19f8\x19\xc8\x01\xd5\x94cf\x9e\xa1cg\r\x95\xa4v\xd0\x8a$b\x83\xc4\x9e\xe4\xfc\xcetx\xf1\x88D\x00\xec#\x1a\x14\xaf\x93K\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xaa\x9d\xc4+4\x0f\x13tqJ\xd2\xb4=\x8f\xd0r\x19 %\x13\x13\xd514m\x8c2\xb2\xb1V\x14e$0\xebB6#9)\xc0\xc4\x90z;\x98\xca\xc5\xb5\x90KX\x12\xecU\xac\n\xe3\x81-`W\x1c\n\xd6)h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\x11\xd5\xed~\xad}"\x81D\x7f\x8d>G\xfbsi\x82|Qx\x9e\xd3\xd3\xf8Y\x88\xe8w\x08<\xbd\xc0lb\xad\xe2\xad\x8c)o\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xde*\xce|\x97\xa3\xfa\x16\xc6\xfee\xfd\xf4\xe2\x91\x03\xda?\x1f\xf6_\xab7:\x0c\x1c#\x88\xf3.f\x08P\xb6M\x9b\x16\xf7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5R-f\x0fN\xe8H>\xcc\xc2\xbf\xec\x97c\xfc3C\xda\x98jbC\xab\xb0\xd2N\xc5w 3T\xe5\xb5\x81.\xc5Z\xc0\xae8\x12\xd6\x05q\xc0\xadb\x96\x8e\x05k\x02\xbb\x02Z\xc5Z\xc0\x97`V\xb0%\xa3\x8a\xbb\x02Z\xc0\xae\xc0\xad`W`KG\x02\xb5\x81Z\xc0\x97b\xad`KG\x02\xb5\x81.\xc0\xad`K\xb0+Y\x14\xb5\x8a\xbb"\xad`K\xb0*\xdc\n\xec\tk\x02\xa5>a\xb5\xf5-D\xca>(N\xff\x00\xea\xb6\xc72t\xb3\xa9W{\xa6\xed\xbd?\x1e.1\xce?s\x1b\xcd\x93\xc9\xb61V\xf1V\xc6\x14\xb7\x8a\xb7\x85[\x18\xa5\xbc*\xd8\xc5W\x0c)p\xc5[\xc2\xab\x86)o\n\xb7\x85[\x18\xa5\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15M|\xbb\xa46\xa7\xa8,l\x0f\xd5\xe3\xf8\xe7o\xf2\x7f\x97\xfd\x96d\xe9px\x93\xae\x9d[1C\x88\xbd-T*\x85QE\x02\x80\x0e\x80\x0c\xe8C\x9e\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1T.\xa9nf\xb3p\x05]>5\x02\xbdGQA\xd7j\xe6.\xb3\x0f\x89\x8c\x8e\xad\xb8g\xc3 X\xeer\xce\xd9\xac\tv*\xd6\x05q\xc0\x96\xb0+\x8e\x05k\x14\xb4p+X\x15\xd8\x12\xd6*\xd6\x04\xbb\x02\xb5\x81-\x1cU\xd8\x12\xd6\x05v\x05k\x02\xbb\x02Z8\x15\xac\n\xd6\x04\xbb\x15k\x02Z8\x15\xac\tv\x05k\x02]\x81Z\xc8\xa5\xacU\xd9\x15k\x02]\x81V\xe0W`KX\x15l\x88\xb2F\xc8\xc2\xaa\xc0\xab\x0fc\x884m\x8c\xe0%\x13\x13\xc8\xb0\xbb\x88\x1a\t\xe4\x85\xba\xa1#\xfbsq\tq\x00^\x07>#\x8ef\x07\xa1X2mM\xe2\xad\x8c)o\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xab\x91Y\x88U\x15bh\x00\xeaI\xc2\x15\xe9\x9e]\xd2\x17L\xd3\x926\x1f\xe9\x12|s\xb7\xf9G\xb7\xfb\x1e\x99\xd0\xe9pxp\xae\xbd\\\xfcp\xe1\t\x9ed\xb6;\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\x1a\xbe\xb7\xfa\xbd\xd3\xc6\x05\x13\xaa\x7f\xaazS\xe5\xd39}v\x1f\x0f!\x1d\x0e\xee\xd7O>(\xa1\xf3\r\xbd\xd8\xabX\x15\xc7\x02Z\xc0\xae8\x15\xacR\xd1\xc0\xad`W`KX\xabX\x12\xec\n\xd6\x04\xb4qW`KX\x15\xd8\x15\xac\n\xec\th\xe0V\xb0+X\x12\xecU\xac\th\xe0V\xb0%\xd8\x15\xac\tv\x05k"\x96\xb1WdU\xac\tv\x05[\x81]\x81-`W`K\x1f\xf3\x1d\xaf\x19R\xe5F\xcf\xf0?\xcct\xfc3?I=\x8c^g\xb7t\xf5!\x90u\xd8\xfe?\x1c\x92a\x99\xaf>\xde*\xd8\xc2\x96\xf1V\xf0\xabc\x14\xb7\x85[\x18\xaa\xe1\x85.\x18\xabxUp\xc5-\xe1V\xf0\xabc\x14\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xbb\x14\xb60\xabxU\xb1\x8a\xb7\x85[\x18R\xde*\xca<\x95\xa3z\xf7\'P\x99\x7fs\x01\xa4 \xf7\x93\xc7\xfd\x8f\xeb\xcd\x96\x83\x07\x11\xe3<\x83\x91\x82\x16m\x9c\xe6\xe5\xcbv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xa9f\xb9o\xca%\x9cuC\xc5\xfa}\x96\xe9\xf8\xfe\xbc\xd6v\xa6\x1e(q\x0eqr\xb4\xb3\xa9WzK\x9c\xf3\xb2v*\xd6\x05q\xc0\x96\xb0+\x8e\x05k\x14\xb4p+X\x15\xd8\x12\xd6*\xd6\x04\xbb\x02\xb5\x81-\x1cU\xd8\x12\xd6\x05v\x05k\x02\xbb\x02Z8\x15\xac\n\xd6\x04\xbb\x15k\x02Z8\x15\xac\tv\x05k\x02]\x81Z\xc8\xa5\xacU\xd9\x15k\x02]\x81V\xe0W`KX\x15\xd8\x12\x86\xd4-\x85\xcd\xa4\x91~\xd1\x15O\xf5\x86\xe3\'\x8a|2\x05\xc5\xd6\xe9\xfc\\F=z{\xd8}\x08$\x1d\x88\xcd\xcb\xc2\x10\xde(laKx\xabxU\xb1\x8a[\xc2\xad\x8cUp\xc2\x97\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU\xbc*\xd8\xc2\x96\xf1V\xc6\x15]\x8a[\x18U\xbc*\xd8\xc5[\xc2\xad\x8c)D\xd8YM{y\x15\xac#\xe3\x94\xd2\xbd\x80\xeeO\xc8e\x98\xb1\x99\xc8Due\x18\xd9\xa7\xa9\xd9Y\xc3gi\x15\xb4"\x91\xc4\xbcG\xbf\x89?3\xbet\x98\xe0!\x10\x07Ga\x18\xd0\xa5l\x9a]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xaa\xd9cYbx\xdb\xec\xb8*i\xd7}\xb23\x88\x90 \xf2)\x06\x8d\xb1gF\x8d\xd9\x1f\xed!*\xd4\xe9Pi\x9c\x8e\\f\x121=\x1d\xcc%\xc4\x01[\x95\xb2k\x02\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02]\x81Z\xc0\x96\x8e*\xec\tk\x02\xbb\x02\xb5\x81]\x81-\x1c\n\xd6\x05k\x02]\x8a\xb5\x81-\x1c\n\xd6\x04\xbb\x02\xb5\x81.\xc0\xaddR\xd6*\xec\x8a\xb5\x81.\xc0\xabp+\xb0%\xac\n\xec\tk\x01V-\xac\xda\xfa\x17\xcc@\xa2K\xf1\xaf\xcc\xf5\xfcsk\xa6\xc9\xc5\x0fs\xc6v\xb6\x9f\xc3\xcck\x94\xb7\xfdh\x1c\xc8u\x8d\x8c)o\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU\xb1\x85,\xf3\xc9Z7\xd5\xadM\xfc\xcbI\xae\x07\xee\x81\xea\xb1\xff\x00\xcd\xd9\xba\xec\xfc\x1c1\xe2<\xcf\xdc\xe6`\x85\x0bd\xd9\xb1ov*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xa4\x9a\xdd\xbf\x0b\x85\x98\x0f\x86QF?\xe5.\xdf\x88\xfdY\xa2\xed\\5!>\xfd\x9c\xfd\x1c\xf61KsP\xe6\xb5\x81\\p%\xac\n\xe3\x81Z\xc5-\x1c\n\xd6\x05v\x04\xb5\x8a\xb5\x81.\xc0\xad`KG\x15v\x04\xb5\x81]\x81Z\xc0\xae\xc0\x96\x8e\x05k\x02\xb5\x81.\xc5Z\xc0\x96\x8e\x05k\x02]\x81Z\xc0\x97`V\xb2)k\x15vEZ\xc0\x97`U\xb8\x15\xd8\x12\xd6\x05v\x04\xb5\x80\xaa[\xae\xdbz\xb6~\xa0\x1f\x1c\'\x97\xfb\x1e\xff\x00\xd724\x998e]\xee\xa7\xb6t\xfcxx\x878o\xf0\xea\xc6\xb3j\xf1\xed\x8c)o\x15o\n\xb61KxU\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xde*\xd8\xc2\xab\xb1Kc\n\xb7\x85[\x18\xabxU7\xf2\xd6\x8eu=EQ\x87\xfa4Ty\xcf\xb7e\xff\x00e\x99ZL\x1e$\xfc\x876\xdcP\xe2/L\x00(\x00\n\x01\xb0\x03\xa0\x19\xd19\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xa8mF\xdb\xeb\x16\x8e\x80U\xc7\xc5\x1fJ\xf2\x1e\x15\xf1\xe9\x98\xfa\xac>&3\x16\xccS\xe1\x90,k92\xee\x1d\x81\\p%\xac\n\xe3\x81Z\xc5-\x1c\n\xd6\x05v\x04\xb5\x8a\xb5\x81.\xc0\xad`KG\x15v\x04\xb5\x81]\x81Z\xc0\xae\xc0\x96\x8e\x05k\x02\xb5\x81.\xc5Z\xc0\x96\x8e\x05k\x02]\x81Z\xc0\x97`V\xb2)k\x15vEZ\xc0\x97`U\xb8\x15\xd8\x12\xd6\x05v\x04\xb5\x80\xaa\xd6P\xcaU\x85T\x8a\x11\xecp]"Q\x04Qa\xf7v\xe6\xde\xe6HO\xec\x1d\x8f\x88\xea?\x0c\xdd\xe3\x9f\x14Ax-V\x03\x8b!\x81\xe8T\xc6X\xd0\xde*\xde\x15lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xb61U\xc8\xac\xcc\x15AfcE\x03rI\xc2\x05\xa5\xe9\xfe^\xd2\x17L\xd3\x92\x12\x07\xae\xff\x00\x1c\xed\xfeQ\xed\xf2\x1d3\xa3\xd2\xe0\xf0\xe1]z\xb9\xf8\xe1\xc2\x13<\xc9lv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xc6\xf5+\x7fB\xf1\xd4}\x96\xf8\xd7\xe4\xdf\xdb\\\xe6;C\x0f\x06S\xdcwv\x9ai\xf1G\xdc\x85\xcc\x17!\xc7\x02Z\xc0\xae8\x15\xacR\xd1\xc0\xad`W`KX\xabX\x12\xec\n\xd6\x04\xb4qW`KX\x15\xd8\x15\xac\n\xec\th\xe0V\xb0+X\x12\xecU\xac\th\xe0V\xb0%\xd8\x15\xac\tv\x05k"\x96\xb1WdU\xac\tv\x05[\x81]\x81-`W`KX\n\xb5\x81)\x1f\x98m\xbf\xbb\xb9Q\xfeC\xfe\xb1\x99\xfa,\x9c\xe2\xf3\x9d\xbd\xa7\xe5\x90{\x8f\xe8I\x86l\x1eq\xbcU\xbc*\xd8\xc5-\xe1V\xc6*\xb8aK\x86*\xde\x15\\1KxU\xbc*\xd8\xc5-\xe1V\xc6*\xde\x15laKx\xabc\n\xae\xc5-\x8c*\xde\x15lb\xac\xaf\xc9\x1a/\xafpu\x19\x97\xf7P\x1a@\x0fy<\x7f\xd8\xfe\xbc\xd9\xf6~\x9e\xcf\x19\xe4998!{\xb3\x9c\xdd9n\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xa5\xda\xdd\xb9{u\x94u\x88\xef\xd7\xec\xb6\xc7\xa7\xbd3]\xdaxx\xf1\xdfX\xb9:Y\xd4\xab\xbd"\xcem\xd9\xb8\xe0KX\x15\xc7\x02\xb5\x8aZ8\x15\xac\n\xec\tk\x15k\x02]\x81Z\xc0\x96\x8e*\xec\tk\x02\xbb\x02\xb5\x81]\x81-\x1c\n\xd6\x05k\x02]\x8a\xb5\x81-\x1c\n\xd6\x04\xbb\x02\xb5\x81.\xc0\xaddR\xd6*\xec\x8a\xb5\x81.\xc0\xabp+\xb0%\xac\n\xec\tk\x01V\xb0%B\xee\xdc\\[I\t\xfd\xa1\xb1\xf0=G\xe3\x92\xc7>\x19\x02\xd1\xaa\xc02\xe30=X\x91R\xa4\xa9\x14#b=\xf3z\x0b\xc0\x90A\xa2\xecP\xde\x15lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96\xc6\x15o\n\xa2t\xdb\x19\xaf\xafb\xb5\x87\xed\xcai^\xc0u$\xfc\x86Y\x8b\x19\x9c\x84GVQ\x8d\x9az\xb5\x95\xa46v\xb1[B)\x1cJ\x15|O\x89>\xe7:lp\x10\x88\x03\xa3\xb1\x8chR\xb6M.\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xb4\xe8\xae\x8c\x8c*\xac\x08a\xe2\x0e\xc7\x01\x00\x8a*\x0b\x15\x9a&\x86W\x89\xbe\xd2\x12\t\xe9_\x7f\xa7\xaer\x19\xf1\x1cs1\xeew8\xe7\xc5\x10V\x1c\xa5\xb1\xac\n\xe3\x81Z\xc5-\x1c\n\xd6\x05v\x04\xb5\x8a\xb5\x81.\xc0\xad`KG\x15v\x04\xb5\x81]\x81Z\xc0\xae\xc0\x96\x8e\x05k\x02\xb5\x81.\xc5Z\xc0\x96\x8e\x05k\x02]\x81Z\xc0\x97`V\xb2)k\x15vEZ\xc0\x97`U\xb8\x15\xd8\x12\xd6\x05v\x04\xb5\x80\xabX\x12\xd6\x05c\x9a\xdd\xb7\xa5xd\x03\xe0\x98r\x1f>\xf9\xb6\xd1\xe4\xe2\x85w<\x7fl\xe9\xfc<\xdcC\x94\xf7\xf8\xf5K\xf3)\xd4\xb7\x85[\x18\xa5\xbc*\xd8\xc5W\x0c)p\xc5[\xc2\xab\x86)o\n\xb7\x85[\x18\xa5\xbc*\xd8\xc5[\xc2\xad\x8c)o\x15laU\xd8\xa5\xb1\x85[\xc2\xac\xff\x00\xc9:/\xd5l\xcd\xf4\xcbI\xeeG\xee\xc1\xea\xb1u\x1f\xf0]~\xec\xdev~\x9f\x86\xf9\xcdv\x9e\x1e\x0c\x969I\xdaigq\xae\xe4\x16k\\\x97\x1c\n\xd6)h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\xb0%\xac\x05Z\xc0\x96\xb0+\xb0*O\xaf\xdbU\x12\xe0\r\xd7\xe1\x7f\x91\xe9\xf8\xe6~\x87&\xe6.\x83\xb7t\xf7\x11\x90t\xd8\xfe\x8f\xc7\x9aK\x9b7\x98lb\x96\xf0\xabc\x15\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xb60\xa5\xbcU\xb1\x85Wb\x96[\xe4]\x17\xd6\x9c\xeas/\xee\xe1\xe7:|p\x11\x88\x88\xe4\x1d\x8cE\nV\xc9\xa5\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xe6P\xcaU\x85T\x8a\x10z\x10q!X\xad\xcc\x06\x0b\x89!;\xf04\x07\xbd:\x82i\xed\x9c~\xab\x0f\x87\x90\xc5\xdc\xe2\x9f\x14AR9\x8e\xd8\xd6)h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\xb0%\xac\x05Z\xc0\x96\xb0+\xb0+Y\x12\x94\x83[\xb7\xf4\xeeD\xa0|2\x8d\xff\x00\xd6\x1dso\xa1\xc9q\xae\xe7\x92\xed\xbd?\x06^1\xca_z\\35\xd37\x85[\x18\xaa\xe1\x85.\x18\xabxUp\xc5-\xe1V\xf0\xabc\x14\xb7\x85[\x18\xabxU\xb1\x85-\xe2\xad\x8c*\xf4O$\xe8\x9fS\xb2\xfa\xec\xcbK\x8b\xa1\xf0\x83\xd5c\xea?\xe0\xba\xfd\xd9\xbe\xec\xfd?\x04x\x8f3\xf79\xd81\xd0\xb6K\x9b\x16\xf7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xa9>\xbdo\xbcw\x03\xfe1\xbf\xeb_\xe3\x9an\xd7\xc3`Lt\xd8\xb9\xba9\xeeb\x94\x1c\xd0;\x06\xb1KG\x02\xb5\x81]\x81-b\xad`K\xb0+X\x12\xd1\xc5]\x81-`W`V\xb0+\xb0%\xa3\x81Z\xc0\xad`K\xb1V\xb0%\xa3\x81Z\xc0\x97`V\xb0%\xd8\x15\xac\x8aZ\xc5]\x91V\xb0%\xd8\x15n\x05v\x04\xb5\x81]\x81-`*\xd6\x04\xb5\x81]\x81Z\xc8\x94\xa0\xf5K\x7f^\xcd\xc0\x15t\xf8\xd7\xe6?\xb3/\xd2\xe4\xe0\x98\xee.\xbf\xb4\xf4\xfe.\x12\x071\xb8cc7\xaf\x12\xde\x15lb\xab\x86\x14\xb8b\xad\xe1U\xc3\x14\xb7\x85[\xc2\xad\x8cR\xde\x15lb\xad\xe1V\xc6\x14\xb7\x8a\xa7~T\xd1N\xa7\xa9(\x90V\xd6\n<\xe7\xb1\xfeT\xff\x00e\xfa\xb33E\xa7\xf1\'\xbf\xd29\xb6\xe1\x87\x11\xf2zx\x00\n\x0e\x99\xd2;\x07b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5T\xae\xe0\x17\x16\xf2B\x7fhlOb7\x07o|\xaf618\x18\x9e\xac\xa1.\x12\x0b\x15`\xc0\x90\xc0\xab\r\x8a\x9e\xa0\xe7\x1b(\x98\x92\x0fGu\x13b\xda\xc8\xb2h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\xb0%\xac\x05Z\xc0\x96\xb0+\xb0+Y\x12\x96\xb0+\x19\xd4-\xfd\x0b\xb7@(\xa7\xe2O\x91\xcd\xf6\x9b\'\x1c\x01xn\xd0\xd3\xf8Y\x8czs\x1e\xe2\x87\xcc\x87\t\xb1\x8a\xae\x18R\xe1\x8a\xb7\x85W\x0cR\xde\x15o\n\xb61KxU\xb1\x8a\xb7\x85[\x18R\xbe8\xdeI\x168\xd4\xb3\xb9\n\xaa:\x92v\x00a\x00\x93AC\xd5\xbc\xbd\xa3\xa6\x95\xa6\xc7o\xb1\x99\xbe9\xd8ws\xd7\xe8\x1d\x06t\xfa\\\x1e\x1c+\xafWc\x8e\x1c"\x93,\xc8lv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\x1e\xd6m\xfd+\xb2\xe0Q&\x1c\x87A\xf1~\xd7\xf5\xfas\x9b\xed\\<98\xbaI\xd9i\'q\xae\xe4\x06j\xdc\xc6\x8e\x05k\x02\xbb\x02Z\xc5Z\xc0\x97`V\xb0%\xa3\x8a\xbb\x02Z\xc0\xae\xc0\xad`W`KG\x02\xb5\x81Z\xc0\x97b\xad`KG\x02\xb5\x81.\xc0\xad`K\xb0+Y\x14\xb5\x8a\xbb"\xad`K\xb0*\xdc\n\xec\tk\x02\xbb\x02Z\xc0U\xac\tk\x02\xbb\x02\xb5\x91)k\x02\xa5\x9a\xe5\xbf(Va\xd63F\xf9\x1f\xed\xcc\xfd\x06J\x91\x8f{\xa3\xed\xcd?\x14\x06A\xfc?qI3n\xf2\xad\x8cUp\xc2\x97\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU\xbc*\xd8\xc2\x96c\xe4=\x13\xd5\x99\xb5I\xd7\xf7q\x12\xb6\xe0\xf7~\xed\xfe\xc7\xa7\xfbY\xb5\xec\xdd=\x9e3\xd3\x93\x93\xa7\xc7\xd5\x9df\xed\xccv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1T\x16\xb1o\xebY\xb3\x01\xf1\xc5\xf1\x8f\x90\xfb_\x86ak\xf0x\x98\x8fx\xdd\xbfO>\x19\x869\x9c\xa3\xb7h\xe0V\xb0+\xb0%\xacU\xac\tv\x05k\x02Z8\xab\xb0%\xac\n\xec\n\xd6\x05v\x04\xb4p+X\x15\xac\tv*\xd6\x04\xb4p+X\x12\xec\n\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\xb0%\xac\x05Z\xc0\x96\xb0+\xb0+Y\x12\x96\xb0*\xd9cY#h\xdb\xec\xb0 \xfd8a#\x12\x08\xe8\xc3.18\x98\x9eD1i#h\xe4h\xdb\xed) \xfd\x19\xd1\xc2B@\x11\xd5\xe02\xe30\x91\x89\xe6\n\xd1\x92k\\0\xa5\xc3\x15o\n\xae\x18\xa5\xbc*\xde\x15lb\x96\xf0\xabc\x15o\n\xa34\xad:mF\xfe+H~\xd4\x87\xe2n\xca\xa3vc\xf2\x19n\x1cG$\x84C8G\x88\xd3\xd6\xed-a\xb4\xb6\x8a\xda\x05\xe3\x14J\x15G\xcb\xf8\x9c\xeaa\x01\x18\x809\x07e\x11B\x95riv*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xacn\xebK\xba\x86G\xe1\x19x\xaax2\xfc_\x0fj\xf7\xce_U\xa0\xc9\x19\x9e\x18\xdc|\x9d\xae\x1dDH\x16wA0 \x90E\x08\xea\x0ek\x88\xaenHk\x02\xbb\x02Z\xc5Z\xc0\x97`V\xb0%\xa3\x8a\xbb\x02Z\xc0\xae\xc0\xad`W`KG\x02\xb5\x81Z\xc0\x97b\xad`KG\x02\xb5\x81.\xc0\xad`K\xb0+Y\x14\xb5\x8a\xbb"\xad`K\xb0*\xdc\n\xec\tk\x02\xbb\x02Z\xc0U\xac\tk\x02\xbb\x02\xb5\x91)k\x02\xbb\x02RMn\xdf\x8c\xcb0\x1b8\xa3|\xc7\xf6f\xdf\xb3\xf2\xdcL{\x9eW\xb74\xfc3\x19\x07\xf1}\xe3\xf6%\xa36\x0e\x89p\xc2\x97\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU\xbc*\xf4\x7f$h\x7fR\xb0\xfa\xe4\xcbK\x9b\xa0\x08\xafU\x8f\xaa\x8f\xf6]O\xd1\x9d\x07g\xe9\xf8#\xc4y\xcb\xees\xf0c\xa1}\xec\x976-\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1U\x92C\x0c\xa2\x92"\xb8\xff\x00(\x03\x90\x9e(\xcf\xea\x00\xb2\x8c\xc8\xe4Pr\xe8\x96/\xf6A\x8c\xff\x00\x92\x7f\x81\xae`d\xec\xac2\xe5\xe9\xf77\xc7W1\xe6\x82\x9b\xcb\xd3\r\xe2\x95[\xd9\x87\x13\xfcs\x03\'cH}2\x07\xde\xe4GZ:\x84\x14\xdam\xf4_j\x16#\xc5~!\xf8f\xbf.\x8749\xc4\xfd\xeeLs\xc2\\\x8a\x10\x82\r\x0f\\\xc4-\xce\xc0\xad`KG\x15v\x04\xb5\x81]\x81Z\xc0\xae\xc0\x96\x8e\x05k\x02\xb5\x81.\xc5Z\xc0\x96\x8e\x05k\x02]\x81Z\xc0\x97`V\xb2)k\x15vEZ\xc0\x97`U\xb8\x15\xd8\x12\xd6\x05v\x04\xb5\x80\xabX\x12\xd6\x05v\x05k"R\xd6\x05v\x04\xa1\xaf\xed\xfd{W@*\xc0rO\x98\xcb\xb4\xd9x&\x0b\x85\xda\x1a\x7f\x17\t\x8f^c\xde\xc6\xc6t/\x0c\xb8aW\x0cU\xbc*\xb8b\x96\xf0\xabxU\xb1\x8a[\xc2\xad\x8cU=\xf2\x96\x89\xfaSR\x06E\xad\xa5\xbd\x1e\x7f\x03\xfc\xa9\xfe\xcb\xf5fv\x87O\xe2O\x7f\xa4sn\xc3\x8f\x88\xf9=C:G`\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xaar\xdb\xc10\xfd\xecj\xfe\xe4\x02r\xac\x98a?\xa8\x02\xce3\x94y\x14\x14\xda\r\x93\xfd\x8eQ\x1fcQ\xf8\xd702\xf6F\x19r\xb8\xfe<\xdc\x88\xeb&9\xee\x81\x9b\xcb\xb7\x0b\xbcR+\x8f\x03\xf0\x9f\xe3\x9a\xfc\xbd\x8b1\xf4\x90~\xc7":\xe8\x9eb\x903i\xd7\xb0\xfd\xb8Z\x83\xb8\x1c\x87\xde+\x9a\xec\xba,\xd0\xe7\x12\xe4\xc3<%\xc8\xa1\xb3\x15\xb5\xac\tv\x05k\x02\xbb\x02Z8\x15\xac\n\xd6\x04\xbb\x15k\x02Z8\x15\xac\tv\x05k\x02]\x81Z\xc8\xa5\xacU\xd9\x15k\x02]\x81V\xe0W`KX\x15\xd8\x12\xd6\x02\xad`KX\x15\xd8\x15\xac\x89KX\x15\xd8\x12\xd1\xc0\xac{Q\xb7\xf4n\xdc\x0f\xb2\xff\x00\x12\xfd?\xdb\x9b\xfd&^8\x0e\xf1\xb3\xc4\xf6\xa6\x9f\xc2\xccGC\xb8C\x0c\xcau\xee\x18\xabxUp\xc5-\xe1V\xf0\xabc\x14\xb7\x85W\xc3\x14\x92\xc8\x91F\xa5\xe4v\n\x8a:\x92M\x00\xc3\x10I\xa0\x9a\xb7\xady\x7fG\x8fJ\xd3c\xb6\x142\x9f\x8ew\x1d\xdc\xf5\xfa\x07A\x9dN\x97\x00\xc5\x00:\xf5v8\xe1\xc2)1\xcc\x86\xc7b\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1U)\xad-f\xfe\xf6%c\xe2F\xff\x00\x7f\\\xa7&\x9b\x1c\xfe\xa8\x82\xce9e\x1eE\x037\x97\xec\x9fx\xcbD|\x01\xa8\xfcw\xfcs]\x97\xb1\xb1K\xe9\xb8\xb90\xd6\xccs\xdd\x017\x97n\xd7\xfb\xa7Y\x07\x87\xd9?\x8e\xdf\x8ek\xb2\xf6.A\xf4\x91/\xb3\xf1\xf3ra\xae\x89\xe6)\x015\x85\xe4?\xde\xc2\xca\x13\x8ef\x07\xa1X2\xc6\x96\xf0\xaa\xe1\x8a[\xc2\xad\xe1V\xc6)F\xe9\x1ad\xfa\x96\xa1\x15\x9c=d?\x1bvU\x1fi\x8f\xc8e\xd80\x9c\x93\x11\x0c\xe1\x1e#O]\xb4\xb5\x86\xd6\xda;h\x17\x8cQ(T\x1e\xc3:\xb8@D\x009\x07d\x05\nU\xc9%\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xaa\x1a}6\xc6\x7f\xef!RO\xed\x01\xc4\xfd\xe2\x99\x89\x97C\x87\'\xd5\x11\xf7}\xcd\xd0\xcf8\xf2(\t\xfc\xb3l\xdb\xc3#F|\x0f\xc4?\x81\xcdn^\xc1\xc6~\x99\x18\xfd\xaeL5\xf2\x1c\xc5\xa5\xf3\xf9sP\x8fx\xf8\xca?\xc94?q\xa6k3v&x\xfd5/\xc7\x9b\x95\rt\x0f=\x92\xe9\xadn`?\xbd\x89\x93\xdd\x81\x03\xef\xcdf]>L\x7fTHr\xa1\x922\xe4mK(f\xd6\x04\xbb\x02\xb5\x91KX\xab\xb2*\xd6\x04\xbb\x02\xad\xc0\xae\xc0\x96\xb0+\xb0%\xac\x05Z\xc0\x96\xb0+\xb0+Y\x12\x96\xb0+\xb0%\xa3\x81Z\xc0U)\xd6`\xa3\xac\xc0l\xdf\x0b|\xc7L\xdbvn[\x06/5\xdb\xbaz\x90\xc8:\xec\x7fBX3h\xf3\xcd\xe1U\xc3\x14\xb7\x85[\xc2\xad\x8cR\xf4\xaf$h\x7fP\xd3\xfe\xb72\xd2\xea\xec\x06\xa1\xea\xb1\xf5U\xfaz\x9c\xe8\xbb;M\xc1\x0e#\xf5K\xees\xf0c\xa1}\xec\x976-\xee\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xc4\x02(zb\xa8I\xf4\x9d:o\xb7\x02\x82{\xaf\xc2\x7f\xe1i\x98Y{;\x06Nq\x1f\r\xbe\xe6\xf8jrG\x91K\xe7\xf2\xb4\rS\x04\xcc\x9e\xcc\x03\x0f\xc2\x99\xab\xcb\xec\xfc\x0f\xd1"=\xfb\xfe\xa7*\x1d\xa3.\xa1.\x9f\xcb\xba\x94u(\xab(\xff\x00 \xef\xf7\x1af\xaf7bj!\xc8\t{\xbfk\x95\rv3\xcfd\xbek{\x88M&\x8d\xa3?\xe5\x02?^j\xf2\xe0\x9e3R\x04{\xdc\xa8\xce2\xe4mK*f\xec\x8a\xb5\x81.\xc0\xabp+\xb0%\xac\n\xec\tk\x01V\xb0%\xac\n\xec\n\xd6D\xa5\xac\n\xec\th\xe0V\xb0\x15Q\xbb\x84M\x03\xc7\xdc\x8f\x87\xe6:e\xba|\xbc\x13\x12q\xb5\x9a\x7f\x17\x11\x8f^\x9e\xf6;B\r\x0f\\\xe9^\x08\x87aU\xc3\x14\xb7\x85[\xc2\xa9\xf7\x93\xf4?\xd2z\x90iV\xb6\x96\xd4y\xab\xd1\x8f\xec\xa7\xd3\xfa\xb37A\xa6\xf1\'\xbf\xd2\x1b\xf0\xe3\xe2>OR\xce\x99\xd8;\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xe2\xa1\x81\x0c\x01\x07\xa88\x08\x04QPPS\xe8\xbal\xdfj\x05S\xe2\x9f\x0f\xea\xcc\x0c\xdd\x95\xa7\xc9\xce {\xb6\xfb\x9c\x88j\xb2G\xaa]?\x95b50NW\xc1\\\x03\xf8\x8af\xab7\xb3\xb1?D\x88\xf7\xb9P\xed\x13\xfcA.\x9f\xcb\xba\x9cU!\x04\xa3\xc5\r\x7f\x03C\x9a\xac\xdd\x89\xa8\x87!\xc5\xeer\xe1\xae\xc6z\xd2_,3D\xdceFF\xf0`G\xeb\xcd^LS\x81\xa9\x02\x0f\x9b\x95\x19\x89r6\xa5\x952v\x04\xb5\x81]\x81-`*\xd6\x04\xb5\x81]\x81Z\xc8\x94\xb5\x81]\x81-\x1c\n\xd6\x02\xaddR\x91\xeapzWD\x81\xf0\xc9\xf1\x0f\x9f|\xe849x\xf1\x8e\xf1\xb3\xc6v\xbe\x9f\xc3\xccH\xe5-\xff\x00Z\x133]Z\xe1\x8a[\xc2\xab\xe1\x8aI\xa5H\xa2R\xf2H\xc1QGRI\xa0\x19(\xc4\x93A [\xd7t\r"=+L\x8a\xd5hd\xfbS\xb8\xfd\xa7=O\xf0\x19\xd5i\xb0\x0cP\x11\xf9\xbb\x7ff\x0f\xf99\xfc\xff\x00X\xfdN\\;O\xf9\xc3\xe4\x95\xdch\x1a\xac5\xac\x05\xd4~\xd4\x7f\x17\xe07\xfc3Q\x9f\xb1u8\xff\x00\x86\xc7\x96\xff\x00\xb5\xcc\x86\xb7\x14\xba\xd7\xbd\x00\xe8\xe8\xc5]J\xb0\xea\x08\xa1\xcd\\\xe0bh\x8a.P \xf2[\x90)k\x02\xbb\x02Z8\x15\xac\x05Z\xc8\xa5\xa2\x01\x04\x1d\xc1\xea1\xba6\x82\x01\x14X\xf5\xc4&\x19\x9e3\xfb\'o\x97l\xea0d\xe3\x80\x97{\xc0\xea\xb0\x1cY%\x0e\xe2\xb0e\xad\x08\xed\x17K\x9bT\xd4b\xb3\x8bnf\xb2?\xf2\xa0\xfbM\x97\xe9\xf0\x9c\x93\x11\x0c\xf1\xc3\x88\xd3\xd7\xedm\xa1\xb5\xb7\x8e\xde\x15\xe3\x14J\x11\x17\xd8gY\x08\x08\x80\x07 \xec\xc0\xa1J\xb9$\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5VK\x04\x13/\x19cY\x17\xc1\x80?\xaf+\xc9\x86\x19\x05H\t{\xc5\xb2\x8c\xccy\x1aKn<\xb3\xa5MR\xb1\x98X\xf7\x8c\xd3\xf05\x19\xa9\xcf\xd8\x1al\x9c\x81\x89\xf2?\xae\xc3\x97\r~X\xf5\xbfzYq\xe4\xf9EM\xbd\xc2\xb7\x82\xb8+\xf8\x8a\xe6\x9f?\xb2\xf2\x1f\xdd\xcc\x1f~\xdf\xad\xcb\x87j\x0f\xe2\te\xc6\x85\xaa\xc1R\xd6\xec\xcb\xfc\xc9\xf1\xff\x00\xc4jsM\x9f\xb1\xf5X\xf9\xc0\x9fv\xff\x00s\x99\rf)r(\x06R\xa4\x86\x14#\xa89\xac \x8d\x8b\x94\n\xdc\x89V\xb2)v\x02\xa9f\xb1\x07\xd8\x98\x7f\xaa\xdf\xc36\xdd\x97\x9b\x9c\x0f\xbd\xe7;{O\xcb \xf7\x1f\xd0\x96\x8c\xdc<\xe3\xd3\xbc\x8f\xa1~\x8f\xd3\xbe\xb52\xd2\xee\xec\x065\xea\xb1\xf5U\xfaz\x9c\xe9;;M\xe1\xc3\x88\xfdR\xfb\x9c\xfd>>\x11}K$\xcd\x8b\x90\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xaaS\xda\xdbN)4I \xff\x00)A\xfdyNm><\x82\xa7\x11/xg\x0c\x92\x8f#Im\xc7\x95\xb4\xa9jQZ\x16\xff\x00 \xed\xf75sO\x9f\xd9\xcd4\xf9\x03\x0fq\xfdv\xe5\xc3\xb4r\xc7\x9e\xe9]\xcf\x93\xaeV\xa6\xdeu\x90x8*\x7f\x0eY\xa6\xcf\xec\xaeA\xfd\xdc\xc4\xbd\xfb~\xb77\x1fjD\xfdB\x92\xab\x9d\x13T\xb7\xa9\x92\xdd\xca\x8f\xdaO\x8c\x7f\xc2\xd74\x9a\x8e\xc8\xd4\xe2\xfa\xa0k\xcb\x7f\xb9\xcc\xc7\xab\xc7.RK\xaea\x12\xc4\xf16\xd5\x14\xf9\x1c\xc2\xc3\x90\xe3\x98\x97ru8F\\f\x1d\xe3\xfb\x1a\xf2n\x80u-S\x9c\xeb\xfe\x8bhCL\x0fFj\xfc)\xfd}\xb3\xb8\xec\xed?\x8b+\xfe\x10\xf0\xf8\xb0\x93*=\x1e\xa5\x9d;\xb0v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\x83\xbe]!\xbe\x1b\xdfB\xa7\xa7\xaaT\x1f\xa0\x9d\xf3_\xac\x8e\x94\xed\x9b\x83\xfc\xea\xfd-\xf8NQ\xf4q|\x1d\xa5C\xa5E\x03\xae\x9ac0\xfa\x8cd10q\xea\x1aV\xa6\xa7~\x99v\x92\x18\xa3\n\xc5\\\x1eF\xfe\xd6\x99\x1b\x91\'\x9d\xef\xefFfR\x1d\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xae\xc5]\x8a\xbb\x15v*\xecU\xd8\xab\xb1Wb\xaf\xff\xd9' >>> assert HTTPResponse in a[29] >>> assert a[29].Transfer_Encoding == b"chunked" >>> assert a[29].Content_Type == b'image/jpeg; charset=utf-8' >>> assert a[29].Http_Version == b'HTTP/1.1' >>> assert a[29].Status_Code == b"200" >>> assert a[29].Reason_Phrase == b"OK" >>> assert len(a[29].load) == 33653 >>> wireshark_data = b'/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABAAAAAAAAAAAAAAAAAAAAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgCtwKdAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq84/OfzmdJ0caLZycdQ1JT6rKaGO3rRj/z0+yPaubTszTccuM8o/e8/wBva/wsfhx+qf2D9vL5pF5T8z6jPpFvcQXTo6jhMgaq802NV+zv1+nOV7VxT0uplGJIidx7j+rk9n2DqYa3RwnMAzHpl7x+sUfiyq2876pFQTpHcDuSODfeu34Zjw7TyDnRc7J2VjPIkJva+edMkoLiOS3buftr943/AAzMh2njPMEOFk7KyD6SCnFpq+mXdBb3MbseiVo3/AmhzMx6jHPkQ4OTTZIfVEovLml2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoTV9Vs9J0y51K9fhbWqGSQ99ugHux2Hvk8eMzkIjmWrPmjigZy5B8r+Y9evNe1q61W7P724eqpWoRBsiL7Ku2ddhxDHARHR811WplmyGcuZTvyBqXpXktg7fBcDnED/Og3A+a/qznPajR8eEZRzhz9x/a9d7EdoeHqJYCdsg2/rD9Yv5BnZzgn1VrAlrFUba61qtpT0LqRAOik8l/4FqjLoanJDkS0ZNLjn9UQm9r581KOguIY51HcVRj9IqPwzMh2pMfUAXCydk4z9JI+1ObXzzpEtBOslu3csOS/etT+GZsO08Z52HBydlZRyqSc2up6ddgfVrmOUn9lWHL/geuZkM0J/SQXByYJw+oEInLWp2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvD/zu86fW75fLdm9ba0YPfMp+1PT4U27IDv/AJXyzf8AZem4R4h5nl7njfaHX8UvBjyjz9/d8Pv9zyrNu80r2d1LaXcVzEaSQuHX3oehp2OV5sUckDCXKQpt0+eWHJHJH6okEfB67b3EdzbRXERrHKgdD7MKjPJNRgliyShLnE0+/aTUxz4o5I/TMAr8oclrFXHAlrFWjilb3wKmFp5g1m0oIbuQKOiMea/c1cyMeryQ5SLjZNHinziE4tPzAv0oLq3jmX+ZCY2/42H4Zm4+1Zj6gD9jhZOx4H6SR9qdWnnnRJqCUyWzf5a1X715ZmY+08UudhwMnZWWPKpJ1a6hY3QrbXEc3sjAn6QN8zYZYT+kguDkwzh9QIV8sa3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWN/mB5ti8seXZr0EG9l/c2MZ3rKw+1TwQfEfu75laPT+LOunV1/aetGnxGX8R2Hv/Y+YJZpZpXmlcySyMXkdjVmZjUkk9yc6sChQfOZSJNnmtwobxQz7yFqXrafJYufjtm5R/wDGNzX8Gr9+cL7U6PhyRyjlLY+8frH3PqPsN2jx4ZaeR3huP6p5/I/7plGcm941irjgS1irRxStwK0cVaOKWjgS4Eggg0I6EYqmVp5m121oI7t2UfsyfvB/w1cycetyx5S/S4uTQ4Z84j7k6tPzDu1oLu1SQd2jJQ/ceWZuPtaQ+oW4GTsaJ+mVe9O7PzxoNxQSSPbMe0qmn3ryH35m4+08UuZr3uDk7KzR5Di9yc217aXS8raeOZe5jYN+rM2GSMvpILgTxSh9QIVsmwdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirTMqqWYhVUVJOwAGKkvmj8zfOLeZvMUkkLE6ZZ1hsV7EA/FJ83P4UzqdDpvChv9R5vnva2u/MZbH0R2H6/ixEZmuqbxVvFCaeW9S/R+sQTMaROfSmJNBwfapPsaH6M13auj/MaeUP4uY94/FO47B7Q/KauGQ/TdS/qnn8ufwepZ5U+6NYpccCWsVaOKVuBWjirRxS0cCXYFWnFLRxV2BLau6MGRirDowNCPuxBI5IIB5ppZ+bNftaBLtpFH7MtJB97b/jmXj1+aP8V+/dxMnZ+GfONe7ZO7T8x5hQXloreLxMV/4VuX68zcfa5/ij8nAydij+GXzTuz87eX7igaZrdj+zMpH/AAw5L+OZ2PtLDLrXvcDJ2Xmj0v3J1Bc21wnO3lSZP5o2DD7xmbGcZCwbcCcJRNSFKmSYuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5p+dfnP9F6QNCs5KX2pKfXI6pbVof+RhHH5Vza9mabjlxnlH73n+39f4ePw4/VPn7v2/reCZ0LxLhihvFW8UN4q9Q8sal9f0eGRmrNEPSm3qeSdz8xQ55l29o/A1Mq+mXqHx5/a+1+y/aH5nRxJPrh6T8OXzFfFNM0z0TjgS1irRxStwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtxyyxOHido3HRlJB+8YRIg2FMQRR3Tiz85eYbWgFyZkH7MwD/APDH4vxzMx9o5o9b97hZOzcE/wCGvdt+xPLP8yTsL2z+bwt/xq3/ADVmdj7Y/nR+Tr8vYn8yXz/H6E8svOnl66oPrPoOf2ZgU/4b7P45nY+0cMute9wMvZmeHS/d+LTmKaGZA8MiyIejIQw+8ZmRkCLBtwZRMTRFL8kxdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQWs6vZaPpdzqd63C2tUMjnuadFX3Y7D3yeLGZyERzLTnzRxQM5cg+VvMOuXmu6zdareH99cvy41qEUbIg9lUAZ1+HEMcREdHzbVaiWbIZy5lL8saHDFDeKt4obxVk3kTUvQ1J7Nz+7ul+H2dASPvFfwznPabR+Jg4x9WP7jz/AEF7H2L7R8HVHEfpyiv84bj9I+IZ9nnj6444EtYq0cUrcCtHFWjilo4EuwKtOKWjirsCWjirWBLWKtHArRxS0cUtYFawJXw3FxbvzgleJ/5kYqfvGSjMx3BpjKEZCiLTqz88eYragM4uEH7Myhv+GHFvxzNx9p5o9b97g5eysE+le5PbL8zIjQXtmy+LwsG/4Vqf8SzOx9sj+KPydfl7DP8ABL5p9ZecfLt3QLdrE5/YmrHT6W+H8cz8faGGf8Ve/Z12Xs3PD+G/dum8ckciB42DoejKQQfpGZgIO4cIxINFdhQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8L/O/wA6G91FfLlnJ/oti3K9ZTs89Nk+UY/4b5Z0HZem4Y8Z5nl7njfaDX8c/Cj9Mefv/Z97yzNs823irhihvFW8UN4qqQTSQTRzRHjJEwdD1oVNRkckBOJieR2Z4ssscxOJqUTY94etWN3HeWcN1H9iZA4HhXqDTuOmeSazTHBlljP8J/s+x9+7P1kdTghljymL/WPgdlY5iua1irRxStwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFVa2vby1fnbTyQN4xsV/UclDJKJuJIYTxRmKkAU7s/P3mK2oHlS5QfszKK/8EvE/fmdj7VzR5ni97gZeyMEuQ4fcn1l+Z1o1Be2bx+LxMHHzo3Gn35n4+2on6o17nXZew5D6JA+9P7Lzb5dvKCO9RGP7EtYzXw+Og+7M/Hr8M+Uh8dnXZezs8OcT8N/uTZWVlDKQyncEbg5lg24ZFN4UOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVjH5ieb4/LHlya7Ug389YbCM71lYfaI8EHxH7u+Zej0/izrp1dd2nrRp8Rl/Edh7/2PmCSSSWRpZGLyOxZ3Y1JYmpJJ7nOrAp88kSTZaxYt4q4YobxVvFDeKuxQzjyFqXqW02nufihPqRD/ACGPxAfJv15xPtXo6lHMOvpP6Px5PpnsJ2jcZ6eX8Pqj7uv218yyw5xz6G1irRxStwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FKvaalqFm1bW5kgP/FblQfmAcnjzTh9JIasmGE/qAKfWX5ieYbegmaO6Uf78WjU+acfxzPx9r5o86l73X5exsMuVx937U/sfzP096Le2skB/mjIkX6a8D+vNhi7agfqiR9rrsvYUx9Egffsn9j5p8v3tBBfR8j0Rz6bfc/Gv0Zn4tdhnykPu+912XQZsfOJ+/wC5NQQRUbg9DmW4bsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVad0RGd2CooJZiaAAbkknEBBNPmP8AMrzk/mfzFJNEx/RtpWGwTxQH4pPnId/lQds6rRabwoV/Eeb592rrvzGWx9A2H6/ixQZmOsbxQ3irhihvFW8UN4q7FCYaFqJ0/VILmtIw3GXr9htm6eHXMLtHSDUYJY+pG3v6Oy7H150mqhl6A7/1Tsfs+16pWoqOmeTEEGi+9xkCLHJrAyaOKVuBWjirRxS0cCXYFWnFLRxV2BLRxVrAlrFWjgVo4paOKWsCtYEtHFLWKtYEtYq7Aq04paOBXYpawKtxS7ArRxSirLV9UsSDaXUsIH7KOQv0r0OW49Rkh9MiGnLp8eT6ogsgsvzJ1+CguBFdL3Lrwb70oPwzPxdsZo86k67L2Jhl9Nx/HmyCy/M/SZaC8t5bZj1ZaSIPp+FvwzY4u2sZ+oEfa63L2FkH0kS+xkFj5k0G+p9WvomY9EZuD/8AAvxb8M2GLWYp/TIOty6LNj+qJTLMlxXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8x/O3zp+jdKXQLOSl7qK1uip3S26Ef89Dt8q5tey9NxS4zyj9/wCx57t7XeHDwo/VLn7v2vBM6F4tsYq3ihvFXDFDeKt4obxV2KG8Vek+UtR+uaNEG/vbb9y/yUfCf+Bpnm3tFo/B1JkPpn6vj1+3f4vs3sh2h+Y0Yifqxek+7+H7NvgnOaF6lo4pW4FaOKtHFLRwJdgVacUtHFXYEtHFWsCWsVaOBWjilo4pawK1gS0cUtYq1gS1irsCrTilo4FdilrAq3FLsCtHFLWBLWKtHArRxSjrHXtZsKC0vJYlHRAxKf8AAGq/hl+LVZMf0yIcfLpMWT6ogsgsfzO1yGguoorte5p6b/evw/8AC5sMXbWWP1AS+z8fJ1uXsLFL6SY/b+PmyGx/M/Q5qLdRS2rHq1BIg+lfi/4XNji7axH6gY/b+Pk63L2Flj9JEvs/HzZFY6/ot/QWl7DKx6IGAf8A4A0b8M2GLVYp/TIF1mXSZcf1RIR+ZDjuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoHXNZstF0m61S9bjb2qF28WPRVX3ZqAZZixmchEcy06jPHFAzlyD5U1/W73XNYutVvDWe6csV6hV6Ki+yrQDOuw4hjiIjo+b6nUSzZDOXMpfljQ2MVbxQ3irhihvFW8UN4q7FDeKsh8laiLXVfQc0iuxw3oBzXdP4j6c0HtHo/G0xkPqx7/Dr+v4PV+x3aP5fWCBPoy+n4/w/bt8XoOebvsjRxStwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FLWBVuKXYFaOKWsCWsVaOBWjilrArRxVrFLRwJTKx8y69YUFrfSoq9Iy3NB/sH5L+GZOLWZcf0yLi5dDhyfVEMk0z8ztaDrFdW0V1/lLWJvpI5L/wubLB21lupAS+x0uu7JwYoHJxGIHx/HzelWtzFc20VxEaxzIHQ+zCudLCYlESHIvOSjwmlTJMXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8H/O/wA6fpDVF8vWclbPT25XZXo9xSnH5Rg0/wBavhnQdl6bhjxnmeXueN7f13HPwo/THn7/ANjy3Ns863ihsYq3ihvFXDFDeKt4obxV2KG8VXRyPHIskbFXQhkYdQQagjAQCKKYyMSCNiHq2m3yX1hBdpsJVBYDsw2YfQds8l7Q0h0+eWPuO3u6fY++9k68avTQzD+Ib+/kftRJzDdktwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FLWBVuKXYFaOKWsCWsVaOBWjilrArRxVrFLRwJdiqY2EHBPUYfE/T2GZeCFC3hfaLtDxMnhR+mHPzl+z9b0nyBqXrWEli5+O2blH/wAY3Nfwav3jOj7MzXEwPT7j+11+OXFjB7tj8OX2fcyrNol2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVi35j+cI/K/lyW5jYfpC5rDYIf8AfhG708EG/wBw75l6LTeLOug5uu7U1o0+IkfUdh+PJ8wPI8kjSSMXdyWdiakk7kk51YFPnpN7lbihvFDYxVvFDeKuGKG8VbxQ3irsUN4q7FWZ+Q9Rqs+nud1/ewg16HZx99D9+cd7V6OxHMP6p/R+l9F9g+0aM9NI/wBKP3S/Qfmy45xL6WtwK0cVaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FLWBVuKXYFaOKWsCWsVaOBWjilrArRxVrFLRwJVrSD1Zd/sLu39MsxQ4i6ntjtD8thJH1y2H6/gmozPfOLTXy3qX6O1iCdm4wsfSnPQcH2JPspo30ZkaXL4eQS6dfd+N3L0cvUY/zvv6fq+L1TOncl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KtSSJGjSSMERAWdiaAAbkk4gWgmhZfL/5kecZPNHmOW5jY/o62rDYIa09MHd6eMh3+VB2zq9FpvChX8R5vn3amtOoykj6RsPx5sWzLda7FW8UNjFW8UN4q4YobxVvFDeKuxQ3irsVRmk3zWGowXQ3EbfGPFTsw/wCBOY2t0wz4ZYz/ABD+z7XN7N1p0uohmH8B+zqPiHqisroGUgqwqpG4IOeRzgYyMTzD9AYskZxEom4yFj3FrIM2jirRxS0cCXYFWnFLRxV2BLRxVrAlrFWjgVo4paOKWsCtYEtHFLWKtYEtYq7Aq04paOBXYpawKtxS7ArRxS1gS1irRwK0cUtYFaOKtYpdQk0G5PQYolIAWeSa28IiiC9+rH3zOxw4Q+a9qa46nMZfwjaPu/aqjLHWrsUg1u9Q8q6l9f0WF2NZof3Mx6nkgFCf9ZaHOk0Wbjxi+Y2Lt5HiqQ/i3/X9qb5lsHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXlv54edP0fpa+XrOSl5qC8rsqd0t604/OQin+rXxzbdl6bilxnkOXved7f13BDwo/VLn7v2vBs6B41vFXYq3ihsYq3ihvFXDFDeKt4obxV2KG8VdireFD0LyfqP1rSFidqy2p9Miorw6oafLb6M869ptH4Wo4x9OTf49f1/F9h9i+0fH0nhyPqxGv83+H9I+CeZzb2DRxVo4paOBLsCrTilo4q7Alo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFW4pdgVo4pawJaxVo4FaOKWsCtHFWsUouxgq3qsNhsvz8cvwws28v7R9ocEfBid5fV7u74/d70dmU8U2MKrsUsm8ial9X1NrN2pHdr8NenqJuPvFfwzY9nZeHJw9Jfe5+llcTHu3H6f0fa9BzfNrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVS/wAwa3ZaHo91qt4aQWqFyvQs3RUX3ZqAZZhxHJIRHVo1OeOHGZy5B8p67rV7rer3WqXrcri6cuwHRR0VF9lWgGddixCEREcg+c6jPLLMzlzKAyxobxV2Kt4obGKt4obxVwxQ3ireKG8VdihvFXYq3hQnnlDUfqmrJGxpFdfumG9OR+wafPb6c0nb+j8fTGvqh6h8Of2PS+yfaP5bWxs+jJ6T8eX2/Zb0LPMX2xo4q0cUtHAl2BVpxS0cVdgS0cVawJaxVo4FaOKWjilrArWBLRxS1irWBLWKuwKtOKWjgV2KWsCrcUuwK0cUtYEtYq0cCtHFLWBWjirccZkcKO/fDEWaaNXqY4MZyS5D8UmqKFUKNgNhmfEUKfL8+eWWZnLnJdhamxhVdilUgmkgmjmiPGWJg6HwZTUfjkgSDY5hsw5OCYl+K6/Y9csLyK9sobuL7EyBwOtCeoPuDtnU4sgnESHV2U40aV8sYuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvA/zu86fpLVl0CzkrZac1boqdnuehH/ADzG3zrnQ9l6bhjxnmfueM7e13iT8KP0x5+/9jzDNq8+7FDeKuxVvFDYxVvFDeKuGKG8VbxQ3irsUN4q7FW8KFyMVYMpIYGoI6g4Ct09Q0i+F9p0F1+06/GOlHGzfiM8o7V0f5fUSh05j3Hl+p977C7Q/N6SGX+Kql/WGx/X8UWc1ztmjilo4EuwKtOKWjirsCWjirWBLWKtHArRxS0cUtYFawJaOKWsVawJaxV2BVpxS0cCuxS1gVbil2BWjilrAlrFWjgVo4pawK0cVR1nDwTmftN+AzKwwoW8L7QdoeLk8OP0Q+0/s5fNEjL3nW8VbGFV2KWxhVnH5f6lzt59Oc/FEfVhH+QxowHybf6c3HZmXYwPTcfp/Hm7PFLixg9Y7fq/V8GXZtkuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVif5l+ck8r+XJJ4mH6Suqw2CHrzI+KSnhGN/nQd8zNFpvFnX8I5ut7U1v5fESPqOw/X8HzCzu7s7sWdiSzE1JJ3JJOdUA+fE21irsUN4q7FW8UNjFW8UN4q4YobxVvFDeKuxQ3irsVbwobGBWWeRdQ4yz2DnZ/3sXT7Q2YeO4p92cl7V6PixxzDnHY+48vt+97/2D7R4MstPI7T9UfeOfzH+5Zgc4R9SaOKWjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FLWBVuKXYFaOKWsCWsVaOBWjilrAqrbRepJv8AZXc5PHCy6ntntD8th2+uWw/X8EwGZr5y2MKt4q2MKrsUtjCqP0TUTp2qW92T+7RqTDxjbZvuG+XYMvhzEu77nK0c6nw/ztv1fb9j1cEEVHTOocp2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbLJHFG8srBI4wWd2NAFAqSSewwgWgkAWXy7+YvnCTzR5kmu1JFhBWGwjO1IlP2iP5nPxH7u2dVo9P4UK69Xz3tPWnUZTL+EbD3ftYuMy3Xt4q7FDeKuxVvFDYxVvFDeKuGKG8VbxQ3irsUN4q7FW8KGxgVE6feSWd7DdJ9qJg1OlR3H0jbKdTgjmxyxy5SFOTotXLT5o5Y84EH9nx5PUY5EljSSMhkcBkYdCCKg55DlxSxzMJc4mn6DwZo5ccZx3jIAj4tnK25o4EuwKtOKWjirsCWjirWBLWKtHArRxS0cUtYFawJaOKWsVawJaxV2BVpxS0cCuxS1gVbil2BWjilrAlrFWjgVo4paAJNB1PTFjKQiCTyCYwxiOML37n3zLxxoPmvamuOpzGX8PIe5Uyx1zYwpbxVsYVXYpbGFW8KvSvJ2pfXNFjRjWa1/cv8lHwH/gafTnQaDLx4wOsdv1O2lLjAn/O+/r+v4p3maxdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiryr88vOv1HTl8uWclLu+Xnesp3S3rsnzkI/wCB+ebbsvTcUuM8hy97zvb2u4IeFHnLn7v2vCM6B45wxVvFXYobxV2Kt4obGKt4obxVwxQ3ireKG8VdihvFXYq3hQ2MCtjChnnk3UDcaabdzWS1biOv2G3Xr9Izz72p0fBmGUcp/eP2V9r637Ddo+LpjhkfViO39U/qN/Ynxzl3uGjgS7Aq04paOKuwJaOKtYEtYq0cCtHFLRxS1gVrAlo4paxVrAlrFXYFWnFLRwK7FLWBVuKXYFaOKWsCWsVaOBWjilEWkW/qH5Ll2KPV5b2j7Q4Y+DHmfq93d8fxzRYzIeLbwq2MKW8VbGFV2KWxhVvCrIPJOpfVNXEDmkV4PTP+uN0P61+nM3QZeDJXSW36vx5udpJWDD4j9P2b/B6LnQNzsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqXeYtdstB0W61W8P7m2TlxrQux2RB7sxAy3DiOSQiOrRqdRHDjM5cg+UNb1i91nVbnU71+dzdOXc9h2CrX9lRQD2zrcWMQiIjkHznPmllmZy5lB5Y0uGKt4q7FDeKuxVvFDYxVvFDeKuGKG8VbxQ3irsUN4q7FW8KGxgVsYUJv5Yv8A6nq8RY0jm/cyf7I7H/gqZqe2tH+Y00oj6h6h7x+sbO+9me0fymthI/RL0y9x/UaL0M55Y+6tHAl2BVpxS0cVdgS0cVawJaxVo4FaOKWjilrArWBLRxS1irWBLWKuwKtOKWjgV2KWsCrcUuwK0cUtYEtYq0cCtohdgo79ThAs04+s1UcGI5JdPt8keqhQAOg6ZmAU+YZ80sszOXOS4YWpvCrYwpbxVsYVXYpbGFW8Kro3dHV0Yq6EMjDqCDUH6Dj7mzFkMJCQ6PWdKv01DToLtaD1UBZR2cbMv0MCM6jBl8SAl3uznEA7cunu6IrLWDsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVfP/AOd3nX9KawNBs5K2GmsfrBB2kuaUP0Rg8fnXOh7M03BHjPOX3PGdu67xJ+HH6Y8/f+z9bzLNq6BvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKHpWh6h9f0yGcmstOM3SvNdiTTx655X21o/y+plEfSdx7j+rk+7+zfaP5vRwmT64+mXvH6xR+KOOal3zsCrTilo4q7Alo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFW4pdgVo4pawJaxVo4FRdvHxXkftN+rMjFGt3g/aDtDxcnhxPoh9p/ZyVsuefbGKt4VbGFLeKtjCq7FLYwq3hVsYqzLyBqW9xpzn/AIvh/BXH6j9+bbszLuYH3j9LssMuLH5x2+B5fp+xmWbdk7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqxD8z/Oi+V/LkkkDD9J3lYbBe4Yj4paeEYNfnTMzQ6bxZ7/AEjm6ztXXfl8Vj65bD9fwfMLMzMWYlmY1ZjuST3OdS8CS7ChvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKGTeSdQ9O6lsXPwzDnEK7c1G4A91/VnLe1Oj48IyjnDn7j+39L3XsL2j4WolgkfTlG39YfrF/IMyOefPrbsCrTilo4q7Alo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFW4pdgVo4pawJaxVfDHzep6DrkoRsuo7Z7Q/L4dvrlsP0n4fejBmU+dN4VbGKt4VbGFLeKtjCq7FLYwq3hVsYqi9LvnsNQgu1r+6cFwO6HZh9Kk5ZiyGEhLucnSzEZ0eUtvx7jResI6OiuhDIwBVh0IO4OdQDYsOYQQaLeFDsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq2aaKGF5pnEcUSl5JGNFVVFSST2AwgWaCJEAWeT5Z/MPzhL5p8yT3oJFjF+5sIztSJT9qn8zn4j93bOr0mn8KFder592lrDqMpl/CNh7mM5lOvbxVvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKFW0uZLa5juIz8cTBl60NOxp2OVZsUckDCXKQpv02olhyRyQ+qJBHweoQTRzwxzRmscqh0PswqM8g1OCWHJKEucTT9C6PVR1GGOWP0zAK/KHJWnFLRxV2BLRxVrAlrFWjgVo4paOKWsCtYEtHFLWKtYEtYq7Aq04paOBXYpawKtxS7ArRxS1gS4Ak0HU4sZzEQSdgEXGgRaffmTCNB807S1x1OYz/h5D3Lxk3Abwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCr0PyVqP1rSBbuay2Z9M77+md0Pyp8P0ZvezsvFj4esfu6fq+DtuLjiJ9/P3jn+v4sgzPYuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvJ/z087fU7BfLVlJS5vFD37Kd0g/ZTbvIev+T882/Zem4j4h5Dl73nO3tdwx8KPOXP3fteE5v3kXYobxVvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKHDArNvJd+JbF7Nj8duap0+w5r9NGrnB+1ej4ckcw5S2PvH7PufVfYLtHjwy055wPEP6p5/I/7pkWci+gLTilo4q7Alo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFW4pdgVo4pawJVoE/bP0ZZjj1eU9o+0OEeDHmd5e7oFfMh41sYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCqd+UdS+pazGrGkN1+5k8KsfgP/BbfTmXosvBkHcdv1fb97naSV3D4j3j9l/IPSM6FudirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqWeZdfsvL+iXWrXh/dWyVVK0LudkRfdm2y3DiOSYiOrRqtRHDjM5dHyfrGrXur6pc6nevzurqQySHtv0A9lGw9s67HjEIiI5B86zZpZJmcuZQmTanYobxVvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKHDAqZ+X7/wCo6pDKTxic+nMTQDi3cn2NDmu7W0f5jTyh/FzHvH4p3PYHaP5PWQyH6bqX9U8/lz+D0XPJ33xacCWjirsCWjirWBLWKtHArRxS0cUtYFawJaOKWsVawJaxV2BVpxS0cCuxS1gVbil2BWjilyqWan34gWXG1mqjgxHJLp9pRQAAoOgzJAp8wzZpZJmcvqK7JNbYxS3hVsYq3hVsYUt4q2MKrsUtjCreFWxireFWxXsaHsR1xbMczGQkOYeqaHqI1DS7e6JHqMtJQNqSL8LbfMbe2dLpsviYxLr+l2cwLscjuEdl7B2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV89/nb52/S+tDQ7OSun6WxExB2kuejH/AJ5/ZHvXOi7M03BHjPOX3PGdua7xMnhx+mH3/seaDNo6FvFXYobxVvFDhireKuxQ3irsVbxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFDeKHDArYxV6L5ev/rulQyMSZYx6UpNSeS9yT1qKHPMO39H4GplX0z9Q+PP7X3H2U7R/NaKNn14/Qfhy+Yr42mBzSPStHFXYEtHFWsCWsVaOBWjilo4pawK1gS0cUtYq1gS1irsCrTilo4FdilrAq3FLsCtHFKvEnEVPU5djjTwXb/aHjZeCP0Q+09f1KmWOgbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUss8hajwuJ9Pc/DMPVhH+Woow+lafdmy7Ny1Iw79/x+OjsMEuLHXWP3H9R+9m2blm7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWG/mp50Hljy25t3pql9ygsR3U0+OX/YA7e5GZuh03iz3+kc3Wdq63wMW31y2H6/g+YSzMxZiSxNSTuSTnUPBFsYUN4q7FDeKt4ocMVbxV2KG8VdireKGxireKG8VcMUN4q3ihvFXYobxV2Kt4UNjArYwobxQ4YFbGKsi8mXxiv3tGPwXC1X/AF03/wCI1/DOb9p9H4un4x9WPf4Hn+t7P2I7R8HV+ET6cor/ADhy/SPkzM55y+xtHFXYEtHFWsCWsVaOBWjilo4pawK1gS0cUtYq1gS1irsCrTilo4FdilrAq3FLsCro1qanoMlGNl0/bXaH5fDUfrlsP0lXGXvnjeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFKIsruSzvIbuPd4HDgeIHVf9kKjJQmYyEhzDfpsgjMXyOx937Ob1eGaOeGOaI8o5VDo3irCoOdPGQkARyLmyiQaPRfkkOxV2KuxV2KuxV2KuxV2KuxV2KuxVZPPDbwSTzuI4YlLyyMaBVUVYk+AGEAk0ESkALPIPlb8wfN83mnzJPf1Is4/3NhEduMKnYkfzP8AaOdXpNOMUAOvV8+7R1h1GUy/h6e5jYzKcFsYobxV2KG8VbxQ4Yq3irsUN4q7FW8UNjFW8UN4q4YobxVvFDeKuxQ3irsVbwobGBWxhQ3ihwwK2MVVIJXhmjmjNHjYOp67qajIzgJRMTyOzPFlljmJx2lE2PeHplrcx3VtFcR/YlUMBttXsadxnkOt0xwZpYz/AAn+z7H6G7O1sdVp4Zo8pxv49R8DsqHMVzXYEtHFWsCWsVaOBWjilo4pawK1gS0cUtYq1gS1irsCrTilo4FdilrAq3FLqVNMDGcxGJkdgFZRQUy+IoPmnaOtOpymZ5dPcvGScFvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWe+RtR9fTXs3NZLRvh/wCMb1K/caj5UzddnZbgY/zfuLtBLjgJfA/D9lfG2SZsUOxV2KuxV2KuxV2KuxV2KuxV2KuxV5F+e3nf6rZr5Ysn/f3SiTUWU7rDWqR/NyKn2+ebjsvTWfEPTk8529ruGPhR5nn7u74vC83zyTYxVsYobxV2KG8VbxQ4Yq3irsUN4q7FW8UNjFW8UN4q4YobxVvFDeKuxQ3irsVbwobGBWxhQ3ihwwK2MVbxQzDyZf8AO2ksnPxQnnGO/FuoHyb9ecR7WaOjHMOvpP6P0vqHsB2jcZ6aXT1R938X20fiyM5xj6O7Alo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFW4pVI1/a+7JwHV5T2j7QoeBHrvL9A/Svy145cMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUt4qm3ljUPqOsQSMaRSn0Zf9VyKH6GoflmTpcvBkB6Hb5/tczRy3MP533j8EfF6XnRN7sVdirsVdirsVdirsVdirsVdiqVeaPMNl5e0K61a7PwW6VSOtDJIdkQe7N/XLcGE5JiI6uPqtRHDjM5dHydq+q3uranc6lev6l1dSGSVvc9h4ADYDwzrseMQiIjkHzzNllkmZS5lCZNqbGKtjFDeKuxQ3ireKHDFW8VdihvFXYq3ihsYq3ihvFXDFDeKt4obxV2KG8VdireFDYwK2MKG8UOGBWxireKEfot99S1GGcmkYPGXr9htjsOtOuYXaOkGowSx9429/T7Xa9i686TVQy9Inf8AqnY/Y9EzyOUSDR5v0DGQkLHIuyLJo4q1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsUtYFaUVNMQLcXW6uOnxGZ6faVUZeA+ZZssskjKXMt4WtcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUt4q3QEEHoeuGkxkYkEcw9O8ual+kNIgmZuUyD05/HmmxJ/1hRvpzodJl48YJ58j+PtdrOj6hylv+PcdkyzJYOxV2KuxV2KuxV2KuxV2KuxV87/nZ52/TOtjRrOTlpulsVkKnaS56O3yT7I+nxzo+zdNwQ4j9UvueM7b13i5OCP0w+/8AY81zZuibxVsYq2MUN4q7FDeKt4ocMVbxV2KG8VdireKGxireKG8VcMUN4q3ihvFXYobxV2Kt4UNjArYwobxQ4YFbGKt4oXrgLKLPfLl79a0uPkayQ/un/wBiPhP/AANM819o9H4OpMh9OTf49f1/F9r9j+0fzGjESfXi9Pw/h+zb4JnnPvVtHFWsCWsVaOBWjilo4pawK1gS0cUtYq1gS1irsCrTilo4FdilrAq9RQe+WRDwXb3aHjZeCP0Q+09f1NjJuhbwquGKW8Kt4VbGKW8KtjFW8KtjClvFWxhVdilsYVbwq2MVbwq2MKW8VbGFWT+RtR9G/ksXPwXQ5Rj/AIsQV2/1k/Vmw7Oy8M+H+d94/Z9zsNNLigR/N3+B5/bXzLOc3TN2KuxV2KuxV2KuxV2KuxVhX5sedR5Z8tuLZ+Oq6hyhsqdUFP3kv+wB2/yiMztBpvFnv9I5ur7W1vgYtvrlsP1vmOpO53J6nOoeEaxQ3irYxVsYobxV2KG8VbxQ4Yq3irsUN4q7FW8UNjFW8UN4q4YobxVvFDeKuxQ3irsVbwobGBWxhQ3ihwwK2MVbxQvXAWUU+8q3ogv/AEWNEuAF7AcxuvX6R9Oc/wC0ej8bTGQ+qHq+HX7N/g9j7Hdofl9YIk+nL6fj/D9u3xZlnmr7K0cVawJaxVo4FaOKWjilrArWBLRxS1irWBLWKuwKtOKWjgV2KXKN64Yi3Tdt9ofl8VR+uew/SV4y189cMVbwquGKW8Kt4VbGKW8KtjFW8KtjClvFWxhVdilsYVbwq2MVbwq2MKW8VbGFVW3nlt547iI0lhYOnYVU1ofY98IkYmxzDdp8nBME8uvu6vVrS5iurWK5iNY5kDrXrRhXf3zpscxOIkORc+ceEkKuTYuxV2KuxV2KuxV2KqdxcQW1vLcXDiKCFWklkY0VVUVYk+wwgEmgxlIRFnkHyp5/83T+afMlxqJqtqv7qxiP7EKk8ajxb7R9znWaTTjFAR69Xz/tDVnPlMunT3MczJcJ2KG8VbGKtjFDeKuxQ3ireKHDFW8VdihvFXYq3ihsYq3ihvFXDFDeKt4obxV2KG8VdireFDYwK2MKG8UOGBWxireKF64CyirRO8bK6Eq6kMrDqCNwchIAii5GORiQRzD0e1aWewt7wxMkdwgZWIPEnoQCQK0IIzybtHRnT5pQ6A7e7o++dk68arTwy9ZR39/X7VxzBdk1gS1irRwK0cUtHFLWBWsCWjilrFWsCWsVdgVacUtHArsWM5iETKWwC4ZYBT5p2hrDqMpmeXTyDYyThOGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKtjCreKs38iah6lpNYOfit25xf6khqR9DV+8Zt+zctgw7v0/t+92cJccAeo2P6Ps2+DKM2auxV2KuxV2KuxV2KvH/z487m3t08rWUlJrgCXUmU7rH1SLb+f7Te1PHNx2XprPiH4PN9va2h4UeZ5/qeGZvnlG8VdihvFWxirYxQ3irsUN4q3ihwxVvFXYobxV2Kt4obGKt4obxVwxQ3ireKG8VdihvFXYq3hQ2MCtjChvFDhgVsYq3iheuAsop/5N8tT+Ytdt9OjqsJ+O6lH7EK/aPzPQe5zG1WcYoGTs+ztIdRkEBy6+59KW9na21pHaQxqltCgjjiA+EIooBTOUmeIkne30bHEQAEdgEBeeV9Bu6mS0RGP7cX7s/8LQH6cw8mhxT5x+WznY9fmhyl890jvPy5tmqbO7eM9klAcfevH9WYWTsiP8Mvm5+PtqX8Ufkkd55H1+3qUiW4Ud4mBP8AwLcTmDk7NzR6X7nYY+1cMuZ4feklzaXVs3C4heFvCRSp/HMGeOUeYpzoZIy3iQVE5BsaOKWsCtYEtHFLWKtYEtYq7Aq04paOBXDJRDyntH2hQ8CJ85foH6fk2Mm8euGFLhireFVwxS3hVvCrYxS3hVsYq3hVsYUt4q2MKrsUtjCreFWxireFWxhS3irYwq3iqYaFqH6P1WC5Y0irwnPb032JP+rs30Zdgy+HMS6dfd+N3M0cvVw/zvv6fq+L0/Okb3Yq7FXYq7FXYqlPmvzHZ+XNButWut1gX91HWhklbZEHzP3DfLsGE5JiIcfV6mOHGZno+TNU1O81TUrjUb1/UurqRpZX92NaDwA6AeGdbCAjERHIPnmXLLJIylzKFybW3irsUN4q2MVbGKG8VdihvFW8UOGKt4q7FDeKuxVvFDYxVvFDeKuGKG8VbxQ3irsUN4q7FW8KGxgVsYUN4ocMCtjFW8UL1wFlF9D/AJXeUf0BoKzXKcdSvwstxXqiU+CP6Aan3Ocxr9T4k6H0h9D7F0HgYrl9ctz+gMyzBdw7FXYq7FVskccilJFDoeqsAQfoOAgHYpBI3CUXnlDy/dVLWqxOf2oSY/wHw/hmJk7Pwy/hr3Obj7RzQ/iv37pHe/ltGamyvCvgky1/4Zaf8RzAydjj+GXzdhi7bP8AHH5JDe+SfMNtUiAXCD9qFg3/AApo34Zg5Ozc0el+52GLtTBPrXvSWe3uIH4TxPE/8rqVP3HMGUDE0RTnRnGQsG1I5FsaxVrAlrFXYFWnFLsXE12rjp8Rmfh5lrLA+Z5MkpyMpGyWxi1rhhS4Yq3hVcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUt4q2MKt4q31wpBp6P5W1E32jxFzWaD9zL41QChPzUg5vtFl48YvmNvx8HazPFUh/Fv+v7U3zLYOxV2KuxV2KvnP86vO/6c139E2cnLTNLYqSOklx0d/cL9lfp8c6Ps3TcEOI/VL7ni+2td4uTgj9MfvecZsnSuwobxV2KG8VbGKtjFDeKuxQ3ireKHDFW8VdihvFXYq3ihsYq3ihvFXDFDeKt4obxV2KG8VdireFDYwK2MKG8UOGBWxireKGfflH5POta2NRukrpunEOajaSbqifR9pvo8c1vaWp8OHCPql9zv+wOz/Gy8cvoh9p6D9L37Obe+dirsVdirsVdirsVdirsVWTQQzoY5o1lQ9UcBh9xyMoiQoi2UZmJsGkmvfJXl26qfq3oOf2oSU/4XdfwzDydm4ZdK9znYu1M8Ot+/8WkN5+WjbmyvQfBJlp/wy/8ANOYGTsb+bL5uwxdufz4/L8fpSC98meYrWpNqZkH7UJElf9iPi/DMDJ2dmj/Dfu3dji7TwT/ir37fsSaWKWJykqNG46qwKkfQcwpRI2LnxkCLG6zIpWnFLR8MkA8B272h4+Xgj9EPtPUuyTo2xiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKtjCreKrhhSyDyXqH1fVDbOaRXa8R/wAZEqV+VRyH3Zm6DLw5K6S+/wDFudpZXAx7tx+n9HyLPc3jY7FXYq7FWD/m352/w15baO1k46tqPKG0ofiRafvJf9iDQe5GZ2g03iz3+kOq7W1vgYqH1y5frfMedO8M3irsKG8VdihvFWxirYxQ3irsUN4q3ihwxVvFXYobxV2Kt4obGKt4obxVwxQ3ireKG8VdihvFXYq3hQ2MCtjChvFDhgVsYqidOsLrUL6CxtE9S5uXEcSDuzGn3ZGcxEEnkGeLFLJMRjzL6f8AK/l618v6HbaXb7+ktZpaUMkrbu5+Z6e22cjqMxyzMi+naLSR0+IYx0+0prlLluxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqVxaWtynC4hSZP5ZFDD7jkJ44yFSFs4ZJRNxJCSXvkTy7dVKwtbOf2oWI/wCFbkv4ZhZOy8Mule5z8Xa2eHXi97CfNnli20MRGO89Z5ieEDJRgo6sSD/DNLrdDHDVSu+jLWdvy8IxAqcutscGYLyTeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKtjCreKrhhSujkkjdJIzxkjYPG3gymqn7xhsjcc23Dk4JCX4rr9j1PT7yO9soLqPZZkDcfA91PuDtnSYsgnESHVz5xo0iMsYuxV2KvlT8ydc1fW/M9xfahbTWkX91Y286MhSBD8OzDq1eR9znUaAYxjAgRLvo3u8F2nlyZMplOJj3AitmLDM11zeKuwobxV2KG8VbGKtjFDeKuxQ3ireKHDFW8VdihvFXYq3ihsYq3ihvFXDFDeKt4obxV2KG8VdireFDYwK2MKG8UOGBWxir2X8k/J/pQv5lvE/eShotOVuydJJf9l9ke1fHNH2rqbPhj4vYeznZ9Dx5ddo/pP6HrGaV6x2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVTuLiG3gknmYJFEpd2PYKKnIykIgk8ggmhbxrXtYm1fVJrySoVjxhT+WMfZH9ffOR1Oc5ZmRdVknxG0vGY7BvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwqzDyJqFY59Pc7p++hH+STRx9DUP05tOzcvOHxH6fx5uyxy4sYPWO36v0j4MszaK7FXYqxvVLKH15YJY1khf4hG4DKVbtSlNjUZz+sgcWW47Xu7DCROFHdimp/lt5Nv6s+npbyHo9sTDT/Yr8H/AAuZGDtzVY+U+If0t/2/a4GfsHSZP4OE/wBHb7Bt9jE9T/JCE1bS9SZfCK5QNX/Zpx/4hm5we1h/ykP9L+o/rdLqPZIf5Of+mH6R+pimp/ld5xsAzC0F5GvV7Vg/3IeMh/4HN1p/aDSZNuLhP9Lb7eX2uk1Hs9q8W/DxD+jv9nP7GM3VneWkphu4JLeUdY5UZGH0MAc2+PLGYuJEh5bunyYpQNSBifPZRyxrbxVsYq2MUN4q7FDeKt4ocMVbxV2KG8VdireKGxireKG8VcMUN4q3ihvFXYobxV2Kt4UNjArYwobxQ4YFT/yT5Xn8ya/Bp6VW3H7y7lH7EK/aPzP2R7nMfVagYoGXXo53Z2iOpzCA5dfc+m7a2gtbeK2t0EUEKiOKNdgqqKAD5DOSlIk2eb6ZCAiBEbAKmBk7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwL8x/MH2dGt28HvCPvRP8AjY/Rmj7W1X+THx/U4WqyfwhgWaNwmxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwqjNKvzYahBd/sxt+9G+8bbP09jUe+WYsnBIS7vu6uVpJVPh6S2/V9v2PUAQRUbg9DnSOQ7FXYql+swc4FlHWI79fstt296Zgdo4uLHfWLkaadSrvSfNA7Fo4FawJUrm1trmJobmJJ4W+1HIodT8w1RkoZJQNxJB8mGTHGY4ZAEdx3YzqX5ZeTr7k31L6rI3+7LZjHT5JvH/wubbB7QavH/FxD+lv9vP7XUaj2e0mX+HhP9Hb7OX2MV1L8k2+JtM1IH+WK5Sn3yJ/zRm60/taP8pD4xP6D+t0mo9kDzxT+Eh+kfqYrqX5becLCpNibmMf7stiJa/JR8f8AwubvT9v6TL/Hwn+lt9vL7XR6j2f1eL+DiH9Hf7Of2Mdnt7i3kMVxE8Mo6pIpVh9BzbwnGQuJBHk6ieOUDUgQfNZkmDsUN4q3ihwxVvFXYobxV2Kt4obGKt4obxVwxQ3ireKG8VdihvFXYq3hQ2MCtjChvFDYwK+i/wArvJ/+HvL6yXKcdTv6S3VR8SLT4Iv9iDv7k5y/aGp8We30h9D7F7P/AC+G5fXLc/oDMswXcuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpfr+sQ6Rpc15JQso4wp/NIfsj+vtmPqc4xQMi15J8MbeMXFxNcTyTzMXllYu7HuWNTnISkZEk8y6omzazAhsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpbxVsYVbxVcMKW8KtjFXoHlDUPrWkJExrLaH0W/wBUfYP/AAO3zGbvQZeLHXWO36naylxAT/nff1/X8U7zNYOxVqRFkRkYVVgVYex2wEWKKsakjeKRo3+0hIO1K07/AE5y2bHwTMe522OXEAVhypm1gS7FWsirWKXYFQ93Y2V5H6V3bx3MX++5UV1+5gRlmLNPGbgTE+Rpry4YZBU4iQ8xbGdS/K/yheglLZrOQ7l7Zyv/AArc0+5c3Gn9o9Xj5y4x/SH6RR+102o9m9Jl5RMD/RP6DY+xi2o/kvcrybTdRST+WK4Qof8Ag05V/wCBzd6f2uif7yBH9U39hr73R6j2PkN8UwfKQr7Rf3MX1H8v/N1hUyae8yD9u3pMD70SrfeM3en7d0mXlMA/0tvv2dFqOwdZi5wJH9H1fdv9iQSRSROY5EKSLsyMCCD7g5tYyEhY3DqZRMTRFFaMkxbxV2KG8VdireKGxireKG8VcMUN4q3ihvFXYobxV2Kt4UNjArYwobxQ9B/KDyd+mda/Sl2ldO01gwB6ST9UX3C/aP0eOaztLU8EOEfVL7nf9gdn+Nl8SX0Q+0/jd77nNveuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5R558wfpTVDBC1bO0JSOnRn/af+A/tzl+0tV4k6H0xdZqMvEaHIMbzXNDeFWxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwq2MVTvyjqH1TV1jY0iux6TeHPrGfvqv8Assy9Fl4Mg7pbfq/V8XO0srBh8R+n7N/g9AzetjsVdiqUazBxlScCgk+Fug+IdPnUfqzT9p4uU/g5mlnzCWnNQ5rWBLsVayKtYpdgVrAl2KtYFccCULe6bp18nC9tYrlOwlRXp8uQOW4dTkxG4SMfcaac2nx5RU4iQ8xbGdS/K3ynd1aKGSyc94HNK/6r8x91M3Wn9p9Xj5kTH9Ifqp0mo9mNJk5AwP8ARP6DbF9S/Ju/Sradfxzj+SdTGflyXmD+GbzT+1+M/wB5Ax92/wCr9LotT7HZB/dTEv6233X+hi+o+R/NWngmfTpGQf7shpKtPH92Wp9ObzT9t6TL9OQX57fe6LUdh6vF9WMkeXq+5JGVlYqwKsDQg7EHNoDe4dURWxawobxQ2MVbxQ3irhihvFW8UN4q7FDeKuxVvChsYFbGFCK03TrvUtQt7C0T1Lm5cRxL7sep8AOpOQyTEImR5Bsw4pZJiEeZfUPljy/aaBoltpdtusK/vJO7yNu7n5n8Ns5HPmOSZkX03R6WODEMcen2lNMpcp2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVjPnvzB+jNM+rQNS8vAVQjqqdGb+A/szW9parw4UPqk4+oy8Iocy8pGcw61vFW8KtjFLeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKtjCreKrhhS3hVsYq2CwIKsVYbqw6gjcEfLFsxZDCQkOj0/Sb9b/ToLsbGRfjUdA4+Fx9DA50eDL4kBJ2M4gHbl09x5IvLWDsVUb2D17Z4x9qlU7fENxvlWfFxwMWcJcJBY5Wu+csRWztgbayKXYq1kVaxS7ArWBLsVawK44EtYFccCtYpaOBUHfaRpd+vG9tIbkdjKisR8iRUZfg1eXD/AHcpR9xcfPpMWb+8jGXvFsZ1D8q/K9zU26y2Tncek/Ja/wCrJz/AjN5p/arVw+rhmPMfqp0eo9lNJk+nigfI/rtjOoflBqsdWsLyK4XssoMTfLbmv4jN5p/bDDLbJCUfduP0F0Oo9js0f7ucZe/b9f6GM6h5P8zaeT9Z0+XgOskY9VKePKPkB9Ob7TdsaXN9GSN9x2PyNOh1PYurw/Vjl8Nx9lpQQQaHYjqM2Tq3Yq4YobxVvFDeKuxQ3irsVbwobGBWxhQ9o/JPycYLdvMt4lJZwY9PVhusfR5P9l0HtXxzQ9q6mz4Y6c3sfZzs/hHjS5n6fd3/AB/HN6vmmeqdirsVdirsVdirsVdirsVdirsVdirsVdirsVU7m5htreS4nYJDEpd2PYAVORnMRBJ5BBNCy8W17WJtX1Oa9l2DGkSfyxj7K/1984/U5zlmZF1OSfFK0AMoYN4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpbxVsYVbxVcMKW8KtjFW8KWV+RdQpJPp7nZv38PzFFcf8AET9+bHs7LRMPj+v9H2uwwy4sfnHb4H9t/Yy/Nsl2KuxVINTgMN29PsyfGvXv1FfnnPdoYuDJfSTsdNO413ITMByXYq1kVaxS7ArWBLsVawK44EtYFccCtYpaOBWsCuwJaxVrAlA6hoej6gP9NsoZ27O6AsPk32h9+ZWn1+fD/dzlH47fLk4mo0GDN/eQjL3jf5sZv/yr8uXFTatNZt2CNzT6Q/Jv+Gze6f2t1UPrEZj3Ufs2+x0Oo9kdJP6OKHuNj7bP2sbv/wAptZhqbO6hul8GrE5+g8l/4bN7p/bDTy/vIyh/sh+g/Y6HUexuoj/dyjP/AGJ/SPtY1f8AlfzDYVN1p8yKOrqvNB/s05L+Ob7T9raXN9GSJ8ro/I7ug1HZGqw/XjkPhY+YsJZmwda3irsUN4q7FW8KGxgVkPkbytN5l8wwWAqtsv728lH7MKkcqe7fZHucxtXqBigZdejndm6I6nMIfw8z7n05bwQ28EdvAgjhiUJFGuwVVFAB8hnJkkmy+lRiIgAcgvwMnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXn/5keYeTLo1u2wo94R49UT/jY/Rmh7W1X+THx/U4Oqy/whgWaNwmxhS3ireFWxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwq2MVbwpRFhePZXsF2m5gcMQOpXo4+lSRkoTMJCQ6fj7nI0s+GdHlLY/jyNF6f68PofWOY9Dj6nqV+HhSvKvhTOj4hV9HL4DddV+SYuxVA6xb+pbeoB8URr/sTs39fozC1+Ljx31G7fp58Mvekec47N2KtZFWsUuwK1gS7FWsCuOBLWBXHArWKWjgVrArsCWsVawJdgVrAlo4q7AlLr/y/omoVN5YwzOeshUB/+DFG/HM3T9p6jB/dzkB3Xt8uTg6ns3T5/wC8hGR763+fNjeoflXoM9WtJZrRuy19RPub4v8Ahs32m9sNTD+8EZ/Yfs2+x0Gp9jtLP6DKH2j7d/tY3qH5Wa7AC1pLFdqOi19Nz9DfD/w2b7Te2GmntkEofaPs3+x0Gp9jdTDfHKM/9ift2+1jt/5e1uwqbuxmiVRUyFSU/wCDWq/jm/03aWnz/wB3OMj3Xv8ALm8/qey9Tg/vMcgO+tvmNkuzNcBvChtQSaDcnoMCvpD8sPJ48ueXlNwnHU77jNeV6rt8EX+wB39yc5fX6nxZ7fSOT6H2NoPy+Hf65bn9A+H3swzBdu7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlvmHWotH0qW8ehcfDBGf2pG+yP4n2zH1WoGKBkfh72vLk4Y28XmnluJ5J5mLyysXkc9SzGpOcfKRkbPMupJs2syKGxhS3ireFWxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwq2MVbwpbUEmgFSegxVn36Lvf8Kfo/mfrPo8abdK19PpSnH4M3XgS8Dg61+B+h2XiS+r+Kvtrn7+vvTvM1DsVaZVZSrCqkUIPQg4qxqeIwzPE25Q0rtuOoO3iN85XUYvDmYu2xT4ogqeUtjWRVrFLsCtYEuxVrArjgS1gVxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEpXf+WtAv6/WrGF2OxkC8H/4NaN+ObHTdr6rD9GSQ8rsfI2HXansnS5/rxxJ76o/Mbscv/ys0eWps7iW2Y9FakiD6Dxb/hs3+n9s9RH+8jGf+xP6R9joNT7Gaee+OUof7Ifr+1f5L/LmLTfMsN9q9xHNZWv72BVDVaYH4Oa02C/a6nfNpk9rsGXHw1KEj38vs/U4Gk9kcuHMJyMZwjuO+/d+17PDd20/91Kr+wIr92UYtTjyfTIF388co8wq5cwdirsVdirsVdirsVdirsVdirsVdirsVdirsVeSeefMP6V1UxQNWytKpFTozftP9PQe2cr2jqvFnQ+mLrNRl4pbcgxwZr3HbxVsYUt4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpbxVsYVbxVcMKW8KtjFW8KWR+T9I+s3RvZVrDbn4AejSdv+B65n6HBxS4jyDdhhZtm+bhy3Yq7FXYqlOtwUaOcd/gb9Y/jmp7Uw2BMe5zNJPekrzSuc1kVaxS7ArWBLsVawK44EtYFccCtYpaOBWsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KomDVL+D+7nan8rfEPuNcy8XaGfH9Mj9/3tU9PCXMI+HzPcLQTRK48Vqp/jmxxdv5B9cQfdt+txZ9nxPI0mEHmLTpNnLRH/KFR94rmzxdt4Jc7j7/ANjjT0OQct0fDc28wrFIsn+qQc2WLPDJ9Mgfc40sco8xSplrB2KuxV2KuxV2KuxV2KuxV2KsW8/eYf0bpn1SBqXl4Cop1SPozfT0H9maztPVeHDhH1S+5xtTl4RQ5l5TnMOtbGKt4q2MKW8Vbwq2MUt4VbGKrhhS4Yq3hVcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUt4q2MKt4quGFLeFWxiqvZ2k13dR20IrJIaD28Sflk8cDIgBlEWaem2FlDZWkdtEPgjFK9ye5PzOdFjxiEQA58Y0KV8ml2KuxV2KqV1AJ7d4j1YfCT0BG4O3vleXGJxMT1ZQlRtjRBBoQQR1B2IzlJRINF24Ni2sglrFLsCtYEuxVrArjgS1gVxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEtgkGoNCOhwA0qKg1jUoaBZ2IHZ/iH41zNxdp6jHykfjv97RPS45cwmEHmmYbTwq3+UhK/ga5s8XtDIfXEH3bfrcWfZw/hKYQeYtNl2Z2iPg4/iKjNnh7b08+ZMff+xxp6HIPNMIp4JhWKRZB4qQf1Zs8eaExcSD7nFlAx5il+WMXYq7FXYq7FVK7uoLS2luZ2CQwqXkY9gBXIzmIxMjyCJEAWXimuavPq2pzXstRzNI0/kQfZX/PvnG6nOcszIuoyTMpWgMpYNjFW8VbGFLeKt4VbGKW8KtjFVwwpcMVbwquGKW8Kt4VbGKW8KtjFW8KtjClvFWxhVdilsYVbwq2MVbwq2MKW8VbGFW8VXDClvCrYxVm3k3SPRtzqEq/vZhSEHsnj/sv1Zt9BgocR5ly8MKFslzYt7sVdirsVdirsVSHVbf0rssBRJfjHhX9r8d/pzQdpYeGfF0k7HSzuNdyCzWOS1il2BWsCXYq1gVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpcrMrBlJVh0I2OESINhBFo2DW9Th6TFx4P8AF+J3zPxdrajHylfv3ceekxy6JjB5rcbTwA+LIafga/rzaYfaM/xw+X6v2uLPs0fwlMIPMGly0rIYmPaQU/EVH45tMPbemn/Fwnz/ABTiz0WSPS0wjlilXlG6uvipBH4Zs4ZIzFxII8nGlEjmKXZNi87/ADK8w85F0a3b4Uo92R3bqqfR1P0ZoO1tVZ8MfH9TgavL/CGBjNG4TeFLYxVvFWxhS3ireFWxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFVwwpbwqmegaU2pX6REH0E+Odv8kdvmemZGmw+JKunVsxw4i9IVVVQqgBVFAB0AGdAA5zeKuxV2KuxV2KuxVBatB6lozj7UXxj5D7X4b5h67Dx4z3jduwT4ZJDnMu0axS7ArWBLsVawK44EtYFccCtYpaOBWsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KtYEtHArWBLsCtYEuwK1kUtYq7Iq1gS7ArkkkjbkjFG8VJB/DJRnKJuJooMQeaOg1/VYRQTcx4SDl+PX8c2OHtnU4/4uIee/7XGnosculPOLw3Bu5jcMXnLsZWPUsTufpyzj4/V3vEZoGMzGXMFSGLW3hS2MVbxVsYUt4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpbxVsYVbxVcMKW1BJAAqTsAMIV6T5d0kabp6ow/wBIk+Oc+56L/sc3+lw+HCurnY4cITPMlsdirsVdirsVdirsVdirGbqAwXDxdlPw9fsncbn2zltXh8PIR0dthnxRBUcxm12BWsCXYq1gVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEsb8x2nC5W4UfDKKN/rL/AGZn6Wdiu55XtzT8OQTHKX3hJxmU6NvClsYq3irYwpbxVvCrYxS3hVsYquGFLhireFVwxS3hVvCrYxS3hVsYq3hVsYUt4q2MKrsUtjCreFWxireFWxhS3irYwq3iq4YUsl8m6P8AWLo30y1htz+7B/ak/wCbc2GgwcUuI8g34IWbZxm5ct2KuxV2KuxV2KuxV2KuxVK9bt6qlwo3HwP8uoP0H9eartTDcRPucvSTo13pPmidg7ArWBLsVawK44EtYFccCtYpaOBWsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KtYEtHArWBLsCtYEuwK1kUtYq7Iq1gS7Aq3ArsCUHqtr9ZsZIwKuByT/AFl/r0yzDPhkC4XaGn8XCY9eY94YeM2rwzeFLYxVvFWxhS3ireFWxilvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVXYpbGFW8KtjFW8KtjClvFWxhVvFURY2c15dx20IrJKaDwA7k/IZZjgZyAHVlGNmnqFjZw2VpHbQiiRig8Se5PzOdHjxiEQA7CMaFK+TS7FXYq7FXYq7FXYq7FXYqp3EKzQPE3RxStK0PY/QchkgJRMT1TE0bYwysrFWFGUkMOtCNiM5KcDEkHo7mMrFtZBLWBLsVawK44EtYFccCtYpaOBWsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KtYEtHArWBLsCtYEuwK1kUtYq7Iq1gS7Aq3ArsCWsCsR1e1+rX0igUR/jT5H+3NpgnxReJ7T0/hZiOh3CDy9wGxireKtjClvFW8KtjFLeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKtjCreKs58l6P6Fsb+Zf304pED2j8f9l+rNzoMHCOI8y5mCFC2TZsW92KuxV2KuxV2KuxV2KuxV2KuxVItZg9O6Eg+zMK/7Jdj/DND2phqYkOrsNJOxXcgM1TltYEuxVrArjgS1gVxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEuwK1gS7ArWRS1irsirWBLsCrcCuwJawKlPmG19S1Eyj4oTv8A6rbHMnSzqVd7pu29Px4uMc4/cxvNk8m2MVbxVsYUt4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpbxVsYVTXy7pDanqCxsD9Xj+Odv8n+X/ZZk6XB4k66dWzFDiL0tVCqFUUUCgA6ADOhDnuxV2KuxV2KuxV2KuxV2KuxV2KuxVC6pbmazcAVdPjUCvUdRQddq5i6zD4mMjq24Z8MgWO5yztmsCXYq1gVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFWyIskbIwqrAqw9jiDRtjOAlExPIsLuIGgnkhbqhI/tzcQlxAF4HPiOOZgehWDJtTeKtjClvFW8KtjFLeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKt4VbGKt4VbGFLeKrkVmIVRViaADqScIV6Z5d0hdM05I2H+kSfHO3+Ue3+x6Z0OlweHCuvVz8cOEJnmS2OxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksavrf6vdPGBROqf6p6U+XTOX12Hw8hHQ7u108+KKHzDb3Yq1gVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFdgSx/zHa8ZUuVGz/A/zHT8Mz9JPYxeZ7d09SGQddj+PxySYZmvPt4q2MKW8Vbwq2MUt4VbGKrhhS4Yq3hVcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVsYUt4qyjyVo3r3J1CZf3MBpCD3k8f9j+vNloMHEeM8g5GCFm2c5uXLdirsVdirsVdirsVdirsVdirsVdirsVdiqWa5b8olnHVDxfp9lun4/rzWdqYeKHEOcXK0s6lXekuc87J2KtYFccCWsCuOBWsUtHArWBXYEtYq1gS7ArWBLRxV2BLWBXYFawK7Alo4FawK1gS7FWsCWjgVrAl2BWsCXYFayKWsVdkVawJdgVbgV2BLWBXYEobULYXNpJF+0RVP9YbjJ4p8MgXF1un8XEY9envYfQgkHYjNy8IQ3ihsYUt4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVvCrYwpRNhZTXt5Fawj45TSvYDuT8hlmLGZyER1ZRjZp6nZWcNnaRW0IpHEvEe/iT8zvnSY4CEQB0dhGNClbJpdirsVdirsVdirsVdirsVdirsVdirsVdiq2WNZYnjb7Lgqadd9sjOIkCDyKQaNsWdGjdkf7SEq1OlQaZyOXGYSMT0dzCXEAVuVsmsCuOBLWBXHArWKWjgVrArsCWsVawJdgVrAlo4q7AlrArsCtYFdgS0cCtYFawJdirWBLRwK1gS7ArWBLsCtZFLWKuyKtYEuwKtwK7AlrArsCWsBVi2s2voXzECiS/GvzPX8c2umycUPc8Z2tp/DzGuUt/1oHMh1jYwpbxVvCrYxS3hVsYquGFLhireFVwxS3hVvCrYxS3hVsYq3hVsYUt4q2MKrsUtjCreFWxireFWxhSzzyVo31a1N/MtJrgfugeqx/wDN2brs/Bwx4jzP3OZghQtk2bFvdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqSa3b8LhZgPhlFGP+Uu34j9WaLtXDUhPv2c/Rz2MUtzUOa1gVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFdgS1gKpbrtt6tn6gHxwnl/se/wDXMjSZOGVd7qe2dPx4eIc4b/DqxrNq8e2MKW8Vbwq2MUt4VbGKrhhS4Yq3hVcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYq3hVN/LWjnU9RVGH+jRUec+3Zf8AZZlaTB4k/Ic23FDiL0wAKAAKAbADoBnROe7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhtRtvrFo6AVcfFH0ryHhXx6Zj6rD4mMxbMU+GQLGs5Mu4dgVxwJawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFdgS1gKrWUMpVhVSKEexwXSJRBFFh93bm3uZIT+wdj4jqPwzd458UQXgtVgOLIYHoVMZY0N4q3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCrYxVciszBVBZmNFA3JJwgWl6f5e0hdM05ISB67/ABzt/lHt8h0zo9Lg8OFdern44cITPMlsdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirG9St/QvHUfZb41+Tf21zmO0MPBlPcd3aaafFH3IXMFyHHAlrArjgVrFLRwK1gV2BLWKtYEuwK1gS0cVdgS1gV2BWsCuwJaOBWsCtYEuxVrAlo4FawJdgVrAl2BWsilrFXZFWsCXYFW4FdgS1gV2BLWAq1gSkfmG2/u7lR/kP+sZn6LJzi8529p+WQe4/oSYZsHnG8Vbwq2MUt4VbGKrhhS4Yq3hVcMUt4Vbwq2MUt4VbGKt4VbGFLeKtjCq7FLYwq3hVsYqyvyRovr3B1GZf3UBpAD3k8f9j+vNn2fp7PGeQ5OTghe7Oc3TluxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpdrduXt1lHWI79fstsenvTNd2nh48d9YuTpZ1Ku9Is5t2bjgS1gVxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEuwK1gS7ArWRS1irsirWBLsCrcCuwJawK7AlrAVawJULu3FxbSQn9obHwPUfjksc+GQLRqsAy4zA9WJFSpKkUI2I983oLwJBBouxQ3hVsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWxhVvCqJ02xmvr2K1h+3KaV7AdST8hlmLGZyER1ZRjZp6tZWkNnaxW0IpHEoVfE+JPuc6bHAQiAOjsYxoUrZNLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirToroyMKqwIYeIOxwEAiioLFZomhleJvtISCelff6euchnxHHMx7nc458UQVhylsawK44FaxS0cCtYFdgS1irWBLsCtYEtHFXYEtYFdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFdgS1gKtYEtYFY5rdt6V4ZAPgmHIfPvm20eTihXc8f2zp/DzcQ5T3+PVL8ynUt4VbGKW8KtjFVwwpcMVbwquGKW8Kt4VbGKW8KtjFW8KtjClvFWxhVdilsYVbwqz/AMk6L9VszfTLSe5H7sHqsXUf8F1+7N52fp+GPEeZ+5zcEKFsmzYt7sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqS67b8ZUuANn+B+n2huPfcfqzSdrYeUx7i52jnzilZzSOe1gVxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEuwK1gS7ArWRS1irsirWBLsCrcCuwJawK7AlrAVawJawKgdYtvWs2IHxxfGPkOv4ZkaXJwz97rO1tP4mEkc47/AK2NZuHjG8KtjFLeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwquxS2MKpx5X0Y6nqKq4/0WGjznxHZf8AZZl6PT+JPfkObZihxF6cAAKDYDoM6N2DsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUL23+sWskX7RFU7fENxlOoxeJAx72eOfDIFjBzkCK2LuQbayKXHArWKWjgVrArsCWsVawJdgVrAlo4q7AlrArsCtYFdgS0cCtYFawJdirWBLRwK1gS7ArWBLsCtZFLWKuyKtYEuwKtwK7AlrArsCWsBVrAlrArRAIoemBaYpe25t7qSL9kGq/wCqdxm8w5OOILwet0/g5ZR6dPco5c4rYxS3hVsYquGFLhireFVwxS3hVvCrYxS3hVsYq3hVsYUt4q2MKrsUro0d3VEBZ2ICqNySdgBkgLV6l5e0hNL01ICB67/HOw7ue3yHTOl0uDw4V16uwxw4RSZ5kNjsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirHdWtzDeMQPgk+NTv1P2hU++c12nh4MljlJ2mlnca7kFmtclxwK1ilo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEuwK1gS7ArWRS1irsirWBLsCrcCuwJawK7AlrAVawJawK7AqT6/bVRLgDdfhf5Hp+OZ+hybmLoO3dPcRkHTY/o/HmkubN5hsYpbwq2MVXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq2MKW8VbGFV2KWW+RdF9ac6nMv7uE8bcHu/dv9j+v5ZteztPZ4z05OTgx2bZ1m6ct2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoDWrf1LT1APjh+Kv+Sftf1+jMDtHDx4jXOO7kaafDP3sfzl3auOBWsUtHArWBXYEtYq1gS7ArWBLRxV2BLWBXYFawK7Alo4FawK1gS7FWsCWjgVrAl2BWsCXYFayKWsVdkVawJdgVbgV2BLWBXYEtYCrWBLWBXYFUriFZoXibo4phhPhkD3NefCMkDA9QxN0ZHZGFGUkEe4zoImxYeAnAxJieYcMLFvCrYxVcMKXDFW8KrhilvCreFWxilvCrYxVvCrYwpbxVsYVRemafNqF9FaQ/akNC3ZV7sfkMtw4jOQiGcI2aesWdpDaWsVtAOMUShVH8T7nOnxwEYiI5B2MRQpWyaXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq5lDKVYVUihB6EHEhWK3MBguJITvwNAe9OoJp7Zx+qw+HkMXc4p8UQVI5jtjWKWjgVrArsCWsVawJdgVrAlo4q7AlrArsCtYFdgS0cCtYFawJdirWBLRwK1gS7ArWBLsCtZFLWKuyKtYEuwKtwK7AlrArsCWsBVrAlrArsCtZEpSDW7f07kSgfDKN/wDWHXNvoclxrueS7b0/Bl4xyl96XDM10zeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3irYwq9E8k6J9Tsvrsy0uLofCD1WPqP+C6/dm+7P0/BHiPM/c52DHQtkubFvdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqT69b7x3A/4xv+tf45pu18NgTHTYubo57mKUHNA7BrFLRwK1gV2BLWKtYEuwK1gS0cVdgS1gV2BWsCuwJaOBWsCtYEuxVrAlo4FawJdgVrAl2BWsilrFXZFWsCXYFW4FdgS1gV2BLWAq1gS1gV2BWsiUoPVLf17NwBV0+NfmP7Mv0uTgmO4uv7T0/i4SBzG4Y2M3rxLeFWxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhS3iqd+VNFOp6kokFbWCjznsf5U/wBl+rMzRafxJ7/SObbhhxHyengACg6Z0jsHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVK7gFxbyQn9obE9iNwdvfK82MTgYnqyhLhILFWDAkMCrDYqeoOcbKJiSD0d1E2LayLJo4FawK7AlrFWsCXYFawJaOKuwJawK7ArWBXYEtHArWBWsCXYq1gS0cCtYEuwK1gS7ArWRS1irsirWBLsCrcCuwJawK7AlrAVawJawK7ArWRKWsCsZ1C39C7dAKKfiT5HN9psnHAF4btDT+FmMenMe4ofMhwmxiq4YUuGKt4VXDFLeFW8KtjFLeFWxireFWxhSvjjeSRY41LO5Cqo6knYAYQCTQUPVvL2jppWmx2+xmb452Hdz1+gdBnT6XB4cK69XY44cIpMsyGx2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kse1m39K7LgUSYch0Hxftf1+nOb7Vw8OTi6SdlpJ3Gu5AZq3MaOBWsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KtYEtHArWBLsCtYEuwK1kUtYq7Iq1gS7Aq3ArsCWsCuwJawFWsCWsCuwK1kSlrAqWa5b8oVmHWM0b5H+3M/QZKkY97o+3NPxQGQfw/cUkzbvKtjFVwwpcMVbwquGKW8Kt4VbGKW8KtjFW8KtjClmPkPRPVmbVJ1/dxErbg937t/sen+1m17N09njPTk5Onx9WdZu3MdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQWsW/rWbMB8cXxj5D7X4Zha/B4mI943b9PPhmGOZyjt2jgVrArsCWsVawJdgVrAlo4q7AlrArsCtYFdgS0cCtYFawJdirWBLRwK1gS7ArWBLsCtZFLWKuyKtYEuwKtwK7AlrArsCWsBVrAlrArsCtZEpawKtljWSNo2+ywIP04YSMSCOjDLjE4mJ5EMWkjaORo2+0pIP0Z0cJCQBHV4DLjMJGJ5grRkmtcMKXDFW8KrhilvCreFWxilvCrYxVvCqM0rTptRv4rSH7Uh+JuyqN2Y/IZbhxHJIRDOEeI09btLWG0toraBeMUShVHy/ic6mEBGIA5B2URQpVyaXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqxu60u6hkfhGXiqeDL8Xw9q985fVaDJGZ4Y3Hydrh1ESBZ3QTAgkEUI6g5riK5uSGsCuwJaxVrAl2BWsCWjirsCWsCuwK1gV2BLRwK1gVrAl2KtYEtHArWBLsCtYEuwK1kUtYq7Iq1gS7Aq3ArsCWsCuwJawFWsCWsCuwK1kSlrArsCUk1u34zLMBs4o3zH9mbfs/LcTHueV7c0/DMZB/F94/YlozYOiXDClwxVvCq4Ypbwq3hVsYpbwq2MVbwq9H8kaH9SsPrky0uboAivVY+qj/ZdT9GdB2fp+CPEecvuc/BjoX3slzYt7sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVWSQwyikiK4/wAoA5CeKM/qALKMyORQcuiWL/ZBjP8Akn+BrmBk7Kwy5en3N8dXMeaCm8vTDeKVW9mHE/xzAydjSH0yB97kR1o6hBTabfRfahYjxX4h+Ga/Loc0OcT97kxzwlyKEIIND1zELc7ArWBLRxV2BLWBXYFawK7Alo4FawK1gS7FWsCWjgVrAl2BWsCXYFayKWsVdkVawJdgVbgV2BLWBXYEtYCrWBLWBXYFayJS1gV2BKGv7f17V0AqwHJPmMu02XgmC4XaGn8XCY9eY97GxnQvDLhhVwxVvCq4Ypbwq3hVsYpbwq2MVT3ylon6U1IGRa2lvR5/A/yp/sv1ZnaHT+JPf6RzbsOPiPk9QzpHYOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqctvBMP3sav7kAnKsmGE/qALOM5R5FBTaDZP9jlEfY1H41zAy9kYZcrj+PNyI6yY57oGby7cLvFIrjwPwn+Oa/L2LMfSQfsciOuieYpAzadew/bhag7gch94rmuy6LNDnEuTDPCXIobMVtawJdgVrArsCWjgVrArWBLsVawJaOBWsCXYFawJdgVrIpaxV2RVrAl2BVuBXYEtYFdgS1gKtYEtYFdgVrIlLWBXYEtHArHtRt/Ru3A+y/wAS/T/bm/0mXjgO8bPE9qafwsxHQ7hDDMp17hireFVwxS3hVvCrYxS3hVfDFJLIkUal5HYKijqSTQDDEEmgmreteX9Hj0rTY7YUMp+Odx3c9foHQZ1OlwDFADr1djjhwikxzIbHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVKa0tZv72JWPiRv8Af1ynJpsc/qiCzjllHkUDN5fsn3jLRHwBqPx3/HNdl7GxS+m4uTDWzHPdATeXbtf7p1kHh9k/jt+Oa7L2LkH0kS+z8fNyYa6J5ikBNYXkP97CyjxpUfeNs12XSZcf1RIcmGaEuRUMxW1o4FawK1gS7FWsCWjgVrAl2BWsCXYFayKWsVdkVawJdgVbgV2BLWBXYEtYCrWBLWBXYFayJS1gV2BLRwKl+sQc7cSAfFGd/keuZ3Z+Xhnw97pu29Px4uMc4/ckozdvJOGKt4VXDFLeFW8KtjFLeFWZ+QND9SRtVnX4IyUtge7dGb6Ogzb9maaz4h+DlafH/EzvN25jsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUJrGzm/vYVYnvSh+8b5jZdJiyfVEFshmnHkUBN5ctH3idoz4faH47/jmuy9h4j9JMft/HzcmGukOYtATeXb1N4yso7AHifx2/HNbl7EzR+mpfZ+Pm5UNdA89kvns7uCvqxMg8SNvv6ZrculyY/qiQ5MMsZcio5jtjWBLRwK1gS7ArWBLsCtZFLWKuyKtYEuwKtwK7AlrArsCWsBVrAlrArsCtZEpawK7Alo4FWuqupVhVWFCPY4iRBsMZwEgQeRY1NE0UrxnqppnS45icRIdXgc+E45mB6FYMsaW8KrhilvCreFWxilG6Rpk+pahFZw9ZD8bdlUfaY/IZdgwnJMRDOEeI09dtLWG1to7aBeMUShUHsM6uEBEADkHZAUKVckl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoafTbGf+8hUk/tAcT94pmJl0OHJ9UR933N0M848igJ/LNs28MjRnwPxD+BzW5ewcZ+mRj9rkw18hzFpfP5c1CPePjKP8k0P3GmazN2Jnj9NS/Hm5UNdA89kumtbmA/vYmT3YED781mXT5Mf1RIcqGSMuRtSyhm1gS7ArWRS1irsirWBLsCrcCuwJawK7AlrAVawJawK7ArWRKWsCuwJaOBWsBVKdZgo6zAbN8LfMdM23ZuWwYvNdu6epDIOux/QlgzaPPN4VXDFLeFW8KtjFL0ryRof1DT/rcy0ursBqHqsfVV+nqc6Ls7TcEOI/VL7nPwY6F97Jc2Le7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEAih6YqhJ9J06b7cCgnuvwn/haZhZezsGTnEfDb7m+GpyR5FL5/K0DVMEzJ7MAw/CmavL7PwP0SI9+/6nKh2jLqEun8u6lHUoqyj/ACDv9xpmrzdiaiHICXu/a5UNdjPPZL5re4hNJo2jP+UCP15q8uCeM1IEe9yozjLkbUsqZuyKtYEuwKtwK7AlrArsCWsBVrAlrArsCtZEpawK7Alo4FawFVG7hE0Dx9yPh+Y6Zbp8vBMScbWafxcRj16e9jtCDQ9c6V4Ih2FVwxS3hVvCqfeT9D/SepBpVraW1Hmr0Y/sp9P6szdBpvEnv9Ib8OPiPk9SzpnYOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuKhgQwBB6g4CARRUFBT6Lps32oFU+KfD+rMDN2Vp8nOIHu2+5yIarJHql0/lWI1ME5XwVwD+IpmqzezsT9EiPe5UO0T/EEun8u6nFUhBKPFDX8DQ5qs3YmohyHF7nLhrsZ60l8sM0TcZUZG8GBH681eTFOBqQIPm5UZiXI2pZUydgS1gV2BLWAq1gS1gV2BWsiUtYFdgS0cCtYCrWRSkepweldEgfDJ8Q+ffOg0OXjxjvGzxna+n8PMSOUt/wBaEzNdWuGKW8Kr4YpJpUiiUvJIwVFHUkmgGSjEk0EgW9d0DSI9K0yK1Whk+1O4/ac9T/AZ1WmwDFAR+bs8cOEUmOZDN2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVp0R14uoZT1BFRkZREhRFhIJHJA3GhaXNuYQjeMfw/gNvwzXZux9Nk/ho+W37HJhrMket+9LbjykOtvPTwWQV/Ef0zU5vZof5Ofz/AFj9TlQ7S/nD5JbceXtUh39L1FHeM8vw6/hmpz9i6nH/AA8Q8t/2/Y5kNbjl1r3pfJFJG3GRCjeDAg/jmryY5RNSBB83JjIHksyssmsCWsCuwK1kSlrArsCWjgVrAVayKUHqkHqWxYfaj+L6O+Z3Z+XhyV0k6ntnT+Jh4hzhv8OqSZv3jlwxS3hVm35faFzdtWnX4UqlqD3boz/R0H05uey9Nf7w/By9Nj/iLO83bmOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbJFHIvGRA6/wArAEfjkJ44zFSAI80xkRyS+48u6VNU+l6bHvGafhuPwzWZuxNNk/h4fdt+z7HKhrsset+9Lbjyg25t7gHwWQU/4Yf0zT5/Zg/5Ofz/AFj9Tlw7T/nD5JXcaBqsNawF1H7UfxfgN/wzUZ+xdTj/AIbHlv8AtcyGtxS6170A6OjFXUqw6gihzVzgYmiKLlAg8luQKWsCuwJaOBWsBVrIpaIBBB3B6jG6NoIBFFj1xCYZnjP7J2+XbOowZOOAl3vA6rAcWSUO4rBlrQjtF0ubVNRis4tuZrI/8qD7TZfp8JyTEQzxw4jT1+1tobW3jt4V4xRKERfYZ1kICIAHIOzAoUq5JLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVWSwQTLxljWRfBgD+vK8mGGQVICXvFsozMeRpLbjyzpU1SsZhY94zT8DUZqc/YGmycgYnyP67Dlw1+WPW/ellx5PlFTb3Ct4K4K/iK5p8/svIf3cwfft+ty4dqD+IJZcaFqsFS1uzL/Mnx/wDEanNNn7H1WPnAn3b/AHOZDWYpcigGUqSGFCOoOawgjYuUCtyJVrIpdgKpZrEH2Jh/qt/DNt2Xm5wPvec7e0/LIPcf0JaM3Dzj07yPoX6P0761MtLu7AY16rH1Vfp6nOk7O03hw4j9Uvuc/T4+EX1LJM2LkOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqU9rbTik0SSD/AClB/XlObT48gqcRL3hnDJKPI0ltx5W0qWpRWhb/ACDt9zVzT5/ZzTT5Aw9x/Xblw7Ryx57pXc+Trlam3nWQeDgqfw5Zps/srkH93MS9+363Nx9qRP1CkqudE1S3qZLdyo/aT4x/wtc0mo7I1OL6oGvLf7nMx6vHLlJLrmESxPE21RT5HMLDkOOYl3J1OEZcZh3j+xryboB1LVOc6/6LaENMD0Zq/Cn9fbO47O0/iyv+EPD4sJMqPR6lnTuwdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqDvl0hvhvfQqenqlQfoJ3zX6yOlO2bg/zq/S34TlH0cXwdpUOlRQOummMw+oxkMTBx6hpWpqd+mXaSGKMKxVweRv7WmRuRJ53v70ZmUh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/9k=' >>> assert a[29].load == base64.b64decode(wireshark_data) ###(001)=[passed] TCPSession - dissect HTTP 1.0 html page with Content_Length >>> load_layer("http") >>> >>> import os >>> >>> filename = scapy_path("/test/pcaps/http_content_length.pcap") >>> >>> expected_data = b"""Google
A faster way to browse the web



 
  Advanced Search
  Language Tools


Advertising Programs - Business Solutions - About Google

©2010 - Privacy

""" >>> >>> >>> conf.contribs["http"]["auto_compression"] = False >>> a = sniff(offline=filename, session=TCPSession) >>> pkt = a[7] >>> assert HTTP in pkt >>> assert HTTPResponse in pkt >>> assert pkt[HTTP].Content_Length == b'5012' >>> assert len(pkt[Raw].load) == 5012 >>> >>> conf.contribs["http"]["auto_compression"] = True >>> a = sniff(offline=filename, session=TCPSession) >>> pkt = a[7] >>> assert HTTP in pkt >>> assert HTTPResponse in pkt >>> print(pkt[Raw].load, expected_data) b'Google
A faster way to browse the web



 
  Advanced Search
  Language Tools


Advertising Programs - Business Solutions - About Google

©2010 - Privacy

' b'Google
A faster way to browse the web



 
  Advanced Search
  Language Tools


Advertising Programs - Business Solutions - About Google

©2010 - Privacy

' >>> assert pkt[Raw].load == expected_data ###(002)=[passed] TCPSession - Invalid Content-Length >>> pkts = [ ... IP()/TCP(seq=1)/HTTP()/Raw(load=b'GET / HTTP/1.1\r\nContent-Length: bad\r\nCoo'), ... IP()/TCP(seq=41)/HTTP()/Raw(load=b'kie: cookie\r\n\r\n'), ... ] >>> a = sniff(offline=pkts, session=TCPSession) >>> >>> assert HTTPRequest in a[0] >>> assert a[0].Cookie == b"cookie" ###(003)=[passed] TCPSession - dissect HTTP 1.0 HEAD response >>> load_layer("http") >>> >>> a = sniff(offline=scapy_path("/test/pcaps/http_head.pcapng.gz"), session=TCPSession) >>> >>> assert HTTPRequest in a[3] >>> assert a[3].Method == b"HEAD" >>> assert a[3].User_Agent == b'curl/7.88.1' >>> >>> assert HTTPResponse in a[6] >>> assert a[6].Content_Type == b'text/html; charset=UTF-8' >>> assert a[6].Expires == b'Mon, 01 Apr 2024 22:25:38 GMT' >>> assert a[6].Reason_Phrase == b'Moved Permanently' >>> assert a[6].X_Frame_Options == b"SAMEORIGIN" ###(004)=[passed] HTTP build with 'chunked' content type >>> pkt = HTTP()/HTTPResponse(Content_Encoding="chunked", Date=b'Sat, 22 Jun 2024 10:00:00 GMT')/(b"A" * 100) >>> assert bytes(pkt) == b'HTTP/1.1 200 OK\r\nContent-Encoding: chunked\r\nDate: Sat, 22 Jun 2024 10:00:00 GMT\r\n\r\n64\r\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n0\r\n\r\n' ###(005)=[passed] HTTP decompression (gzip) >>> conf.debug_dissector = True >>> load_layer("http") >>> >>> import os >>> import gzip >>> >>> filename = scapy_path("/test/pcaps/http_compressed.pcap") >>> >>> >>> conf.contribs["http"]["auto_compression"] = False >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> data = b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xffEQ]o\xdb0\x0c\xfc+\x9a\x1f\x92\xa7\x9a\x96?\xe4\xb8\x892`I\x81\r\xe8\xda\xa2p1\xec\xa9P-\xd5\x16*[\x86\xa5\xd8K\x7f\xfd\xa8\x14E\x1f\x8e:R\x07\xf2D\xed\xbe\x1d\xef\x0f\xf5\xdf\x87\x1b\xd2\xf9\xde\x90\x87\xa7\x1f\xb7\xbf\x0e$\xba\x02\xf8\x93\x1d\x00\x8e\xf5\x91\xfc\xac\x7f\xdf\x92\xe5?9\x89QV\x01\x02\x00\x00' >>> >>> pkts[2].show() ###[ Ethernet ]### dst = d0:50:99:56:dd:f9 src = 14:0c:76:8f:fe:28 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 17805 flags = frag = 0 ttl = 121 proto = tcp chksum = None src = 172.217.18.198 dst = 192.168.0.119 \options \ ###[ TCP ]### sport = http dport = 64700 seq = 1367924705 ack = 259396500 dataofs = 5 reserved = 0 flags = PA window = 243 chksum = 0xe94 urgptr = 0 options = [] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= None Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= private, max-age=0 Connection= None Content_Disposition= None Content_Encoding= gzip Content_Language= None Content_Length= 386 Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= text/html; charset=UTF-8 Date = Mon, 22 Apr 2019 15:23:19 GMT Delta_Base= None ETag = None Expires = Mon, 22 Apr 2019 15:23:19 GMT IM = None Keep_Alive= None Last_Modified= None Link = None Location = None P3P = policyref="http://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = cafe Set_Cookie= None Status = None Strict_Transport_Security= max-age=21600 Timing_Allow_Origin= * Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= nosniff X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= 0 Unknown_Headers= None ###[ Raw ]### load = b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xffEQ]o\xdb0\x0c\xfc+\x9a\x1f\x92\xa7\x9a\x96?\xe4\xb8\x892`I\x81\r\xe8\xda\xa2p1\xec\xa9P-\xd5\x16*[\x86\xa5\xd8K\x7f\xfd\xa8\x14E\x1f\x8e:R\x07\xf2D\xed\xbe\x1d\xef\x0f\xf5\xdf\x87\x1b\xd2\xf9\xde\x90\x87\xa7\x1f\xb7\xbf\x0e$\xba\x02\xf8\x93\x1d\x00\x8e\xf5\x91\xfc\xac\x7f\xdf\x92\xe5?9\x89QV\x01\x02\x00\x00' >>> assert HTTPResponse in pkts[2] >>> assert pkts[2].Expires == b'Mon, 22 Apr 2019 15:23:19 GMT' >>> assert pkts[2].Content_Type == b'text/html; charset=UTF-8' >>> assert pkts[2].load == data >>> >>> >>> conf.contribs["http"]["auto_compression"] = True >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> pkts[2].show() ###[ Ethernet ]### dst = d0:50:99:56:dd:f9 src = 14:0c:76:8f:fe:28 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 17805 flags = frag = 0 ttl = 121 proto = tcp chksum = None src = 172.217.18.198 dst = 192.168.0.119 \options \ ###[ TCP ]### sport = http dport = 64700 seq = 1367924705 ack = 259396500 dataofs = 5 reserved = 0 flags = PA window = 243 chksum = 0xe94 urgptr = 0 options = [] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= None Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= private, max-age=0 Connection= None Content_Disposition= None Content_Encoding= gzip Content_Language= None Content_Length= 386 Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= text/html; charset=UTF-8 Date = Mon, 22 Apr 2019 15:23:19 GMT Delta_Base= None ETag = None Expires = Mon, 22 Apr 2019 15:23:19 GMT IM = None Keep_Alive= None Last_Modified= None Link = None Location = None P3P = policyref="http://googleads.g.doubleclick.net/pagead/gcn_p3p_.xml", CP="CURa ADMa DEVa TAIo PSAo PSDo OUR IND UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = cafe Set_Cookie= None Status = None Strict_Transport_Security= max-age=21600 Timing_Allow_Origin= * Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= nosniff X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= 0 Unknown_Headers= None ###[ Raw ]### load = b'' >>> assert HTTPResponse in pkts[2] >>> assert pkts[2].load == b'' ###(006)=[passed] HTTP decompression (gzip) with retransmission >>> import io >>> import gzip >>> >>> pcap = gzip.decompress(bytes.fromhex("1f8b080062b92e6602ff9d586bace4e659f6d964d3e5244b93c08f003f3a52b2e96e9573d69799738e376cd8f15ced33f6dc3cbe0954c6f68cc733b6c739e3b9d840d956085445229590902284442fb4db42aab42ab4a04a5c052d95aa52d01209352090b854a8093fd24a9ba0f2bef69973dbed36b0dad1ccb1fd3ddf7b79dee77dfdfdfd5f7cfea3e7880789f5bfef7f9f2036e0fbb56463d8f8f94d8283dff8c96b370a073ff191773ff2d77ff5b90b44052ec4c10de2e643db1ffffd9ffcee537f7aebf5bff9ca9344ebe557aa9f42949be7eebc617f9420ce3d78fe0b1b0f3c706163e3c17388f8bee78f1133ac0c374324881bc4730f7dfb31444354a2f595275f5a7cf82d40bd75f3f13b6f149f4c115f4134407d172292079bc40ea0eddccbc6cbf134b5f1b3676cbc05a86fb71e3d773ef956e6e95bf126f16fe789f47316e5fcab71882897ffe707a16cfd2b41b49a5d3977f580d9d15a96193bc1b0336e1487d586392c6f87a3305797e5d6556a9bbab8599fcea26bb9e76776b2bdf0b767c97cdb9f0e2e6e162d6b10465b95c09ada6ee05ccb39891b3e93b30743af1fc1fdde6c70b0557406012c16a789eb79fdabf96d3277d99afa613f724d6ff06c4eecf2951c456e93cfe65437b0a7cb594e92733bdbd4b339f9c0b561f1d5c23679e5e266691a44f0d7961c87836bb97e187aae0520d3e0ea6a6bb95c6e0da707fed6fcc01ba03903fb7841631038d1e85a2e9f67a9f46a30b070ddb59ce54d6760e7c5cdb1cd30e4deee4e9f64acfcf0ba5169d04268ba6cd22f5e62caf0ffe980de2587ec80b4eddd7cdebcde3b781ac311c7f6ecfaa53c3958f4bdcbf06df667839dfcfbed019a70f9129d7f3f06f952817befaa6031e490b1f3145328e4df7ba950be72e512c33d3d2fecb014651776addd9d3dfa7ab2d0e9b6c3bb2cad6bfcc2666ca6418f48535dba4d5a19f76b7b0eef8f463a1d7946a9e2f2e5bc63f8ab9191449e4e8f167cb948e97265d92c77dc66395ada747bd750a5a919176971dc2625b5478ab2e01b631d7d3a6dd3f576cd9bf7153631b4f694f73ba1c570335df3868626c4262324bcbb74f871d1dd97a3a2452ba4c6744253558666cd8bfab0462c4d76851abb346a5edcea71a1e9c35a786ebf242cac9a32d7686104eb267d8d478cd0709d89c970f877c8d76713939618a34cc1dfc25c57296fbfd419f648a5ab4c94ae1a0b729b12845eb533ec4c3cb1d32b7072afe76add6c4f1d6c6c695c6ca8f610ed467b74bf9a18b24e6a7407a2c34e8caee3caf5906c56d8b05926ddfdeef268ff26c98dac40180d1476696bd214f6069babb1e52e33bb4aab64a049a93fe0b7676adc10fddc2f4dc2266d2c2c5f81ac38d3b52d7cad9af0a54e68d79468bfcbedf6557dca434c2c8a652cdf23755598813db037607527e18096166600f10c14afc990bb42bd13a571ec66180d975f34fc765ef77946572b243f8e8aa61aa1edd3f5b387311db56b4668d614c8db0872d849c0176010e4d3bd6b9f895dc378f32cda6fd6b9915d734ee215815567f728f6d542a8319267971c17e2e7991eebea9ae4e1fd94236e7ecebb9817696e630cc754d1aa0b9e41b189555b85b8ae41ad2cadbadad34a7b0b58b3b6238b25f0a22f93cb66dc095b75291cf8ca02b9a2d3051263bb2fcf26fdeeec605f3bb66fbde7f087dbe736e234df711613e7c4de02f0a77a80f11fcab35d2350e63a729cce3bb8def445cc2f6597bc5d881769034ff90a97624be3ced0500b6313b886dcb1b57688386730e07a07f8d59eee6bc0774621adba42b654d6d568dbb3ab2cac2f9080435ab103f6e075656ee0f59a327a07aaff7caafa6f9f56fd86b656fd97b709c2741179ad259d51b35671815d94984c9866973fd40bae78cae33a075e4fd65ae24ae5912b96f8393f162662592c001b599316a0f23a5045e09d1c9156e0018b8becdd55384a6c5548ec3ab0aacab6654aea41753f6f94c5442c3b8ce45796222d92862bd88d321f62b6ad843a8e724dc9a25c97283d9048cca04671ad1ed531f9a04749e3c94a54db94448b8c347662de236722301fd8e4998181fbb2ed1a2a518f96aa608f2a2d8c5a6f6a318a0bf6c7a9ea545859a9ce5c73cc33624d2f18323731ca1629d578509c65bc9faa4e9b4546997e35c24ad628a9daf30cf8ccdc1e2975bb0ad7d34843902b4ab3dda3aa6007da306e69c7761ba5e5b251ae842d9944565ea2abbc4b8df9ead21dc49d64a82c5d7e3c751bb4e8682501a229b15a89874ee0f927bd3f83120e480e3886de82e6781ca7541c96770b8171fa1ae85fde6dba2c6531fcc2acb1635d5d2e2cec7be329f0548a1bf40aba5175d638798d91dcbe9adf69304a62b9ece1efc36b69cf843a6228cfac4bdeffc90e52dc695036f40ca81d465c588c97a0ee8909bfdb4ea60b85f6e6460db4336665d0614da62c5a2a4765b05f837a875ab293b318bd638ce3f514b7b06925eed123cfac2d17f6b832174b7bbba976a810d75215b59d1c4046a10ee994115d6032f42fdb4fb5cc1bd4b95956e7c2deb0be0226ad604f057e83b6948ac7ebe4c887bee9e96ada4f907d501d3ce880e808751d7a1eea7571caab4a64d53b05788606663927e386381a60806e427fe94df960b53784ded2a79502ecbd97f56432ddd7469633143bec76a06f205f3816fbaace90c01983327d89ecabec9caf19a8513e6a10f4db13fef033de5d65fa897a04fa090c4fd25ea5b0be0dfa66d73ce81fa28b15803dcd50a9a55d9f804ab4c343bcac8f769d631ec49d494b85d8f9d58246c3fd9213d875e04ad79aa19ee38c61aad5e57ec986ea14481378873912e225703bf52906ce50969f9f1eeb69e1647ff3f7bbbadf87fe8c7c356b55d7848a166a7a28b8fa08fc1966fba09dfa2cb5558ed85331a90b941948e0cf6a66c124a5d333f469063d7c7cd8bf9d3335e788f8817c41dd41cfdb73f91274e734b6f63a7fc17eb7e80b9063c3077bc027cb67630dfc33620bf20ff9cb9e8f74d59b09f1243cb1172828eef50e54ff2055fdb74eab7ee7c25af5ffe821821861679b9838e1c5d07dd7d36d890f81392e6a34fee64b1596af189c5c95aa6809767dab540416a5130f4c65e4142bf3b05b91987dd075eca2881300b30388ecc9aae77b55568466cec2a4e40c622edf8c39b61917277a5cbc4473873bc42d575f610da6be6731f180470bcb63819b5690d6c5a9f839aede05be82ee419f75206f890116038f421378abf78a2b716c416de7978d7105ebc3cd66135853e2233dd07106855ae1528e422dae39e674fc2a70a0b70b75b4eed74eabcb150ddfc33a40fd029eb130db8026d4c569e6c364b75d57e68711c6996299cd63c5131db4386a75d10ef085e162e02599cd0ae91ee087e0d97525365dae67a5f319c51ecf19c608ed3c3b5358f89ba626fbc853a83f7cbe2517ff7fdd09fb4a167b9c7521bb6480dad7ae4bf0a280732acc605093b807c62e8db97ab406e65e09f47614db5d2bc4d90ce6e704d64dad006b519c093003e21431541588af02b119f9605b60a55abcc27af6f4385dbb8419796e9746c5d3f770ffc991aea4fa93d555de50c5ccd65afa3bdbafb677b4a7857a039349df6781f98e5b021ec0fdf05e7ea433a36b657a1614d9769d4bdf5f30c68d920dba34d9b5e951881a0333bd6fa8ac8f1a041c088ff25a81ebf0ae00731c62ccc471916c665a0671916626cca7876bee8e475d58e8149bee899a00fab9e4cba40376c4f02e32ccec4b73e1ac754dec16d996cbadb537b06aded2007de54b36031850273ce854fee879818177915a2fc0aab531e6dda52380b6433c987ecdc377137c8ff04c5a9fe27535a9da18df751ce11ed6016a6f6852b3154e4562b99dc7be30d4ec695f5d817f55a8996c76078d3545e0d8c9dc1a3ea808d64f8a9f4e7b4ba9eca439017c9879e15db47bb856217166f775a87da8cda335e9bb6816afa3e7ef15531d67eac379208d29bcefc17bd09ae7c89753bcc2ba3ae45ed287d9086b1a351f9f43653caacb520774a37d72bfe3e916fa07f488d57e175475dd1f2a1cd8097541b1de007a2bfacf4fa496dce553bed909353734cb59abfe973788f47356f5373e1bcf50f5b79e3aadfaea9752d57fe2dcf9fc3f12449b642560b406936edc87a9a671d8e190c142adc70a752b6af9471583f369622624cce82468738fe94c6406dfdfe1e9b48ef2b0425a34e44217bb491b90b27b9207efa91e5c97ed5aa70a33ce349dda21468d3139817c452d0fe7a00e073317be1d1c72c039ad2587fa855c17659e39d1f79d74ff32f4ec388d37d4a480bd3b3210c3cdbbc06fec26a0f4c7e8a0bca9d515562c4d70b60e1083ca7ca9c34c044adc4c2216660612dfdd3bda686c4094d27900e635e06a76aa5212403785560f666098afe71039881a70b7427916238d0ce063364f5493f53b1dc605f4d7c36fcce537878f107b04917eb22c46dffedace9fdcc8cefc6e7f0c4f117fec17ce9c22be8def6ead4737de9c5f270ecf3711e7f469e4099cfced8fa738c1bd706e020efd7582d8d838bf893c79f915fdb97780f88914d1bf1bb17301105fdf7aeade88f7f1f57753c4d5dd88fa73e0eb1ba39f3de9eb6f03f7f1731667e3c5db9f449cc71fbd27ce131b6fdefc2d82589f60e66892cc35f72f6e96fbd100cf22836772742127f60fe00e9dcf51cc359ab996a7733551beb8d91d1c2c0607d772c5b06f8d0657e9edfc7681ce5dee99f3209a5fb9b8a9f40f62b87bfaf0f3f8b8f1f471e8ddc790543e7fcf53c8d3e79bd160155d1d45bef76cce1af50f6683e87a4fae6eede169e57b5eb8909d7c3f70fecfbef5a31fca3d417c43bdf3d01fbcbd3dffe487b9bff32e2f7fe7a7be9afbe36f7ce017ef7cfda5f9c75efcf1e6ab8f7e977ef83bd75efccdeffdedaf7fe2d5c68d5bc27f773f4fccbff6a12b2ffcfbfcab46e195debbcd7f78fc8b9ff9af2fffc86bbf97ffc0affcf42fc7413ffac3e056d278f89b2f49d35ffa4fe537aa7ffe730f73af7df07bcf5cdebdfd6b7f49bcf4c17f79cf67e4e1e0574f24eb3e49ff549af4c5e964bd60a5c97a6ce3cde1ebc40fc43971dc7ef9f6ad1467fec371d8d123f73b648fd243f64f9f164ffd39c0b261647e70f8cf19ca9de0be28f314e5d63d511e03947fca50fee323f7f5e9d3a94fd1199f6c40fa192cfee177d0a7ff055f2af0bdf5180000")) >>> >>> pkts = sniff(offline=io.BytesIO(pcap), session=TCPSession) >>> >>> assert HTTPRequest in pkts[3] >>> assert pkts[3].Method == b"POST" >>> assert len(pkts[3].load) == 4491 >>> >>> assert HTTPResponse in pkts[8] >>> assert pkts[8].Http_Version == b'HTTP/1.1' >>> assert len(pkts[8].load) == 134 ###(007)=[passed] HTTP decompression (brotli) >>> conf.debug_dissector = True >>> load_layer("http") >>> >>> import os >>> import brotli >>> >>> filename = scapy_path("/test/pcaps/http_compressed-brotli.pcap") >>> >>> >>> conf.contribs["http"]["auto_compression"] = False >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> data = b'\x1f\x41\x00\xe0\xc5\x6d\xec\x77\x56\xf7\xb5\x8b\x1c\x52\x10\x48\xe0\x90\x03\xf6\x6f\x97\x30\xd0\x40\x24\xb8\x01\x9b\xdb\xa0\xf4\x5c\x92\x4c\xc4\x6f\x89\x58\xf7\x4b\xf7\x4b\x6f\x8c\x2e\x2c\x28\x64\x06\x1d\x03' >>> >>> pkts[0].show() ###[ Ethernet ]### dst = 52:54:00:61:aa:fe src = 00:16:3e:00:00:10 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 7675 flags = DF frag = 0 ttl = 64 proto = tcp chksum = None src = 192.168.122.33 dst = 192.168.122.1 \options \ ###[ TCP ]### sport = http dport = 52074 seq = 572640221 ack = 1065353370 dataofs = 8 reserved = 0 flags = PA window = 227 chksum = 0x73dc urgptr = 0 options = [('NOP', None), ('NOP', None), ('Timestamp', (3279085496, 1976444231))] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= bytes Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= None Connection= keep-alive Content_Disposition= None Content_Encoding= br Content_Language= None Content_Length= 52 Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= text/plain Date = Sat, 06 Apr 2019 14:24:04 GMT Delta_Base= None ETag = "5ca8b0e3-34" Expires = None IM = None Keep_Alive= None Last_Modified= Sat, 06 Apr 2019 14:00:03 GMT Link = None Location = None P3P = None Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = nginx/1.14.0 (Ubuntu) Set_Cookie= None Status = None Strict_Transport_Security= None Timing_Allow_Origin= None Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= None X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= None Unknown_Headers= None ###[ Raw ]### load = b'\x1fA\x00\xe0\xc5m\xecwV\xf7\xb5\x8b\x1cR\x10H\xe0\x90\x03\xf6o\x970\xd0@$\xb8\x01\x9b\xdb\xa0\xf4\\\x92L\xc4o\x89X\xf7K\xf7Ko\x8c.,(d\x06\x1d\x03' >>> assert HTTPResponse in pkts[0] >>> assert pkts[0].Content_Encoding == b'br' >>> assert pkts[0].Content_Type == b'text/plain' >>> assert pkts[0].load == data >>> >>> >>> conf.contribs["http"]["auto_compression"] = True >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> pkts[0].show() ###[ Ethernet ]### dst = 52:54:00:61:aa:fe src = 00:16:3e:00:00:10 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = None id = 7675 flags = DF frag = 0 ttl = 64 proto = tcp chksum = None src = 192.168.122.33 dst = 192.168.122.1 \options \ ###[ TCP ]### sport = http dport = 52074 seq = 572640221 ack = 1065353370 dataofs = 8 reserved = 0 flags = PA window = 227 chksum = 0x73dc urgptr = 0 options = [('NOP', None), ('NOP', None), ('Timestamp', (3279085496, 1976444231))] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= bytes Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= None Connection= keep-alive Content_Disposition= None Content_Encoding= br Content_Language= None Content_Length= 52 Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= text/plain Date = Sat, 06 Apr 2019 14:24:04 GMT Delta_Base= None ETag = "5ca8b0e3-34" Expires = None IM = None Keep_Alive= None Last_Modified= Sat, 06 Apr 2019 14:00:03 GMT Link = None Location = None P3P = None Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = nginx/1.14.0 (Ubuntu) Set_Cookie= None Status = None Strict_Transport_Security= None Timing_Allow_Origin= None Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= None X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= None Unknown_Headers= None ###[ Raw ]### load = b'This is a test file for testing brotli decompression in Wireshark\n' >>> assert HTTPResponse in pkts[0] >>> assert pkts[0].load == b'This is a test file for testing brotli decompression in Wireshark\n' ###(008)=[passed] HTTP decompression (zstd) >>> conf.debug_dissector = True >>> load_layer("http") >>> >>> import os >>> import zstandard >>> >>> filename = scapy_path("/test/pcaps/http_compressed-zstd.pcap") >>> >>> >>> conf.contribs["http"]["auto_compression"] = False >>> pkts = sniff(offline=filename) >>> >>> data = b'\x28\xb5\x2f\xfd\x04\x58\x45\x03\x00\xf2\x06\x19\x1c\x70\x89\x1b\xf6\x4f\x21\x1a\xbb\x28\xda\x9a\x1c\x34\xb8\x68\x1f\xd2\x82\xd7\x01\x8d\x36\xe5\x57\x1d\x0f\x38\x10\xa9\xa9\x86\x32\x96\x3d\xd4\xce\x2d\xa9\x2b\x01\x92\x94\xa8\x17\x23\xb7\xec\x9f\x6e\x96\x23\xb6\x13\x52\x97\xb2\x14\xf6\x0e\x9d\x57\x70\xf0\x2d\x7b\x87\x4c\x2a\x92\x10\x35\x68\x8d\xd9\xe6\x41\xbc\xf7\x73\x84\x07\x7e\xef\x48\xd1\x91\x0d\xef\x0b\x86\x8e\x6b\x86\x12\xaf\xb6\x05\x04\x01\x00\x29\x52\xd2\xfa' >>> >>> pkts[0].show() ###[ Ethernet ]### dst = 00:00:00:00:00:00 src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 212 id = 11799 flags = DF frag = 0 ttl = 64 proto = tcp chksum = 0xe0b src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ TCP ]### sport = http dport = 48560 seq = 1340929229 ack = 1735910306 dataofs = 8 reserved = 0 flags = PA window = 512 chksum = 0x7bc1 urgptr = 0 options = [('NOP', None), ('NOP', None), ('Timestamp', (1527950463, 1527950455))] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= None Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= None Connection= None Content_Disposition= None Content_Encoding= zstd Content_Language= None Content_Length= None Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= None Date = None Delta_Base= None ETag = None Expires = None IM = None Keep_Alive= None Last_Modified= None Link = None Location = None P3P = None Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = None Set_Cookie= None Status = None Strict_Transport_Security= None Timing_Allow_Origin= None Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= None X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= None Unknown_Headers= None ###[ Raw ]### load = b'(\xb5/\xfd\x04XE\x03\x00\xf2\x06\x19\x1cp\x89\x1b\xf6O!\x1a\xbb(\xda\x9a\x1c4\xb8h\x1f\xd2\x82\xd7\x01\x8d6\xe5W\x1d\x0f8\x10\xa9\xa9\x862\x96=\xd4\xce-\xa9+\x01\x92\x94\xa8\x17#\xb7\xec\x9fn\x96#\xb6\x13R\x97\xb2\x14\xf6\x0e\x9dWp\xf0-{\x87L*\x92\x105h\x8d\xd9\xe6A\xbc\xf7s\x84\x07~\xefH\xd1\x91\r\xef\x0b\x86\x8ek\x86\x12\xaf\xb6\x05\x04\x01\x00)R\xd2\xfa' >>> assert HTTPResponse in pkts[0] >>> assert pkts[0].Content_Encoding == b'zstd' >>> assert pkts[0].load == data >>> >>> >>> conf.contribs["http"]["auto_compression"] = True >>> pkts = sniff(offline=filename) >>> >>> pkts[0].show() ###[ Ethernet ]### dst = 00:00:00:00:00:00 src = 00:00:00:00:00:00 type = IPv4 ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 212 id = 11799 flags = DF frag = 0 ttl = 64 proto = tcp chksum = 0xe0b src = 127.0.0.1 dst = 127.0.0.1 \options \ ###[ TCP ]### sport = http dport = 48560 seq = 1340929229 ack = 1735910306 dataofs = 8 reserved = 0 flags = PA window = 512 chksum = 0x7bc1 urgptr = 0 options = [('NOP', None), ('NOP', None), ('Timestamp', (1527950463, 1527950455))] ###[ HTTP 1 ]### ###[ HTTP Response ]### Http_Version= HTTP/1.1 Status_Code= 200 Reason_Phrase= OK Accept_Patch= None Accept_Ranges= None Access_Control_Allow_Credentials= None Access_Control_Allow_Headers= None Access_Control_Allow_Methods= None Access_Control_Allow_Origin= None Access_Control_Expose_Headers= None Access_Control_Max_Age= None Age = None Allow = None Alt_Svc = None Cache_Control= None Connection= None Content_Disposition= None Content_Encoding= zstd Content_Language= None Content_Length= None Content_Location= None Content_MD5= None Content_Range= None Content_Security_Policy= None Content_Type= None Date = None Delta_Base= None ETag = None Expires = None IM = None Keep_Alive= None Last_Modified= None Link = None Location = None P3P = None Permanent = None Pragma = None Proxy_Authenticate= None Public_Key_Pins= None Refresh = None Retry_After= None Server = None Set_Cookie= None Status = None Strict_Transport_Security= None Timing_Allow_Origin= None Tk = None Trailer = None Transfer_Encoding= None Upgrade = None Vary = None Via = None WWW_Authenticate= None Warning = None X_Content_Duration= None X_Content_Security_Policy= None X_Content_Type_Options= None X_Correlation_ID= None X_Frame_Options= None X_Powered_By= None X_Request_ID= None X_UA_Compatible= None X_WebKit_CSP= None X_XSS_Protection= None Unknown_Headers= None ###[ Raw ]### load = b'GET /tmp_echo_zstd_request_for_testing HTTP/1.1\r\nHost: localhost:8080\r\nUser-Agent: curl/7.72.0\r\nAccept: */*\r\n\r\n' >>> assert HTTPResponse in pkts[0] >>> assert b'tmp_echo_zstd_request_for_testing' in pkts[0].load ###(009)=[passed] HTTP PSH bug fix >>> filename = scapy_path("/test/pcaps/http_tcp_psh.pcap.gz") >>> >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> assert len(pkts) == 14 >>> assert pkts[5].User_Agent == b'example_user_agent' >>> >>> assert int(pkts[7][HTTP].Content_Length.decode()) == len(pkts[7][Raw].load) ###(010)=[passed] HTTP build >>> pkt = TCP()/HTTP()/HTTPRequest(Method=b'GET', Path=b'/download', Http_Version=b'HTTP/1.1', Accept=b'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', Accept_Encoding=b'gzip, deflate', Accept_Language=b'en-US,en;q=0.5', Cache_Control=b'max-age=0', Connection=b'keep-alive', Host=b'scapy.net', User_Agent=b'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0') >>> raw_pkt = raw(pkt) No IP underlayer to compute checksum. Leaving null. >>> raw_pkt b'\x00P\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x00\x00\x00\x00GET /download HTTP/1.1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en-US,en;q=0.5\r\nCache-Control: max-age=0\r\nConnection: keep-alive\r\nContent-Length: 0\r\nHost: scapy.net\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0\r\n\r\n' >>> assert raw_pkt == b'\x00P\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x00\x00\x00\x00GET /download HTTP/1.1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en-US,en;q=0.5\r\nCache-Control: max-age=0\r\nConnection: keep-alive\r\nContent-Length: 0\r\nHost: scapy.net\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0\r\n\r\n' ###(011)=[passed] HTTP 1.1 -> HTTP 2.0 Upgrade (h2c) >>> conf.debug_dissector = True >>> load_layer("http") >>> from scapy.contrib.http2 import H2Frame >>> >>> import os >>> >>> filename = scapy_path("/test/pcaps/http2_h2c.pcap") >>> >>> pkts = sniff(offline=filename, session=TCPSession) >>> >>> assert HTTPResponse in pkts[1] >>> assert pkts[1].Connection == b"Upgrade" >>> assert H2Frame in pkts[1] >>> assert pkts[1][H2Frame].settings[0].id == 3 >>> >>> for i in range(3, 10): ... assert HTTP not in pkts[i] ... assert H2Frame in pkts[i] ... ###(012)=[passed] Test chunked with gzip >>> conf.contribs["http"]["auto_compression"] = False >>> conf.contribs["http"]["auto_chunk"] = False >>> z = b'\x1f\x8b\x08\x00S\\-_\x02\xff\xb3\xc9(\xc9\xcd\xb1\xcb\xcd)\xb0\xd1\x07\xb3\x00\xe6\xedpt\x10\x00\x00\x00' >>> a = IP(dst="1.1.1.1", src="2.2.2.2")/TCP(seq=1)/HTTP()/HTTPResponse(Content_Encoding="gzip", Transfer_Encoding="chunked")/(b"5\r\n" + z[:5] + b"\r\n") >>> b = IP(dst="1.1.1.1", src="2.2.2.2")/TCP(seq=len(a[TCP].payload)+1)/HTTP()/(hex(len(z[5:])).encode()[2:] + b"\r\n" + z[5:] + b"\r\n0\r\n\r\n") >>> xa, xb = IP(raw(a)), IP(raw(b)) >>> conf.contribs["http"]["auto_compression"] = True >>> conf.contribs["http"]["auto_chunk"] = True >>> >>> c = sniff(offline=[xa, xb], session=TCPSession)[0] >>> import gzip >>> assert gzip.decompress(z) == c.load ###### ## Test HTTP client/server ###### ###(013)=[passed] Util function to launch HTTP_server >>> from scapy.layers.http import ( ... HTTP_Server, ... HTTPS_Server, ... HTTP_AUTH_MECHS, ... ) >>> >>> class run_httpserver: ... def __init__(self, mech=None, ssp=None, ssl=False, **kwargs): ... self.server = None ... self.mech = mech ... self.ssp = ssp ... self.ssl = ssl ... self.kwargs = kwargs ... def __enter__(self): ... if self.ssl: ... cls = HTTPS_Server ... self.kwargs["cert"] = scapy_path("/test/scapy/layers/tls/pki/srv_cert.pem") ... self.kwargs["key"] = scapy_path("/test/scapy/layers/tls/pki/srv_key.pem") ... print("@ Starting https server") ... else: ... cls = HTTP_Server ... print("@ Starting http server") ... # Start server ... self.server = cls.spawn( ... 8080, ... iface=conf.loopback_name, ... mech=self.mech, ssp=self.ssp, ... bg=True, ... **self.kwargs, ... ) ... # wait for it to start ... for i in range(10): ... sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ... sock.settimeout(1) ... try: ... sock.connect(("127.0.0.1", 8080)) ... break ... except Exception: ... time.sleep(0.5) ... finally: ... sock.close() ... else: ... raise TimeoutError ... print("@ Server started !") ... def __exit__(self, exc_type, exc_value, traceback): ... print("@ Stopping http server !") ... try: ... self.server.shutdown(socket.SHUT_RDWR) ... except OSError: ... pass ... self.server.close() ... if traceback: ... # failed ... print("\nTest failed.") ... raise traceback ... print("@ http server stopped !") ... ###(014)=[passed] HTTP - HTTP_client fails to ask HTTP_server that required authentication >>> from scapy.layers.http import HTTP_Client >>> >>> with run_httpserver(mech=HTTP_AUTH_MECHS.NTLM, ssp=NTLMSSP(IDENTITIES={"user": MD4le("password")})): ... client = HTTP_Client() ... resp = client.request("http://127.0.0.1:8080") ... client.close() ... @ Starting http server Server HTTP_Server started listening on ('127.0.0.1', 8080) @ Server started ! ┃ Connecting to 127.0.0.1 on port 8080... ┃ Connection received from ('127.0.0.1', 40634) └ Connected from ('127.0.0.1', 40650) >> HTTP / GET '/' ┃ Connection received from ('127.0.0.1', 40650) > HTTP / GET '/' << HTTP / 401 Unauthorized X Connection to server closed > CLOSED @ Stopping http server ! @ http server stopped ! >>> assert resp.Status_Code == b"401" X Server closed. ###(015)=[passed] HTTP - HTTP_client asks HTTP_server with NTLMSSP >>> from scapy.layers.http import HTTP_Client >>> >>> with run_httpserver(mech=HTTP_AUTH_MECHS.NTLM, ssp=NTLMSSP(IDENTITIES={"user": MD4le("password")})): ... client = HTTP_Client( ... HTTP_AUTH_MECHS.NTLM, ... ssp=NTLMSSP(UPN="user", PASSWORD="password"), ... ) ... resp = client.request("http://127.0.0.1:8080") ... client.close() ... @ Starting http server Server HTTP_Server started listening on ('127.0.0.1', 8080) ┃ Connection received from ('127.0.0.1', 40662) @ Server started ! ┃ Connecting to 127.0.0.1 on port 8080... └ Connected from ('127.0.0.1', 40676) >> HTTP / GET '/' ┃ Connection received from ('127.0.0.1', 40676) > HTTP / GET '/' << HTTP / 401 Unauthorized >> HTTP / GET '/' > HTTP / GET '/' << HTTP / 401 Unauthorized >> HTTP / GET '/' > HTTP / GET '/' > AUTH OK > HTTP / GET '/' -> 200 OK / Raw << HTTP / 200 OK / Raw X Connection to server closed @ Stopping http server ! @ http server stopped ! >>> assert resp.load == b'

OK

' ###(016)=[passed] HTTP - HTTP_Server with native python client with Basic auth >>> import urllib.request >>> from scapy.layers.http import HTTP_Client >>> >>> password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() >>> password_mgr.add_password(None, '127.0.0.1:8080', "user", "password") >>> handler = urllib.request.HTTPBasicAuthHandler(password_mgr) >>> opener = urllib.request.build_opener(handler) X Server closed. > CLOSED >>> >>> with run_httpserver(mech=HTTP_AUTH_MECHS.BASIC, BASIC_IDENTITIES={"user": "password"}): ... with opener.open('http://127.0.0.1:8080/') as f: ... html = f.read().decode('utf-8') ... @ Starting http server Server HTTP_Server started listening on ('127.0.0.1', 8080) ┃ Connection received from ('127.0.0.1', 40684) @ Server started ! ┃ Connection received from ('127.0.0.1', 40700) > HTTP / GET '/' ┃ Connection received from ('127.0.0.1', 40716) > HTTP / GET '/' > AUTH OK > HTTP / GET '/' -> 200 OK / Raw @ Stopping http server ! @ http server stopped ! >>> assert html == "

OK

" X Server closed. > CLOSED > CLOSED ###(017)=[passed] HTTP - HTTP_Server with native python client without auth >>> import urllib.request >>> >>> with run_httpserver(mech=HTTP_AUTH_MECHS.NONE): ... with urllib.request.urlopen('http://127.0.0.1:8080/') as f: ... html = f.read().decode('utf-8') ... @ Starting http server Server HTTP_Server started listening on ('127.0.0.1', 8080) ┃ Connection received from ('127.0.0.1', 40728) @ Server started ! ┃ Connection received from ('127.0.0.1', 40734) > HTTP / GET '/' -> 200 OK / Raw @ Stopping http server ! @ http server stopped ! >>> assert html == "

OK

" ###### ## Test HTTPS client/server ###### ###(018)=[passed] HTTPS - HTTPS_client asks HTTPS_server with NTLMSSP and CBT >>> from scapy.layers.http import HTTP_Client >>> >>> with run_httpserver(mech=HTTP_AUTH_MECHS.NTLM, ssp=NTLMSSP(IDENTITIES={"user": MD4le("password")}), ssl=True): ... client = HTTP_Client( ... HTTP_AUTH_MECHS.NTLM, ... ssp=NTLMSSP(UPN="user", PASSWORD="password"), ... no_check_certificate=True, ... ) > CLOSED ... resp = client.request("https://127.0.0.1:8080") ... client.close() ... @ Starting https server X Server closed. Server HTTPS_Server started listening on ('127.0.0.1', 8080) ┃ Connection received from ('127.0.0.1', 40744) @ Server started ! ┃ Connecting to 127.0.0.1 on port 8080 with SSL... └ Connected from ('127.0.0.1', 40758) X Connection aborted. ┃ Connection received from ('127.0.0.1', 40758) >> HTTP / GET '/' > HTTP / GET '/' << HTTP / 401 Unauthorized >> HTTP / GET '/' > HTTP / GET '/' << HTTP / 401 Unauthorized >> HTTP / GET '/' > HTTP / GET '/' > AUTH OK > HTTP / GET '/' -> 200 OK / Raw << HTTP / 200 OK / Raw X Connection to server closed @ Stopping http server ! @ http server stopped ! >>> assert resp.load == b'

OK

' Scapy IPv4 layers tests ━ Run at 04:11:42 from [test/scapy/layers/inet.uts] by UTscapy in 4.3189263343811035 └ Passed=64 └ Failed=0 ###### ## Test IP options ###### ###(000)=[passed] IP options individual assembly >>> r = raw(IPOption()) >>> r b'\x00\x02' >>> assert r == b'\x00\x02' >>> r = raw(IPOption_NOP()) >>> r b'\x01' >>> assert r == b'\x01' >>> r = raw(IPOption_EOL()) >>> r b'\x00' >>> assert r == b'\x00' >>> r = raw(IPOption_LSRR(routers=["1.2.3.4","5.6.7.8"])) >>> r b'\x83\x0b\x04\x01\x02\x03\x04\x05\x06\x07\x08' >>> assert r == b'\x83\x0b\x04\x01\x02\x03\x04\x05\x06\x07\x08' >>> r = raw(IPOption_Timestamp(internet_address='192.168.15.7', timestamp=11223344)) >>> r b'D\x0c\t\x01\xc0\xa8\x0f\x07\x00\xabA0' >>> assert r == b'D\x0c\t\x01\xc0\xa8\x0f\x07\x00\xabA0' >>> r = raw(IPOption_Timestamp(flg=0, length=8)) >>> r b'D\x08\t\x00\x00\x00\x00\x00' >>> assert r == b'D\x08\t\x00\x00\x00\x00\x00' ###(001)=[passed] IP options individual dissection >>> io = IPOption(b"\x00") >>> io >>> assert io.option == 0 and isinstance(io, IPOption_EOL) >>> io = IPOption(b"\x01") >>> io >>> assert io.option == 1 and isinstance(io, IPOption_NOP) >>> lsrr=b'\x83\x0b\x04\x01\x02\x03\x04\x05\x06\x07\x08' >>> p=IPOption_LSRR(lsrr) >>> p >>> q=IPOption(lsrr) >>> q >>> assert p == q ###(002)=[passed] IP assembly and dissection with options >>> p = IP(src="9.10.11.12",dst="13.14.15.16",options=IPOption_SDBM(addresses=["1.2.3.4","5.6.7.8"]))/TCP() >>> r = raw(p) >>> r b'H\x00\x004\x00\x01\x00\x00@\x06\xa2q\t\n\x0b\x0c\r\x0e\x0f\x10\x95\n\x01\x02\x03\x04\x05\x06\x07\x08\x00\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00_K\x00\x00' >>> assert r == b'H\x00\x004\x00\x01\x00\x00@\x06\xa2q\t\n\x0b\x0c\r\x0e\x0f\x10\x95\n\x01\x02\x03\x04\x05\x06\x07\x08\x00\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00_K\x00\x00' >>> q=IP(r) >>> q , , ] |> >>> assert isinstance(q.options[0],IPOption_SDBM) >>> assert q[IPOption_SDBM].addresses[1] == "5.6.7.8" >>> p.options[0].addresses[0] = '5.6.7.8' >>> assert IP(raw(p)).options[0].addresses[0] == '5.6.7.8' >>> p = IP(src="9.10.11.12", dst="13.14.15.16", options=[IPOption_NOP(),IPOption_LSRR(routers=["1.2.3.4","5.6.7.8"]),IPOption_Security(transmission_control_code="XYZ")])/TCP() >>> p , , ] |> >>> r = raw(p) >>> r b'K\x00\x00@\x00\x01\x00\x00@\x06\xf3\x83\t\n\x0b\x0c\r\x0e\x0f\x10\x01\x83\x0b\x04\x01\x02\x03\x04\x05\x06\x07\x08\x82\x0b\x00\x00\x00\x00\x00\x00XYZ\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00o[\x00\x00' >>> assert r == b'K\x00\x00@\x00\x01\x00\x00@\x06\xf3\x83\t\n\x0b\x0c\r\x0e\x0f\x10\x01\x83\x0b\x04\x01\x02\x03\x04\x05\x06\x07\x08\x82\x0b\x00\x00\x00\x00\x00\x00XYZ\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00o[\x00\x00' >>> q = IP(r) >>> q , , , ] |> >>> assert q[IPOption_LSRR].get_current_router() == "1.2.3.4" >>> assert q[IPOption_Security].transmission_control_code == b"XYZ" >>> assert q[TCP].flags == 2 ###### ## Sessions ###### ###(003)=[passed] IPSession - dissect fragmented IP packets on-the-flow >>> packet = IP()/("data"*1000) >>> frags = fragment(packet) >>> tmp_file = get_temp_file() >>> wrpcap(tmp_file, frags) >>> >>> dissected_packets = [] >>> def callback(pkt): ... dissected_packets.append(pkt) ... >>> sniff(offline=tmp_file, session=IPSession, prn=callback) >>> assert len(dissected_packets) == 1 >>> assert raw(dissected_packets[0]) == raw(packet) ###(004)=[passed] IPSession - contains non-IP packets >>> pkts = fragment(IP(dst="10.0.0.5")/ICMP()/("X"*1500)) >>> pkts.insert(1, ARP()) >>> assert len(pkts) == 3 >>> >>> pkts = sniff(offline=pkts, session=IPSession) >>> assert len(pkts) == 2 >>> assert pkts[1].load == b"X" * 1500 ###(005)=[passed] StringBuffer >>> buffer = StringBuffer() >>> assert not buffer >>> >>> buffer.append(b"kie", 5) >>> buffer.append(b"e", 11) >>> buffer.append(b"pi", 2) >>> buffer.append(b"pi", 9) >>> buffer.append(b"n", 4) >>> >>> assert bytes_hex(bytes(buffer)) == b'0070696e6b696500706965' >>> assert len(buffer) == 11 >>> assert buffer >>> >>> buffer = StringBuffer() >>> buffer.append(b"") >>> assert not buffer >>> assert bytes(buffer) == b"" ###### ## Test fragment() / defragment() functions ###### ###(006)=[passed] fragment() create the packet create the fragments count the fragments each fragment except the last one should have MF set each fragment except the last one should have a payload of fragsize bytes >>> payloadlen, fragsize = 100, 8 >>> assert fragsize % 8 == 0 >>> fragcount = (payloadlen // fragsize) + bool(payloadlen % fragsize) >>> pkt = IP() / ("X" * payloadlen) >>> frags = fragment(pkt, fragsize) >>> assert len(frags) == fragcount >>> assert all(p.flags == 1 for p in frags[:-1]) >>> assert frags[-1].flags == 0 >>> assert all(len(p.payload) == 8 for p in frags[:-1]) >>> assert len(frags[-1].payload) == ((payloadlen % fragsize) or fragsize) ###(007)=[passed] fragment() and overloaded_fields >>> pkt1 = Ether() / IP() / UDP() >>> pkt2 = fragment(pkt1)[0] >>> pkt3 = pkt2.__class__(raw(pkt2)) >>> assert pkt1[IP].proto == pkt2[IP].proto == pkt3[IP].proto ###(008)=[passed] fragment() already fragmented packets each fragment except the last one should have MF set fragment offset should be well computed >>> payloadlen = 1480 * 3 >>> ffrags = fragment(IP() / ("X" * payloadlen), 1480) >>> ffrags = fragment(ffrags, 1400) >>> len(ffrags) == 6 True >>> assert all(p.flags == 1 for p in ffrags[:-1]) >>> assert ffrags[-1].flags == 0 >>> plen = 0 >>> for p in ffrags: ... assert p.frag == plen // 8 ... plen += len(p.payload) ... >>> assert plen == payloadlen ###(009)=[passed] fragment() with non-multiple-of-8 MTU >>> paylen = 1400 + 1 >>> frags1 = fragment(IP() / ("X" * paylen), paylen) >>> assert len(frags1) == 1 >>> frags2 = fragment(IP() / ("X" * (paylen + 1)), paylen) >>> assert len(frags2) == 2 >>> assert len(frags2[0]) == 20 + paylen - paylen % 8 >>> assert len(frags2[1]) == 20 + 1 + paylen % 8 ###(010)=[passed] fragment() with fragsize lower than 8 >>> paylen = 5 >>> fragsize = paylen >>> frags1 = fragment(IP() / ("X" * paylen), paylen) fragsize cannot be lower than 8 >>> assert len(frags1) == 1 >>> assert bytes(frags1[0].payload) == b"X" * paylen >>> >>> fragsize = paylen + 1 >>> frags2 = fragment(IP() / ("X" * paylen), fragsize) fragsize cannot be lower than 8 >>> assert len(frags2) == 1 >>> assert bytes(frags2[0].payload) == b"X" * paylen >>> >>> paylen = 16 >>> fragsize = 5 >>> frags3 = fragment(IP() / ("X" * paylen), fragsize) more fragsize cannot be lower than 8 >>> assert len(frags3) == 2 >>> assert bytes(frags3[0].payload) == b"X" * 8 >>> assert bytes(frags3[1].payload) == b"X" * 8 ###(011)=[passed] defrag() >>> nonfrag, unfrag, badfrag = defrag(frags) >>> assert not nonfrag >>> assert not badfrag >>> assert len(unfrag) == 1 ###(012)=[passed] defragment() we should have one single packet which should be the same as pkt reconstructed >>> defrags = defragment(frags) >>> assert len(defrags) == 1 >>> assert bytes(defrags[0]) == bytes(pkt) ###(013)=[passed] defragment() uses timestamp of last fragment >>> payloadlen, fragsize = 100, 8 >>> assert fragsize % 8 == 0 >>> packet = Ether()/IP()/("X" * payloadlen) >>> frags = fragment(packet, fragsize) >>> for i,frag in enumerate(frags): ... frag.time -= 100 + i ... >>> last_time = max(frag.time for frag in frags) >>> defrags = defragment(frags) >>> assert defrags[0].time == last_time >>> nonfrag, defrags, badfrag = defrag(frags) >>> assert defrags[0].time == last_time ###(014)=[passed] defragment() - Missing fragments >>> pkts = fragment(IP(dst="10.0.0.5")/ICMP()/("X"*1500)) >>> assert len(defragment(pkts[1:])) == 1 Fragment overlap (0 < 1480) on > ###(015)=[passed] defrag() / defragment() - Real DNS packets >>> import base64 >>> >>> a = base64.b64decode('bnmYJ63mREVTUwEACABFAAV0U8UgADIR+u0EAgIECv0DxAA1sRIL83Z7gbCBgAABAB0AAAANA255YwNnb3YAAP8AAcAMAAYAAQAAA4QAKgZ2d2FsbDDADApob3N0bWFzdGVywAx4Og5wAAA4QAAADhAAJOoAAAACWMAMAC4AAQAAA4QAmwAGCAIAAAOEWWm9jVlgdP0mfQNueWMDZ292AHjCDBL0C1rEKUjsuG6Zg3+Rs6gj6llTABm9UZnWk+rRu6nPqW4N7AEllTYqNK+r6uFJ2KhfG3MDPS1F/M5QCVR8qkcbgrqPVRBJAG67/ZqpGORppQV6ib5qqo4ST5KyrgKpa8R1fWH8Fyp881NWLOZekM3TQyczcLFrvw9FFjdRwAwAAQABAAADhAAEobkenMAMAC4AAQAAA4QAmwABCAIAAAOEWWm9jVlgdP0mfQNueWMDZ292ABW8t5tEv9zTLdB6UsoTtZIF6Kx/c4ukIud8UIGM0XdXnJYx0ZDyPDyLVy2rfwmXdEph3KBWAi5dpRT16nthlMmWPQxD1ecg9rc8jcaTGo8z833fYJjzPT8MpMTxhapu4ANSBVbv3LRBnce2abu9QaoCdlHPFHdNphp6JznCLt4jwAwAMAABAAADhAEIAQEDCAMBAAF77useCfI+6T+m6Tsf2ami8/q5XDtgS0Ae7F0jUZ0cpyYxy/28DLFjJaS57YiwAYaabkkugxsoSv9roqBNZjD+gjoUB+MK8fmfaqqkSOgQuIQLZJeOORWD0gAj8mekw+S84DECylbKyYEGf8CB3/59IfV+YkTcHhXBYrMNxhMK1Eiypz4cgYxXiYUSz7jbOmqE3hU2GinhRmNW4Trt4ImUruSO+iQbTTj6LtCtIsScOF4vn4gcLJURLHOs+mf1NU9Yqq9mPC9wlYZk+8rwqcjVIiRpDmmv83huv4be1x1kkz2YqTFwtc33Fzt6SZk96Qtk2wCgg8ZQqLKGx5uwIIyrwAwAMAABAAADhAEIAQEDCAMBAAGYc7SWbSinSc3u8ZcYlO0+yZcJD1vqC5JARxZjKNzszHxc9dpabBtR9covySVu1YaBVrlxNBzfyFd4PKyjvPcBER5sQImoCikC+flD5NwXJbnrO1SG0Kzp8XXDCZpBASxuBF0vjUSU9yMqp0FywCrIfrbfCcOGAFIVP0M2u8dVuoI4nWbkRFc0hiRefoxc1O2IdpR22GAp2OYeeN2/tnFBz/ZMQitU2IZIKBMybKmWLC96tPcqVdWJX6+M1an1ox0+NqBZuPjsCx0/lZbuB/rLHppJOmkRc7q2Fw/tpHOyWHV+ulCfXem9Up/sbrMcP7uumFz0FeNhBPtg3u5kA5OVwAwAMAABAAADhACIAQADCAMBAAF5mlzmmq8cs6Hff0qZLlGKYCGPlG23HZw2qAd7N2FmrLRqPQ0R/hbnw54MYiIs18zyfm2J+ZmzUvGd+gjHGx3ooRRffQQ4RFLq6g6oxaLTbtvqPFbWt4Kr2GwX3UslgZCzH5mXLNpPI2QoetIcQCNRdcxn5QpWxPppCVXbKdNvvcAMADAAAQAAA4QAiAEAAwgDAQABqeGHtNFc0Yh6Pp/aM+ntlDW1fLwuAWToGQhmnQFBTiIUZlH7QMjwh5oMExNp5/ABUb3qBsyk9CLanRfateRgFJCYCNYofrI4S2yqT5X9vvtCXeIoG/QqMSl3PJk4ClYufIKjMPgl5IyN6yBIMNmmsATlMMu5TxM68a/CLCh92L3ADAAuAAEAAAOEAJsAMAgCAAADhFlpvY1ZYHT9Jn0DbnljA2dvdgAViVpFoYwy9dMUbOPDHTKt/LOtoicvtQbHeXiUSQeBkGWTLyiPc/NTW9ZC4WK5AuSj/0+V') >>> b = base64.b64decode('bnmYJ63mREVTUwEACABFAAV0U8UgrDIR+kEEAgIECv0DxApz1F5olFRytjhNlG/JbdW0NSAFeUUF4rBRqsly/h6nFWKoQfih35Lm+BFLE0FoMaikWCjGJQIuf0CXiElMSQifiDM+KTeecNkCgTXADAAuAAEAAAOEARsAMAgCAAADhFlpvY1ZYHT9VwUDbnljA2dvdgAdRZxvC6VlbYUVarYjan0/PlP70gSz1SiYCDZyw5dsGo9vrZd+lMcAm5GFjtKYDXeCb5gVuegzHSNzxDQOa5lVKLQZfXgVHsl3jguCpYwKAygRR3mLBGtnhPrbYcPGMOzIxO6/UE5Hltx9SDqKNe2+rtVeZs5FyHQE5pTVGVjNED9iaauEW9UF3bwEP3K+wLgxWeVycjNry/l4vt9Z0fyTU15kogCZG8MXyStJlzIgdzVZRB96gTJbGBDRFQJfbE2Af+INl0HRY4p+bqQYwFomWg6Tzs30LcqAnkptknb5peUNmQTBI/MU00A6NeVJxkKK3+lf2EuuiJl+nFpfWiKpwAwAMwABAAADhAAJAQAADASqu8zdwAwALgABAAADhACbADMIAgAAA4RZab2NWWB0/SZ9A255YwNnb3YAVhcqgSl33lqjLLFR8pQ2cNhdX7dKZ2gRy0vUHOa+980Nljcj4I36rfjEVJCLKodpbseQl0OeTsbfNfqOmi1VrsypDl+YffyPMtHferm02xBK0agcTMdP/glpuKzdKHTiHTlnSOuBpPnEpgxYPNeBGx8yzMvIaU5rOCxuO49Sh/PADAACAAEAAAOEAAoHdndhbGw0YcAMwAwAAgABAAADhAAKB3Z3YWxsMmHADMAMAAIAAQAAA4QACgd2d2FsbDNhwAzADAACAAEAAAOEAAoHdndhbGwxYcAMwAwALgABAAADhACbAAIIAgAAA4RZab2NWWB0/SZ9A255YwNnb3YANn7LVY7YsKLtpH7LKhUz0SVsM/Gk3T/V8I9wIEZ4vEklM9hI92D2aYe+9EKxOts+/py6itZfANXU197pCufktASDxlH5eWSc9S2uqrRnUNnMUe4p3Jy9ZCGhiHDemgFphKGWYTNZUJoML2+SDzbv9tXo4sSbZiKJCDkNdzSv2lfADAAQAAEAAAOEAEVEZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uPWMycnhTa2VPZUxpSG5iY24tSXhZZm5mQjJQcTQzU3lpeEVka2k2ODZlNDTADAAQAAEAAAOEADc2dj1zcGYxIGlwNDoxNjEuMTg1LjIuMC8yNSBpcDQ6MTY3LjE1My4xMzIuMC8yNSBteCAtYWxswAwALgABAAADhACbABAIAgAAA4RZab2NWWB0/SZ9A255YwNnb3YAjzLOj5HUtVGhi/emNG90g2zK80hrI6gh2d+twgVLYgWebPeTI2D2ylobevXeq5rK5RQgbg2iG1UiTBnlKPgLPYt8ZL+bi+/v5NTaqHfyHFYdKzZeL0dhrmebRbYzG7tzOllcAOOqieeO29Yr4gz1rpiU6g75vkz6yQoHNfmNVMXADAAPAAEAAAOEAAsAZAZ2d2FsbDLADMAMAA8AAQAAA4QACwBkBnZ3YWxsNMAMwAwADwABAAADhAALAAoGdndhbGwzwAzADAAPAAEAAAOEAAsACgZ2d2FsbDXADMAMAA8AAQAAA4QACwAKBnZ3YWxsNsAMwAwADwABAAADhAALAAoGdndhbGw3wAzADAAPAAEAAAOEAAsACgZ2d2FsbDjADMAMAA8AAQAAA4QACwBkBnZ3YWxsMcAMwAwALgABAAADhACbAA8IAgAAA4RZab2NWWB0/SZ9A255YwNnb3YAooXBSj6PfsdBd8sEN/2AA4cvOl2bcioO') >>> c = base64.b64decode('bnmYJ63mREVTUwEACABFAAFHU8UBWDIRHcMEAgIECv0DxDtlufeCT1zQktat4aEVA8MF0FO1sNbpEQtqfu5Al//OJISaRvtaArR/tLUj2CoZjS7uEnl7QpP/Ui/gR0YtyLurk9yTw7Vei0lSz4cnaOJqDiTGAKYwzVxjnoR1F3n8lplgQaOalVsHx9UAAQABAAADLAAEobkBA8epAAEAAQAAAywABKG5AQzHvwABAAEAAAMsAASnmYIMx5MAAQABAAADLAAEp5mCDcn9AAEAAQAAAqUABKeZhAvKFAABAAEAAAOEAAShuQIfyisAAQABAAADhAAEobkCKcpCAAEAAQAAA4QABKG5AjPKWQABAAEAAAOEAAShuQI9ynAAAQABAAADhAAEobkCC8nPAAEAAQAAA4QABKG5AgzJ5gABAAEAAAOEAASnmYQMAAApIAAAAAAAAAA=') >>> d = base64.b64decode('////////REVTUwEACABFAABOawsAAIARtGoK/QExCv0D/wCJAIkAOry/3wsBEAABAAAAAAAAIEVKRkRFQkZFRUJGQUNBQ0FDQUNBQ0FDQUNBQ0FDQUFBAAAgAAEAABYP/WUAAB6N4XIAAB6E4XsAAACR/24AADyEw3sAABfu6BEAAAkx9s4AABXB6j4AAANe/KEAAAAT/+wAAB7z4QwAAEuXtGgAAB304gsAABTB6z4AAAdv+JAAACCu31EAADm+xkEAABR064sAABl85oMAACTw2w8AADrKxTUAABVk6psAABnF5joAABpA5b8AABjP5zAAAAqV9WoAAAUW+ukAACGS3m0AAAEP/vAAABoa5eUAABYP6fAAABX/6gAAABUq6tUAADXIyjcAABpy5Y0AABzb4yQAABqi5V0AAFXaqiUAAEmRtm4AACrL1TQAAESzu0wAAAzs8xMAAI7LcTQAABxN47IAAAbo+RcAABLr7RQAAB3Q4i8AAAck+NsAABbi6R0AAEdruJQAAJl+ZoEAABDH7zgAACOA3H8AAAB5/4YAABQk69sAAEo6tcUAABJU7asAADO/zEAAABGA7n8AAQ9L8LMAAD1DwrwAAB8F4PoAABbG6TkAACmC1n0AAlHErjkAABG97kIAAELBvT4AAEo0tcsAABtC5L0AAA9u8JEAACBU36sAAAAl/9oAABBO77EAAA9M8LMAAA8r8NQAAAp39YgAABB874MAAEDxvw4AAEgyt80AAGwsk9MAAB1O4rEAAAxL87QAADtmxJkAAATo+xcAAAM8/MMAABl55oYAACKh3V4AACGj3lwAAE5ssZMAAC1x0o4AAAO+/EEAABNy7I0AACYp2dYAACb+2QEAABB974IAABc36MgAAA1c8qMAAAf++AEAABDo7xcAACLq3RUAAA8L8PQAAAAV/+oAACNU3KsAABBv75AAABFI7rcAABuH5HgAABAe7+EAAB++4EEAACBl35oAAB7c4SMAADgJx/YAADeVyGoAACKN3XIAAA/C8D0AAASq+1UAAOHPHjAAABRI67cAAABw/48=') >>> >>> with no_debug_dissector(): ... plist = PacketList([Ether(x) for x in [a, b, c, d]]) ... >>> left, defragmented, errored = defrag(plist) >>> assert len(left) == 1 >>> assert left[0] == Ether(d) >>> assert len(defragmented) == 1 >>> assert len(defragmented[0]) == 3093 >>> assert defragmented[0][DNSRR].rrname == b'nyc.gov.' >>> assert len(errored) == 0 >>> >>> plist_def = defragment(plist) >>> assert len(plist_def) == 2 >>> assert len(plist_def[0]) == 3093 >>> assert plist_def[0][DNSRR].rrname == b'nyc.gov.' ###(016)=[passed] Packet().fragment() create the packet create the fragments count the fragments each fragment except the last one should have MF set each fragment except the last one should have a payload of fragsize bytes >>> payloadlen, fragsize = 100, 8 >>> assert fragsize % 8 == 0 >>> fragcount = (payloadlen // fragsize) + bool(payloadlen % fragsize) >>> pkt = IP() / ("X" * payloadlen) >>> frags = pkt.fragment(fragsize) >>> assert len(frags) == fragcount >>> assert all(p.flags == 1 for p in frags[:-1]) >>> assert frags[-1].flags == 0 >>> assert all(len(p.payload) == 8 for p in frags[:-1]) >>> assert len(frags[-1].payload) == ((payloadlen % fragsize) or fragsize) ###(017)=[passed] Packet().fragment() and overloaded_fields >>> pkt1 = Ether() / IP() / UDP() >>> pkt2 = pkt1.fragment()[0] >>> pkt3 = pkt2.__class__(raw(pkt2)) >>> assert pkt1[IP].proto == pkt2[IP].proto == pkt3[IP].proto ###(018)=[passed] Packet().fragment() already fragmented packets each fragment except the last one should have MF set fragment offset should be well computed >>> payloadlen = 1480 * 3 >>> ffrags = (IP() / ("X" * payloadlen)).fragment(1480) >>> ffrags = reduce(lambda x, y: x + y, (pkt.fragment(1400) for pkt in ffrags)) >>> len(ffrags) == 6 True >>> assert all(p.flags == 1 for p in ffrags[:-1]) >>> assert ffrags[-1].flags == 0 >>> plen = 0 >>> for p in ffrags: ... assert p.frag == plen / 8 ... plen += len(p.payload) ... >>> assert plen == payloadlen ###### ## TCP/IP tests ###### ###(019)=[passed] TCP options: UTO - basic build >>> raw(TCP(options=[("UTO", 0xffff)])) == b"\x00\x14\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x20\x00\x00\x00\x00\x00\x1c\x04\xff\xff" No IP underlayer to compute checksum. Leaving null. True ###(020)=[passed] TCP options: UTO - basic dissection >>> uto = TCP(b"\x00\x14\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x20\x00\x00\x00\x00\x00\x1c\x04\xff\xff") >>> uto[TCP].options[0][0] == "UTO" and uto[TCP].options[0][1] == 0xffff True ###(021)=[passed] TCP options: SAck - basic build >>> raw(TCP(options=[(5, b"abcdefgh")])) == b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02 \x00\x00\x00\x00\x00\x05\nabcdefgh\x00\x00" No IP underlayer to compute checksum. Leaving null. True ###(022)=[passed] TCP options: SAck - basic dissection >>> sack = TCP(b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02 \x00\x00\x00\x00\x00\x05\nabcdefgh\x00\x00") >>> sack[TCP].options[0][0] == "SAck" and sack[TCP].options[0][1] == (1633837924, 1701209960) True ###(023)=[passed] TCP options: SAckOK - basic build >>> raw(TCP(options=[('SAckOK', b'')])) == b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x04\x02\x00\x00" No IP underlayer to compute checksum. Leaving null. True ###(024)=[passed] TCP options: SAckOK - basic dissection >>> sackok = TCP(b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x04\x02\x00\x00") >>> sackok[TCP].options[0][0] == "SAckOK" and sackok[TCP].options[0][1] == b'' True ###(025)=[passed] TCP options: EOL - basic build >>> raw(TCP(options=[(0, '')])) == b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x00\x00\x00\x00" No IP underlayer to compute checksum. Leaving null. True ###(026)=[passed] TCP options: EOL - basic dissection >>> eol = TCP(b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x00\x02\x00\x00") >>> eol[TCP].options[0][0] == "EOL" and eol[TCP].options[0][1] == None True ###(027)=[passed] TCP options: malformed - build >>> raw(TCP(options=[('unknown', b'')])) == raw(TCP()) Option [unknown] unknown. Skipped. Option [unknown] unknown. Skipped. No IP underlayer to compute checksum. Leaving null. No IP underlayer to compute checksum. Leaving null. True ###(028)=[passed] TCP options: malformed - dissection >>> raw(TCP(b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x03\x00\x00\x00")) == b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00`\x02 \x00\x00\x00\x00\x00\x03\x00\x00\x00" Malformed TCP option (announced length is 0) True ###(029)=[passed] TCP options: wrong offset >>> TCP(raw(TCP(dataofs=11)/b"o")) No IP underlayer to compute checksum. Leaving null. Malformed TCP option (announced length is 0) ###(030)=[passed] TCP options: MPTCP - basic build using bytes >>> raw(TCP(options=[(30, b"\x10\x03\xc1\x1c\x95\x9b\x81R_1")])) == b"\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02 \x00\x00\x00\x00\x00\x1e\x0c\x10\x03\xc1\x1c\x95\x9b\x81R_1" No IP underlayer to compute checksum. Leaving null. True ###(031)=[passed] TCP options: MD5 build and parse >>> md5sig = b"0123456789abcdef" >>> p = IP() / TCP(options=[('MD5', md5sig)]) >>> md5opt = IP(raw(p))[TCP].options[0] >>> md5opt[0] == 'MD5' True >>> md5opt[1] == md5sig True ###(032)=[passed] TCP options: MD5 IPv4 (depends on default values) >>> p = IP() / TCP() >>> mac = calc_tcp_md5_hash(p[TCP], b"12345") >>> assert mac == bytearray.fromhex("797e69f8dbe44a8b84f687a2832595ed") ###(033)=[passed] TCP options: MD5 IPv6 (depends on default values) >>> p = IPv6() / TCP() >>> mac = calc_tcp_md5_hash(p[TCP], b"12345") >>> assert mac == bytearray.fromhex("3711309b0305a4269ec5dbc27183e9a0") ###(034)=[passed] TCP options: MD5 sign (depends on default values) >>> p = IP() / TCP() >>> sign_tcp_md5(p[TCP], b"12345") >>> raw(p[TCP]) == bytearray.fromhex("001400500000000000000000a0022000fec200001312797e69f8dbe44a8b84f687a2832595ed0000") True >>> md5opt = IP(raw(p))[TCP].options[0] >>> md5opt[1] == bytearray.fromhex("797e69f8dbe44a8b84f687a2832595ed") True ###(035)=[passed] TCP Authentication Option: build >>> opt = TCPAOValue(keyid=1, rnextkeyid=2, mac=b"FAKE") >>> assert opt.keyid == 1 >>> assert opt.rnextkeyid == 2 >>> assert opt.mac == b"FAKE" >>> assert bytes(opt) == b"\x01\x02FAKE" ###(036)=[passed] TCP Authentication Option: parse >>> opt = TCPAOValue(b"\x01\x02FAKE") >>> assert opt.keyid == 1 >>> assert opt.rnextkeyid == 2 >>> assert opt.mac == b"FAKE" ###(037)=[passed] TCP Authentication Option: parse from TCP >>> p = IP(bytes.fromhex("45e0004cdd0f4000ff06bf6b0a0b0c0dac1b1c1de9d700b3fbfbab5a00000000e002ffffcac40000020405b4010303080402080a00155ab7000000001d103d542ee437c6f8ede6d7c4d602e7")) >>> tcpao = get_tcpao(p[TCP]) >>> assert isinstance(tcpao, TCPAOValue) >>> assert tcpao.keyid == 61 >>> assert tcpao.rnextkeyid == 84 >>> assert tcpao.mac == bytearray.fromhex("2ee437c6f8ede6d7c4d602e7") ###(038)=[passed] TCP Authentication Option: build TCP >>> p = TCP(options=[('AO', TCPAOValue(keyid=1, rnextkeyid=2, mac=b"3456"))]) >>> p.summary() 'TCP ftp_data > http S' >>> print(bytes(p)) No IP underlayer to compute checksum. Leaving null. b'\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00p\x02 \x00\x00\x00\x00\x00\x1d\x08\x01\x023456' >>> assert bytes(p).endswith(b"\x01\x023456") No IP underlayer to compute checksum. Leaving null. ###(039)=[passed] TCP options: invalid data offset >>> data = b'\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02 \x00\x1b\xb8\x00\x00\x02\x04\x05\xb4\x04\x02\x08\x06\xf7\xa26C\x00\x00\x00\x00\x01\x03\x03\x07' >>> p = TCP(data) >>> assert TCP in p and Raw in p and len(p.options) == 3 ###(040)=[passed] TCP options: build oversized packet >>> raw(TCP(options=[('TFO', (1607681672, 2269173587)), ('AltChkSum', (81, 27688)), ('TFO', (253281879, 1218258937)), ('Timestamp', (1613741359, 4215831072)), ('Timestamp', (3856332598, 1434258666))])) No IP underlayer to compute checksum. Leaving null. b'\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02 \x00\x00\x00\x00\x00"\n_\xd3F\x88\x87@\xd7S\x0e\x05Ql("\n\x0f\x18\xc6WH\x9d\'\xf9\x08\n`/\xbd/\xfbHz \x08\n\xe5\xda\xf76U}\x0c\xea\x00\x00\x00' ###(041)=[passed] TCP random options >>> pkt = TCP() >>> random.seed(0x2807) >>> pkt = fuzz(pkt) >>> options = pkt.options._fix() >>> options [('UTO', (53062,)), ('Timestamp', (725644109, 3830853589)), ('WScale', (69,)), ('TFO', (1740332174, 38044154)), ('Timestamp', (828782501, 1065035911))] ###(042)=[passed] TCP random options - MD5 (#GH3777) >>> random.seed(0x2813) >>> pkt = TCP(options=RandTCPOptions()._fix()) >>> assert pkt.options[0][0] == "MD5" >>> assert pkt.options[0][1] == (b'\xe3\xa0,\xdc\xe4\xae\x87\x18\xad{\xab\xd0b\x12\x9c\xd6',) >>> assert TCP(bytes(pkt)).options[0][0] == "MD5" No IP underlayer to compute checksum. Leaving null. ###(043)=[passed] IP, TCP & UDP checksums (these tests highly depend on default values) Invalid territory >>> pkt = IP() / TCP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7ccd and bpkt.payload.chksum == 0x917c >>> >>> pkt = IP(len=40) / TCP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7ccd and bpkt.payload.chksum == 0x917c >>> >>> pkt = IP(len=40, ihl=5) / TCP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7ccd and bpkt.payload.chksum == 0x917c >>> >>> pkt = IP() / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc3 and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(len=50) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc3 and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(len=50, ihl=5) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc3 and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(options=[IPOption_RR()]) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bc and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(len=54, options=[IPOption_RR()]) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bc and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(len=54, ihl=6, options=[IPOption_RR()]) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bc and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP(options=[IPOption_Timestamp()]) / TCP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x2caa and bpkt.payload.chksum == 0x4b2c >>> >>> pkt = IP() / UDP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cce and bpkt.payload.chksum == 0x0172 >>> >>> pkt = IP(len=28) / UDP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cce and bpkt.payload.chksum == 0x0172 >>> >>> pkt = IP(len=28, ihl=5) / UDP() >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cce and bpkt.payload.chksum == 0x0172 >>> >>> conf.debug_dissector = False >>> >>> pkt = IP() / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc4 and bpkt.payload.chksum == 0xbb17 >>> >>> pkt = IP(len=38) / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc4 and bpkt.payload.chksum == 0xbb17 >>> >>> pkt = IP(len=38, ihl=5) / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x7cc4 and bpkt.payload.chksum == 0xbb17 >>> >>> pkt = IP(options=[IPOption_RR()]) / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bd and bpkt.payload.chksum == 0xbb17 >>> >>> pkt = IP(len=42, options=[IPOption_RR()]) / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bd and bpkt.payload.chksum == 0xbb17 >>> >>> pkt = IP(len=42, ihl=6, options=[IPOption_RR()]) / UDP() / ("A" * 10) >>> bpkt = IP(raw(pkt)) >>> assert bpkt.chksum == 0x70bd and bpkt.payload.chksum == 0xbb17 >>> >>> conf.debug_dissector = True ###(044)=[passed] IP with forced-length 0 >>> p = IP()/TCP() >>> p[IP].len = 0 >>> p = IP(raw(p)) >>> >>> assert p.len == 0 ###(045)=[passed] TCP payload with IP Total Length 0 >>> data = b'1234567890abcdef123456789ABCDEF' >>> pkt = IP()/TCP()/data >>> pkt2 = IP(raw(pkt)) >>> pkt2.len = 0 >>> pkt3 = IP(raw(pkt2)) >>> assert pkt3.load == data ###(046)=[passed] TCPSession: test tcp_reassemble with variable orders >>> class CustomPacket(Packet): ... fields_desc = [ ... ByteField("len", 0), ... StrLenField("a", 0, length_from=lambda pkt: pkt.len - 1), ... ] ... @classmethod ... def tcp_reassemble(cls, data, metadata, session): ... length = struct.unpack("!B", data[:1])[0] ... if len(data) < length: ... return None ... return CustomPacket(data) ... >>> >>> bind_layers(TCP, CustomPacket, sport=12345) >>> >>> with no_debug_dissector(reverse=True): ... # incremental order ... pkts = sniff(offline=[ ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=1)/b"\x05a", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=3)/"b", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=4)/"c", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=5)/"d", ... ], session=TCPSession) ... assert pkts[0][CustomPacket].a == b"abcd", "incremental failure" ... # same with a pcapng ... tmp_file = get_temp_file() ... wrpcap(tmp_file, [ ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=1)/b"\x05a", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=3)/"b", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=4)/"c", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=5)/"d", ... ]) ... pkts = sniff(offline=tmp_file, session=TCPSession) ... assert pkts[0][CustomPacket].a == b"abcd", "pcapng failure" ... # messed up order: fragments 2 and 3 arrive in the wrong order ... pkts = sniff(offline=[ ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=1)/b"\x05a", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=4)/"c", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=3)/"b", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=5)/"d", ... ], session=TCPSession) ... assert pkts[0][CustomPacket].a == b"abcd", "messed up order 1 failure" ... # messed up order: fragment 1 arrives not in first position ... pkts = sniff(offline=[ ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=6)/"e", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=4)/"c", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=3)/"b", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=5)/"d", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=1)/b"\x06a", ... ], session=TCPSession) ... assert pkts[0][CustomPacket].a == b"abcde", "messed up order 2 failure" ... # retransmitted packets ... pkts = sniff(offline=[ ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=6)/"e", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=4)/"c", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=6)/"e", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=3)/"b", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=5)/"d", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=6)/"e", ... IP(dst="1.1.1.1", src="2.2.2.2")/TCP(sport=12345, dport=12, seq=1)/b"\x06a", ... ], session=TCPSession) ... assert pkts[0][CustomPacket].a == b"abcde", "retransmitted failure" ... >>> split_layers(TCP, CustomPacket, sport=12345) ###(047)=[passed] Layer binding Test DestMACField & DestIPField Same with IPv6 >>> pkt = Ether(raw(Ether()/IP()/UDP(dport=5353)/DNS())) >>> assert isinstance(pkt, Ether) and pkt.dst == '01:00:5e:00:00:fb' >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) and pkt.dst == '224.0.0.251' >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) and pkt.dport == 5353 >>> pkt = pkt.payload >>> assert isinstance(pkt, DNS) and isinstance(pkt.payload, NoPayload) >>> >>> pkt = Ether(raw(Ether()/IPv6()/UDP(dport=5353)/DNS())) >>> assert isinstance(pkt, Ether) and pkt.dst == '33:33:00:00:00:fb' >>> pkt = pkt.payload >>> assert isinstance(pkt, IPv6) and pkt.dst == 'ff02::fb' >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) and pkt.dport == 5353 >>> pkt = pkt.payload >>> assert isinstance(pkt, DNS) and isinstance(pkt.payload, NoPayload) ###(048)=[passed] Layer binding with show() getmacbyip must only be called when building >>> from unittest import mock >>> >>> def _err(*_): ... raise ValueError ... >>> with mock.patch("scapy.layers.l2.getmacbyip", side_effect=_err): ... with mock.patch("scapy.layers.inet.getmacbyip", side_effect=_err): ... # ARP who-has should never call getmacbyip ... pkt1 = Ether() / ARP(pdst="10.0.0.1") ... pkt1.show() ... bytes(pkt1) ... # IP should only call getmacbyip when building ... pkt2 = Ether() / IP(dst="10.0.0.1") ... pkt2.show() ... try: ... bytes(pkt2) ... assert False, "Should have called getmacbyip" ... except ValueError: ... pass ... ###[ Ethernet ]### dst = None src = 52:54:00:e1:37:0d type = ARP ###[ ARP ]### hwtype = Ethernet (10Mb) ptype = IPv4 hwlen = None plen = None op = who-has hwsrc = 52:54:00:e1:37:0d psrc = 192.168.122.12 hwdst = 00:00:00:00:00:00 pdst = 10.0.0.1 b'\xff\xff\xff\xff\xff\xffRT\x00\xe17\r\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01RT\x00\xe17\r\xc0\xa8z\x0c\x00\x00\x00\x00\x00\x00\n\x00\x00\x01' ###[ Ethernet ]### dst = None src = 52:54:00:e1:37:0d type = IPv4 ###[ IP ]### version = 4 ihl = None tos = 0x0 len = None id = 1 flags = frag = 0 ttl = 64 proto = hopopt chksum = None src = 192.168.122.12 dst = 10.0.0.1 \options \ ###(049)=[passed] GRE binding tests Test GRE-in-IP Test GRE-in-IPv6 Test GRE-in-UDP Test GRE-in-UDP (IPv6) >>> pkt = Ether(raw(Ether()/IP()/GRE()/IP()/UDP())) >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) and pkt.proto == 47 >>> pkt = pkt.payload >>> assert isinstance(pkt, GRE) and pkt.proto == 0x0800 >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) >>> >>> pkt = Ether(raw(Ether()/IPv6()/GRE()/IPv6()/UDP())) >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IPv6) and pkt.nh == 47 >>> pkt = pkt.payload >>> assert isinstance(pkt, GRE) and pkt.proto == 0x86dd >>> pkt = pkt.payload >>> assert isinstance(pkt, IPv6) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) >>> >>> pkt = Ether(raw(Ether()/IP()/UDP()/GRE()/IP()/UDP())) >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) and pkt.dport == 4754 >>> pkt = pkt.payload >>> assert isinstance(pkt, GRE) and pkt.proto == 0x0800 >>> pkt = pkt.payload >>> assert isinstance(pkt, IP) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) >>> >>> pkt = Ether(raw(Ether()/IPv6()/UDP()/GRE()/IPv6()/UDP())) >>> assert isinstance(pkt, Ether) >>> pkt = pkt.payload >>> assert isinstance(pkt, IPv6) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) and pkt.dport == 4754 >>> pkt = pkt.payload >>> assert isinstance(pkt, GRE) and pkt.proto == 0x86dd >>> pkt = pkt.payload >>> assert isinstance(pkt, IPv6) >>> pkt = pkt.payload >>> assert isinstance(pkt, UDP) ###### ## inet.py ###### ###(050)=[passed] IPv4 - ICMPTimeStampField >>> test = ICMPTimeStampField("test", None) >>> value = test.any2i("", "07:28:28.07") >>> value == 26908070 True >>> test.i2repr("", value) == '7:28:28.70' True ###(051)=[passed] IPv4 - UDP null checksum >>> with no_debug_dissector(): ... IP(raw(IP()/UDP()/Raw(b"\xff\xff\x01\x6a")))[UDP].chksum == 0xFFFF ... True ###(052)=[passed] IPv4 - (IP|UDP|TCP|ICMP)Error >>> query = IP(dst="192.168.0.1", src="192.168.0.254", ttl=1)/UDP()/DNS() >>> answer = IP(dst="192.168.0.254", src="192.168.0.2", ttl=1)/ICMP()/IPerror(dst="192.168.0.1", src="192.168.0.254", ttl=0)/UDPerror()/DNS() >>> >>> query = IP(dst="192.168.0.1", src="192.168.0.254", ttl=1)/UDP()/DNS() >>> answer = IP(dst="192.168.0.254", src="192.168.0.2")/ICMP(type=11)/IPerror(dst="192.168.0.1", src="192.168.0.254", ttl=0)/UDPerror()/DNS() >>> assert answer.answers(query) == True >>> >>> query = IP(dst="192.168.0.1", src="192.168.0.254", ttl=1)/TCP() >>> answer = IP(dst="192.168.0.254", src="192.168.0.2")/ICMP(type=11)/IPerror(dst="192.168.0.1", src="192.168.0.254", ttl=0)/TCPerror() >>> >>> assert answer.answers(query) == True >>> >>> query = IP(dst="192.168.0.1", src="192.168.0.254", ttl=1)/ICMP()/"scapy" >>> answer = IP(dst="192.168.0.254", src="192.168.0.2")/ICMP(type=11)/IPerror(dst="192.168.0.1", src="192.168.0.254", ttl=0)/ICMPerror()/"scapy" >>> assert answer.answers(query) == True ###(053)=[passed] IPv4 - TCPError parsing >>> pkt = Ether(bytes.fromhex('005056a4302ffcbd676360c908004500003800000000f80164b6682ce6b70ad504560b004f410000000045000028400e00000106fdae0ad50456681204d7f73100507d4430f8')) >>> assert TCPerror in pkt and pkt[TCPerror].sport == 63281 and pkt[TCPerror].dport == 80 ###(054)=[passed] IPv4 - mDNS >>> a = IP(dst="224.0.0.251") >>> assert a.hashret() == b"\x00" ###(055)=[passed] IPv4 - utilities >>> l = overlap_frag(IP(dst="1.2.3.4")/ICMP()/("AB"*8), ICMP()/("CD"*8)) >>> assert len(l) == 6 >>> assert [len(raw(p[IP].payload)) for p in l] == [8, 8, 8, 8, 8, 8] >>> assert [(p.frag, p.flags.MF) for p in [IP(raw(p)) for p in l]] == [(0, True), (1, True), (2, True), (0, True), (1, True), (2, False)] ###(056)=[passed] IPv4 - ICMP hashret >>> for x in ICMP(type=range(0,40),code=range(0,40)): ... (IP()/x).hashret() ... b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'' b'' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01\x00\x00\x00\x00' b'\x00\x00\x00\x00\x01' ###(057)=[passed] IPv4 - traceroute utilities >>> ip_ttl = [("192.168.0.%d" % i, i) for i in range(1, 10)] >>> >>> tr_packets = [ (IP(dst="192.168.0.1", src="192.168.0.254", ttl=ttl)/TCP(options=[("Timestamp", "00:00:%.2d.00" % ttl)])/"scapy", ... IP(dst="192.168.0.254", src=ip)/ICMP(type=11)/IPerror(dst="192.168.0.1", src="192.168.0.254", ttl=0)/TCPerror()/"scapy") ... for (ip, ttl) in ip_ttl ] >>> >>> tr = TracerouteResult(tr_packets) >>> assert tr.get_trace() == {'192.168.0.1': {1: ('192.168.0.1', False), 2: ('192.168.0.2', False), 3: ('192.168.0.3', False), 4: ('192.168.0.4', False), 5: ('192.168.0.5', False), 6: ('192.168.0.6', False), 7: ('192.168.0.7', False), 8: ('192.168.0.8', False), 9: ('192.168.0.9', False)}} >>> >>> def test_show(): ... with ContextManagerCaptureOutput() as cmco: ... tr = TracerouteResult(tr_packets) ... tr.show() ... result_show = cmco.get_output() ... expected = " 192.168.0.1:tcp80 \n" ... expected += "1 192.168.0.1 11 \n" ... expected += "2 192.168.0.2 11 \n" ... expected += "3 192.168.0.3 11 \n" ... expected += "4 192.168.0.4 11 \n" ... expected += "5 192.168.0.5 11 \n" ... expected += "6 192.168.0.6 11 \n" ... expected += "7 192.168.0.7 11 \n" ... expected += "8 192.168.0.8 11 \n" ... expected += "9 192.168.0.9 11 \n" ... index_result = result_show.index("\n1") ... index_expected = expected.index("\n1") ... assert result_show[index_result:] == expected[index_expected:] ... >>> test_show() >>> >>> def test_summary(): ... with ContextManagerCaptureOutput() as cmco: ... tr = TracerouteResult(tr_packets) ... tr.summary() ... result_summary = cmco.get_output() ... assert len(result_summary.split('\n')) == 10 ... assert(any( ... "IP / TCP 192.168.0.254:%s > 192.168.0.1:%s S / Raw ==> " ... "IP / ICMP 192.168.0.9 > 192.168.0.254 time-exceeded " ... "ttl-zero-during-transit / IPerror / TCPerror / " ... "Raw" % (ftp_data, http) in result_summary ... for ftp_data in ['20', 'ftp_data'] ... for http in ['80', 'http', 'www_http', 'www'] ... )) ... >>> test_summary() >>> >>> from unittest import mock >>> import scapy.libs.matplot >>> >>> @mock.patch("scapy.libs.matplot.plt") ... def test_timeskew_graph(mock_plt): ... def fake_plot(data, **kwargs): ... return data ... mock_plt.plot = fake_plot ... srl = SndRcvList([(a, a) for a in [IP(raw(p[0])) for p in tr_packets]]) ... ret = srl.timeskew_graph("192.168.0.254") ... assert len(ret) == 9 ... assert ret[0][1] == 0.0 ... >>> test_timeskew_graph() >>> >>> tr = TracerouteResult(tr_packets) >>> saved_AS_resolver = conf.AS_resolver >>> conf.AS_resolver = None >>> tr.make_graph() >>> assert len(tr.graphdef) == 491 >>> tr.graphdef.startswith("digraph trace {") == True True >>> assert ('"192.168.0.9" ->' in tr.graphdef) == True >>> conf.AS_resolver = conf.AS_resolver >>> >>> pl = PacketList(list([Ether()/x for x in itertools.chain(*tr_packets)])) >>> srl, ul = pl.sr() >>> assert len(srl) == 9 and len(ul) == 0 >>> >>> conf_color_theme = conf.color_theme >>> conf.color_theme = BlackAndWhite() >>> assert len(pl.sessions().keys()) == 10 >>> conf.color_theme = conf_color_theme >>> >>> new_pl = pl.replace(IP.src, "192.168.0.254", "192.168.0.42") >>> assert "192.168.0.254" not in [p[IP].src for p in new_pl] ###(058)=[passed] IPv4 - reporting >>> from unittest import mock >>> >>> @mock.patch("scapy.layers.inet.sr") ... def test_report_ports(mock_sr): ... def sr(*args, **kargs): ... return [(IP()/TCP(dport=65081, flags="S"), IP()/TCP(sport=65081, flags="SA")), ... (IP()/TCP(dport=65082, flags="S"), IP()/ICMP(type=3, code=1)), ... (IP()/TCP(dport=65083, flags="S"), IP()/TCP(sport=65083, flags="R"))], [IP()/TCP(dport=65084, flags="S")] ... mock_sr.side_effect = sr ... report = "\\begin{tabular}{|r|l|l|}\n\\hline\n65081 & open & SA \\\\\n\\hline\n?? & closed & ICMP type dest-unreach/host-unreachable from 127.0.0.1 \\\\\n65083 & closed & TCP R \\\\\n\\hline\n65084 & ? & unanswered \\\\\n\\hline\n\\end{tabular}\n" ... assert report_ports("www.secdev.org", [65081,65082,65083,65084]) == report ... >>> test_report_ports() >>> >>> def test_IPID_count(): ... with ContextManagerCaptureOutput() as cmco: ... random.seed(0x2807) ... IPID_count([(IP()/UDP(), IP(id=random.randint(0, 65535))/UDP()) for i in range(3)]) ... result_IPID_count = cmco.get_output() ... lines = [x.strip() for x in result_IPID_count.split("\n")] ... assert len(lines) == 5 ... assert(lines[0] in ["Probably 3 classes: [4613, 53881, 58437]", ... "Probably 3 classes: [9103, 9227, 46399]"]) ... >>> test_IPID_count() ###(059)=[passed] IPv4 - Checksum computation with source routing >>> no_sr = IP(raw(IP(dst="8.8.8.8")/UDP()/DNS())) >>> sr = IP(raw(IP(options=[IPOption_SSRR(routers=["1.1.1.1", "8.8.8.8"])])/UDP()/DNS())) >>> assert no_sr[UDP].chksum == sr[UDP].chksum >>> >>> sr = IP(raw(IP(options=[IPOption_LSRR(routers=["1.1.1.1"]), IPOption_SSRR(routers=["8.8.8.8"])])/UDP()/DNS())) Found 2 Source Routing Options! Falling back to IP.dst for checksum computation. >>> assert no_sr[UDP].chksum != sr[UDP].chksum >>> >>> sr = Ether(src="de:ad:be:ef:aa:55", dst="ca:fe:00:00:00:00")/IP(src="20.0.0.1",dst="100.0.0.1")/ \ ... IP(src="20.0.0.1",dst="100.0.0.1", options=[IPOption_SSRR(copy_flag=1, pointer=4, routers=["1.1.1.1", "8.8.8.8"])])/ \ ... UDP(sport=1111, dport=2222) / VXLAN() / \ ... Ether(src="de:ad:be:ef:aa:55", dst="ca:fe:00:00:00:00")/IP(src="20.0.0.1",dst="100.0.0.1") / \ ... TCP() >>> bytes(sr[UDP]) b'\x04W\x08\xae\x00F\x1ft\x0c\x00\x00\x03\x00\x00\x00\x00\xca\xfe\x00\x00\x00\x00\xde\xad\xbe\xef\xaaU\x08\x00E\x00\x00(\x00\x01\x00\x00@\x06\x02\xce\x14\x00\x00\x01d\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x17}\x00\x00' >>> assert sr[IP:2].dst == "100.0.0.1" ###### ## ICMPv4 extensions ###### ###(060)=[passed] Build ICMP extension from scratch >>> pkt = IP(dst="127.0.0.1", src="127.0.0.1") / ICMP( ... type="time-exceeded", ... code="ttl-zero-during-transit", ... ext=ICMPExtension_Header() / ICMPExtension_InterfaceInformation( ... has_ifindex=1, ... has_ipaddr=1, ... has_ifname=1, ... ip4="10.10.10.10", ... ifname="hey", ... ) ... ) / IPerror(src="12.4.4.4", dst="12.1.1.1") / \ ... UDPerror(sport=42315, dport=33440) / \ ... b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> assert bytes(pkt) == b'E\x00\x00\xb0\x00\x01\x00\x00@\x01|J\x7f\x00\x00\x01\x7f\x00\x00\x01\x0b\x00\x12/\x00\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x11]\xbb\x0c\x04\x04\x04\x0c\x01\x01\x01\xa5K\x82\xa0\x00\x14\xba\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00u\x00\x00\x10\x02\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x03hey' ###(061)=[passed] Check dissection and rebuild of MPLS ICMPv4 extension >>> load_contrib("mpls") >>> pkt = Ether(b'\x00\x15]\x94AY\x00\x15]\x07\xcb\x04\x08\x00E\x00\x00\xb0?2\x00\x00\xe6\x01\x1b\xabh,\x1f\x1d\xac\x1cF\n\x0b\x00Ll\x00\x11\x00\x00E \x00<\x96\xdf\x00\x00\x02\x11\xa7\xc6\xac\x1cF\n(Q_t\xb8-\x82\xb3\x00(xt@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x02\xff\x00\x10\x01\x01\tp2\x01\x05\xde\xd2\x01\x05\x9c\xc3\x02') >>> >>> assert isinstance(pkt[ICMP].ext, ICMPExtension_Header) >>> assert ICMPExtension_MPLS in pkt[ICMP].ext >>> assert all(isinstance(x, MPLS) for x in pkt[ICMP].ext.stack) >>> assert [x.label for x in pkt[ICMP].ext.stack[0].iterpayloads()] == [38659, 24045, 22988] >>> >>> pkt.clear_cache() >>> pkt.ext.chksum = None # Check that chksum rebuilds >>> pkt[IP].chksum = None >>> assert bytes(pkt) == b'\x00\x15]\x94AY\x00\x15]\x07\xcb\x04\x08\x00E\x00\x00\xb0?2\x00\x00\xe6\x01\x1b\xabh,\x1f\x1d\xac\x1cF\n\x0b\x00Ll\x00\x11\x00\x00E \x00<\x96\xdf\x00\x00\x02\x11\xa7\xc6\xac\x1cF\n(Q_t\xb8-\x82\xb3\x00(xt@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x02\xff\x00\x10\x01\x01\tp2\x01\x05\xde\xd2\x01\x05\x9c\xc3\x02' ###(062)=[passed] ICMPv4 extension - Other dissection example >>> load_contrib("mpls") >>> pkt = Ether(b'\x00\x1cs\x03\x12\x06t\x83\xef\x00\n\xd5\x08\x00E\x00\x00\xa8H\x1e\x00\x00\xfb\x01\xf0\xe3\xc0\xa8\x02\x01\xc0\xa8\x03\x01\x0b\x00rr\x00 \x00\x00E\x00\x00>> assert isinstance(pkt[ICMP].ext, ICMPExtension_Header) >>> assert ICMPExtension_MPLS in pkt[ICMP].ext >>> assert all(isinstance(x, MPLS) for x in pkt[ICMP].ext.stack) >>> assert [x.label for x in pkt[ICMP].ext.stack[0].iterpayloads()] == [10003] >>> >>> pkt.clear_cache() >>> pkt.ext.chksum = None # Check that chksum rebuilds >>> pkt[IP].chksum = None >>> assert bytes(pkt) == b'\x00\x1cs\x03\x12\x06t\x83\xef\x00\n\xd5\x08\x00E\x00\x00\xa8H\x1e\x00\x00\xfb\x01\xf0\xe3\xc0\xa8\x02\x01\xc0\xa8\x03\x01\x0b\x00rr\x00 \x00\x00E\x00\x00>> pkt = PPP(b'\xff\x03\x00!E\x00\x00\xf0\xe7 @\x00\xfe\x01z\xde\n\x04\x00\x02\x0c\x04\x04\x04\x0b\x00\xcc\xff\x00\x00\x00\x00E\x00\x00(\xa5Q\x00\x00\x01\x11\xf7j\x0c\x04\x04\x04\x0c\x01\x01\x01\xa5K\x82\xa0\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\xc4\xe4\x00P\x02\x0e\x00\x00\x00\x0f\x00\x01\x00\x00\n\n\n\n?This-is-the-name-of-the-Interface-that-we-are-looking-for-[:-)]') >>> >>> assert isinstance(pkt[ICMP].ext, ICMPExtension_Header) >>> assert ICMPExtension_InterfaceInformation in pkt[ICMP].ext >>> assert pkt[ICMP].ext.ifindex == 15 >>> assert pkt[ICMP].ext.ip4 == "10.10.10.10" >>> assert pkt[ICMP].ext.ifname == b"This-is-the-name-of-the-Interface-that-we-are-looking-for-[:-)]" Scapy IPv6 layers tests ━ Run at 04:11:46 from [test/scapy/layers/inet6.uts] by UTscapy in 3.5364627838134766 └ Passed=519 └ Failed=0 ###### ## Test IPv6 Class ###### ###(000)=[passed] IPv6 Class basic Instantiation >>> a=IPv6() ###(001)=[passed] IPv6 Class basic build (default values) >>> raw(IPv6()) == b'`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(002)=[passed] IPv6 Class basic dissection (default values) >>> a=IPv6(raw(IPv6())) >>> a.version == 6 and a.tc == 0 and a.fl == 0 and a.plen == 0 and a.nh == 59 and a.hlim ==64 and a.src == "::1" and a.dst == "::1" True ###(003)=[passed] IPv6 Class with basic TCP stacked - build >>> raw(IPv6()/TCP()) == b'`\x00\x00\x00\x00\x14\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x8f}\x00\x00' True ###(004)=[passed] IPv6 Class with basic TCP stacked - dissection >>> a=IPv6(raw(IPv6()/TCP())) >>> a.nh == 6 and a.plen == 20 and isinstance(a.payload, TCP) and a.payload.chksum == 0x8f7d True ###(005)=[passed] IPv6 Class with TCP and TCP data - build >>> raw(IPv6()/TCP()/Raw(load="somedata")) == b'`\x00\x00\x00\x00\x1c\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xd5\xdd\x00\x00somedata' True ###(006)=[passed] IPv6 Class with TCP and TCP data - dissection >>> with no_debug_dissector(): ... a=IPv6(raw(IPv6()/TCP(dport=1234, sport=1234)/Raw(load="somedata"))) ... >>> a.nh == 6 and a.plen == 28 and isinstance(a.payload, TCP) and a.payload.chksum == 0xcc9d and isinstance(a.payload.payload, Raw) and a[Raw].load == b"somedata" True ###(007)=[passed] IPv6 Class binding with Ethernet - build >>> raw(Ether(src="00:00:00:00:00:00", dst="ff:ff:ff:ff:ff:ff")/IPv6()/TCP()) == b'\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x86\xdd`\x00\x00\x00\x00\x14\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x8f}\x00\x00' True ###(008)=[passed] IPv6 Class binding with Ethernet - dissection >>> a=Ether(raw(Ether()/IPv6()/TCP())) >>> a.type == 0x86dd True ###(009)=[passed] IPv6 Class - summary >>> a = Ether(src="aa:aa:aa:aa:aa:aa", dst="bb:bb:bb:bb:bb:bb")/IPv6(src='c266:a92d:0ed8:dc54:7d6f:9667:3743:a32f', dst='6406:c31f:d0b5:72fc:1700:2081:62e7:fae9') >>> assert a.summary() == 'Ether / c266:a92d:ed8:dc54:7d6f:9667:3743:a32f > 6406:c31f:d0b5:72fc:1700:2081:62e7:fae9 (59)' ###(010)=[passed] IPv6 Class binding with GRE - build >>> s = raw(IP(src="127.0.0.1")/GRE()/Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:00:00:00:00")/IP()/GRE()/IPv6(src="::1")) >>> s == b'E\x00\x00f\x00\x01\x00\x00@/|f\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00eX\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00@\x00\x01\x00\x00@/|\x8c\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x86\xdd`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(011)=[passed] IPv6 Class binding with GRE - dissection >>> p = IP(s) >>> GRE in p and p[GRE:1].proto == 0x6558 and p[GRE:2].proto == 0x86DD and IPv6 in p True ###(012)=[passed] IPv6 ma_addr coverage on hashret >>> IPv6(dst="ff00::1:ff28:9c5a", src="::").hashret() == b';' True ###(013)=[passed] PseudoIPv6 >>> p = PseudoIPv6(src="fd00::abcd", dst="fd00::1234", uplen=64, nh=socket.IPPROTO_UDP) >>> raw(p) == b"\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\xcd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x34\x00\x00\x00\x40\x00\x00\x00\x11" True ###(014)=[passed] in6_chksum is computed on UDP or TCP build >>> with no_debug_dissector(): ... p = IPv6(raw(IPv6()/UDP()/Raw(load="somedata"))) ... assert p.chksum == 0x45cb ... ###(015)=[passed] IPv6ExtHdrRouting Class - No address - build >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/IPv6ExtHdrRouting(addresses=[])/TCP(dport=80)) ==b'`\x00\x00\x00\x00\x1c+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xa5&\x00\x00' True ###(016)=[passed] IPv6ExtHdrRouting Class - One address - build >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/IPv6ExtHdrRouting(addresses=["2022::deca"])/TCP(dport=80)) == b'`\x00\x00\x00\x00,+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x02\x00\x01\x00\x00\x00\x00 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' True ###(017)=[passed] IPv6ExtHdrRouting Class - Multiple Addresses - build >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/IPv6ExtHdrRouting(addresses=["2001::deca", "2022::deca"])/TCP(dport=80)) == b'`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x02\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' True ###(018)=[passed] IPv6ExtHdrRouting Class - Specific segleft (2->1) - build >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/IPv6ExtHdrRouting(addresses=["2001::deca", "2022::deca"], segleft=1)/TCP(dport=80)) == b'`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x01\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91\x7f\x00\x00' True ###(019)=[passed] IPv6ExtHdrRouting Class - Specific segleft (2->0) - build >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/IPv6ExtHdrRouting(addresses=["2001::deca", "2022::deca"], segleft=0)/TCP(dport=80)) == b'`\x00\x00\x00\x00<+@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x06\x04\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xa5&\x00\x00' True ###(020)=[passed] IPv6ExtHdrSegmentRouting Class - default - build & dissect >>> s = raw(IPv6()/IPv6ExtHdrSegmentRouting()/UDP()) >>> assert s == b'`\x00\x00\x00\x00 +@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x005\x005\x00\x08\xffr' >>> >>> p = IPv6(s) >>> assert UDP in p and IPv6ExtHdrSegmentRouting in p >>> assert p[IPv6ExtHdrSegmentRouting].lastentry == 0 and len(p[IPv6ExtHdrSegmentRouting].addresses) == 1 and len(p[IPv6ExtHdrSegmentRouting].tlv_objects) == 0 ###(021)=[passed] IPv6ExtHdrSegmentRouting Class - addresses list - build & dissect >>> s = raw(IPv6()/IPv6ExtHdrSegmentRouting(addresses=["::1", "::2", "::3"])/UDP()) >>> assert s == b'`\x00\x00\x00\x00@+@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x06\x04\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x005\x005\x00\x08\xffr' >>> >>> p = IPv6(s) >>> assert UDP in p and IPv6ExtHdrSegmentRouting in p >>> assert p[IPv6ExtHdrSegmentRouting].lastentry == 2 and len(p[IPv6ExtHdrSegmentRouting].addresses) == 3 and len(p[IPv6ExtHdrSegmentRouting].tlv_objects) == 0 ###(022)=[passed] IPv6ExtHdrSegmentRouting Class - TLVs list - build & dissect >>> s = raw(IPv6()/IPv6ExtHdrSegmentRouting(tlv_objects=[IPv6ExtHdrSegmentRoutingTLVHMAC()])/TCP()) >>> assert s == b'`\x00\x00\x00\x00<+@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x06\x04\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x000\x00\x00\x00\x00\x00\x00\x04\x05\x00\x00\x00\x00\x00\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x8f}\x00\x00' >>> >>> p = IPv6(s) >>> assert TCP in p and IPv6ExtHdrSegmentRouting in p >>> assert p[IPv6ExtHdrSegmentRouting].lastentry == 0 >>> assert len(p[IPv6ExtHdrSegmentRouting].addresses) == 1 and len(p[IPv6ExtHdrSegmentRouting].tlv_objects) == 2 >>> assert isinstance(p[IPv6ExtHdrSegmentRouting].tlv_objects[1], IPv6ExtHdrSegmentRoutingTLVPadN) ###(023)=[passed] IPv6ExtHdrSegmentRouting Class - both lists - build & dissect >>> s = raw(IPv6()/IPv6ExtHdrSegmentRouting(addresses=["::1", "::2", "::3"], tlv_objects=[IPv6ExtHdrSegmentRoutingTLVIngressNode(),IPv6ExtHdrSegmentRoutingTLVEgressNode()])/ICMPv6EchoRequest()) >>> assert s == b'`\x00\x00\x00\x00h+@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01:\x0b\x04\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x7f\xbb\x00\x00\x00\x00' >>> >>> p = IPv6(s) >>> assert p[IPv6ExtHdrSegmentRouting].lastentry == 2 >>> assert ICMPv6EchoRequest in p and IPv6ExtHdrSegmentRouting in p >>> assert len(p[IPv6ExtHdrSegmentRouting].addresses) == 3 and len(p[IPv6ExtHdrSegmentRouting].tlv_objects) == 2 ###(024)=[passed] IPv6ExtHdrSegmentRouting Class - UDP pseudo-header checksum - build & dissect >>> s= raw(IPv6(src="fc00::1", dst="fd00::42")/IPv6ExtHdrSegmentRouting(addresses=["fd00::42", "fc13::1337"][::-1], segleft=1, lastentry=1) / UDP(sport=11000, dport=4242) / Raw('foobar')) >>> assert s == b'`\x00\x00\x00\x006+@\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x11\x04\x04\x01\x01\x00\x00\x00\xfc\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x137\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00B*\xf8\x10\x92\x00\x0e\x81\xb7foobar' ###### ## Test in6_get6to4Prefix() ###### ###(025)=[passed] Test in6_get6to4Prefix() - 0.0.0.0 address >>> in6_get6to4Prefix("0.0.0.0") == "2002::" True ###(026)=[passed] Test in6_get6to4Prefix() - 255.255.255.255 address >>> in6_get6to4Prefix("255.255.255.255") == "2002:ffff:ffff::" True ###(027)=[passed] Test in6_get6to4Prefix() - 1.1.1.1 address >>> in6_get6to4Prefix("1.1.1.1") == "2002:101:101::" True ###(028)=[passed] Test in6_get6to4Prefix() - invalid address >>> in6_get6to4Prefix("somebadrawing") is None True ###### ## Test in6_6to4ExtractAddr() ###### ###(029)=[passed] Test in6_6to4ExtractAddr() - 2002:: address >>> in6_6to4ExtractAddr("2002::") == "0.0.0.0" True ###(030)=[passed] Test in6_6to4ExtractAddr() - 255.255.255.255 address >>> in6_6to4ExtractAddr("2002:ffff:ffff::") == "255.255.255.255" True ###(031)=[passed] Test in6_6to4ExtractAddr() - "2002:101:101::" address >>> in6_6to4ExtractAddr("2002:101:101::") == "1.1.1.1" True ###(032)=[passed] Test in6_6to4ExtractAddr() - invalid address >>> in6_6to4ExtractAddr("somebadrawing") is None True ###(033)=[passed] in6_getLinkScopedMcastAddr() : default generation >>> a = in6_getLinkScopedMcastAddr(addr="FE80::") >>> a == 'ff32:ff::' True ###(034)=[passed] in6_getLinkScopedMcastAddr() : different valid scope values >>> a = in6_getLinkScopedMcastAddr(addr="FE80::", scope=0) >>> b = in6_getLinkScopedMcastAddr(addr="FE80::", scope=1) >>> c = in6_getLinkScopedMcastAddr(addr="FE80::", scope=2) >>> d = in6_getLinkScopedMcastAddr(addr="FE80::", scope=3) >>> a == 'ff30:ff::' and b == 'ff31:ff::' and c == 'ff32:ff::' and d is None True ###(035)=[passed] in6_getLinkScopedMcastAddr() : grpid in different formats >>> a = in6_getLinkScopedMcastAddr(addr="FE80::A12:34FF:FE56:7890", grpid=b"\x12\x34\x56\x78") >>> b = in6_getLinkScopedMcastAddr(addr="FE80::A12:34FF:FE56:7890", grpid="12345678") >>> c = in6_getLinkScopedMcastAddr(addr="FE80::A12:34FF:FE56:7890", grpid=305419896) >>> a == b and b == c True ###(036)=[passed] in6_mactoifaceid() conversion function (test 1) >>> in6_mactoifaceid("FD:00:00:00:00:00", ulbit=0) == 'FD00:00FF:FE00:0000' True ###(037)=[passed] in6_mactoifaceid() conversion function (test 2) >>> in6_mactoifaceid("FD:00:00:00:00:00", ulbit=1) == 'FF00:00FF:FE00:0000' True ###(038)=[passed] in6_mactoifaceid() conversion function (test 3) >>> in6_mactoifaceid("FD:00:00:00:00:00") == 'FF00:00FF:FE00:0000' True ###(039)=[passed] in6_mactoifaceid() conversion function (test 4) >>> in6_mactoifaceid("FF:00:00:00:00:00") == 'FD00:00FF:FE00:0000' True ###(040)=[passed] in6_mactoifaceid() conversion function (test 5) >>> in6_mactoifaceid("FF:00:00:00:00:00", ulbit=1) == 'FF00:00FF:FE00:0000' True ###(041)=[passed] in6_mactoifaceid() conversion function (test 6) >>> in6_mactoifaceid("FF:00:00:00:00:00", ulbit=0) == 'FD00:00FF:FE00:0000' True ###(042)=[passed] in6_mactoifaceid() conversion function (test 1) >>> in6_ifaceidtomac(in6_mactoifaceid("FD:00:00:00:00:00", ulbit=0)) == 'ff:00:00:00:00:00' True ###(043)=[passed] in6_mactoifaceid() conversion function (test 2) >>> in6_ifaceidtomac(in6_mactoifaceid("FD:00:00:00:00:00", ulbit=1)) == 'fd:00:00:00:00:00' True ###(044)=[passed] in6_mactoifaceid() conversion function (test 3) >>> in6_ifaceidtomac(in6_mactoifaceid("FD:00:00:00:00:00")) == 'fd:00:00:00:00:00' True ###(045)=[passed] in6_mactoifaceid() conversion function (test 4) >>> in6_ifaceidtomac(in6_mactoifaceid("FF:00:00:00:00:00")) == 'ff:00:00:00:00:00' True ###(046)=[passed] in6_mactoifaceid() conversion function (test 5) >>> in6_ifaceidtomac(in6_mactoifaceid("FF:00:00:00:00:00", ulbit=1)) == 'fd:00:00:00:00:00' True ###(047)=[passed] in6_mactoifaceid() conversion function (test 6) >>> in6_ifaceidtomac(in6_mactoifaceid("FF:00:00:00:00:00", ulbit=0)) == 'ff:00:00:00:00:00' True ###(048)=[passed] in6_addrtomac() conversion function (test 1) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FD:00:00:00:00:00", ulbit=0)) == 'ff:00:00:00:00:00' True ###(049)=[passed] in6_addrtomac() conversion function (test 2) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FD:00:00:00:00:00", ulbit=1)) == 'fd:00:00:00:00:00' True ###(050)=[passed] in6_addrtomac() conversion function (test 3) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FD:00:00:00:00:00")) == 'fd:00:00:00:00:00' True ###(051)=[passed] in6_addrtomac() conversion function (test 4) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FF:00:00:00:00:00")) == 'ff:00:00:00:00:00' True ###(052)=[passed] in6_addrtomac() conversion function (test 5) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FF:00:00:00:00:00", ulbit=1)) == 'fd:00:00:00:00:00' True ###(053)=[passed] in6_addrtomac() conversion function (test 6) >>> in6_addrtomac("FE80::" + in6_mactoifaceid("FF:00:00:00:00:00", ulbit=0)) == 'ff:00:00:00:00:00' True ###(054)=[passed] Test in6_getRandomizedIfaceId >>> import socket >>> >>> for a in range(10): ... s1, s2 = in6_getRandomizedIfaceId('20b:93ff:feeb:2d3') ... s1, s2 ... tmp = inet_pton(socket.AF_INET6, "::" + s1)[8:] ... tmp ... assert (orb(tmp[0]) & 0x04) == 0 ... s1, s2 = in6_getRandomizedIfaceId('20b:93ff:feeb:2d3', previous=s2) ... s1, s2 ... tmp = inet_pton(socket.AF_INET6, "::" + s1)[8:] ... assert (orb(tmp[0]) & 0x04) == 0 ... ('99ed:1c26:3eb1:9699', '7039:bc45:1c3e:9a9a') b'\x99\xed\x1c&>\xb1\x96\x99' ('6007:f826:60cf:ff6e', '7601:ec89:fca8:71e') ('1274:d811:e44:5906', 'b80a:ef8:deac:a68e') b'\x12t\xd8\x11\x0eDY\x06' ('3b8f:9a27:a3b8:f7ff', '3824:98b1:3d4a:30f4') ('283c:7ae6:540:4486', '2e0:4c0e:7371:2b6b') b'(>> assert in6_getRandomizedIfaceId('20b:93ff:feeb:2d3', previous='d006:d540:db11:b092') == ('721f:11fa:3743:fc7f', '5946:5272:7fcc:108a') ###(055)=[passed] Test RFC 1924 function - in6_ctop() basic test >>> in6_ctop("4)+k&C#VzJ4br>0wv%Yp") == '1080::8:800:200c:417a' True ###(056)=[passed] Test RFC 1924 function - in6_ctop() with character outside charset >>> in6_ctop("4)+k&C#VzJ4br>0wv%Y'") == None True ###(057)=[passed] Test RFC 1924 function - in6_ctop() with bad length address >>> in6_ctop("4)+k&C#VzJ4br>0wv%Y") == None True ###(058)=[passed] Test RFC 1924 function - in6_ptoc() basic test >>> in6_ptoc('1080::8:800:200c:417a') == '4)+k&C#VzJ4br>0wv%Yp' True ###(059)=[passed] Test RFC 1924 function - in6_ptoc() basic test >>> in6_ptoc('1080::8:800:200c:417a') == '4)+k&C#VzJ4br>0wv%Yp' True ###(060)=[passed] Test RFC 1924 function - in6_ptoc() with bad input >>> in6_ptoc('1080:::8:800:200c:417a') == None True ###(061)=[passed] in6_getAddrType - 6to4 addresses >>> in6_getAddrType("2002::1") == (IPV6_ADDR_UNICAST | IPV6_ADDR_GLOBAL | IPV6_ADDR_6TO4) True ###(062)=[passed] in6_getAddrType - Assignable Unicast global address >>> in6_getAddrType("2001:db8::1") == (IPV6_ADDR_UNICAST | IPV6_ADDR_GLOBAL) True ###(063)=[passed] in6_getAddrType - Multicast global address >>> in6_getAddrType("FF0E::1") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_MULTICAST) True ###(064)=[passed] in6_getAddrType - Multicast local address >>> in6_getAddrType("FF02::1") == (IPV6_ADDR_LINKLOCAL | IPV6_ADDR_MULTICAST) True ###(065)=[passed] in6_getAddrType - Unicast Link-Local address >>> in6_getAddrType("FE80::") == (IPV6_ADDR_UNICAST | IPV6_ADDR_LINKLOCAL) True ###(066)=[passed] in6_getAddrType - Loopback address >>> in6_getAddrType("::1") == IPV6_ADDR_LOOPBACK True ###(067)=[passed] in6_getAddrType - Unspecified address >>> in6_getAddrType("::") == IPV6_ADDR_UNSPECIFIED True ###(068)=[passed] in6_getAddrType - Unassigned Global Unicast address >>> in6_getAddrType("4000::") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_UNICAST) True ###(069)=[passed] in6_getAddrType - Weird address (FE::1) >>> in6_getAddrType("FE::") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_UNICAST) True ###(070)=[passed] in6_getAddrType - Weird address (FE8::1) >>> in6_getAddrType("FE8::1") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_UNICAST) True ###(071)=[passed] in6_getAddrType - Weird address (1::1) >>> in6_getAddrType("1::1") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_UNICAST) True ###(072)=[passed] in6_getAddrType - Weird address (1000::1) >>> in6_getAddrType("1000::1") == (IPV6_ADDR_GLOBAL | IPV6_ADDR_UNICAST) True ###(073)=[passed] ICMPv6DestUnreach Class - Basic Build (no argument) >>> raw(ICMPv6DestUnreach()) == b'\x01\x00\x00\x00\x00\x00\x00\x00' No IPv6 underlayer to compute checksum. Leaving null. True ###(074)=[passed] ICMPv6DestUnreach Class - Basic Build over IPv6 (for cksum and overload) >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6DestUnreach()) == b'`\x00\x00\x00\x00\x08:@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x01\x00\x14e\x00\x00\x00\x00' True ###(075)=[passed] ICMPv6DestUnreach Class - Basic Build over IPv6 with some payload >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6DestUnreach()/IPv6(src="2047::cafe", dst="2048::deca")) == b'`\x00\x00\x00\x000:@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x01\x00\x8e\xa3\x00\x00\x00\x00`\x00\x00\x00\x00\x00;@ G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca' True ###(076)=[passed] ICMPv6DestUnreach Class - Dissection with default values and some payload >>> a = IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6DestUnreach()/IPv6(src="2047::cafe", dst="2048::deca"))) >>> a.plen == 48 and a.nh == 58 and ICMPv6DestUnreach in a and a[ICMPv6DestUnreach].type == 1 and a[ICMPv6DestUnreach].code == 0 and a[ICMPv6DestUnreach].cksum == 0x8ea3 and a[ICMPv6DestUnreach].unused == 0 and IPerror6 in a True ###(077)=[passed] ICMPv6DestUnreach Class - Dissection with specific values >>> a=IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6DestUnreach(code=1, cksum=0x6666, unused=0x7777)/IPv6(src="2047::cafe", dst="2048::deca"))) >>> a.plen == 48 and a.nh == 58 and ICMPv6DestUnreach in a and a[ICMPv6DestUnreach].type == 1 and a[ICMPv6DestUnreach].cksum == 0x6666 and a[ICMPv6DestUnreach].unused == 0x7777 and IPerror6 in a[ICMPv6DestUnreach] True ###(078)=[passed] ICMPv6DestUnreach Class - checksum computation related stuff >>> a=IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6DestUnreach(code=1, cksum=0x6666, unused=0x7777)/IPv6(src="2047::cafe", dst="2048::deca")/TCP())) >>> b=IPv6(raw(IPv6(src="2047::cafe", dst="2048::deca")/TCP())) >>> a[ICMPv6DestUnreach][TCPerror].chksum == b.chksum True ###(079)=[passed] ICMPv6PacketTooBig Class - Basic Build (no argument) >>> raw(ICMPv6PacketTooBig()) == b'\x02\x00\x00\x00\x00\x00\x05\x00' No IPv6 underlayer to compute checksum. Leaving null. True ###(080)=[passed] ICMPv6PacketTooBig Class - Basic Build over IPv6 (for cksum and overload) >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6PacketTooBig()) == b'`\x00\x00\x00\x00\x08:@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x02\x00\x0ee\x00\x00\x05\x00' True ###(081)=[passed] ICMPv6PacketTooBig Class - Basic Build over IPv6 with some payload >>> raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6PacketTooBig()/IPv6(src="2047::cafe", dst="2048::deca")) == b'`\x00\x00\x00\x000:@ H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x02\x00\x88\xa3\x00\x00\x05\x00`\x00\x00\x00\x00\x00;@ G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca' True ###(082)=[passed] ICMPv6PacketTooBig Class - Dissection with default values and some payload >>> a = IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6PacketTooBig()/IPv6(src="2047::cafe", dst="2048::deca"))) >>> a.plen == 48 and a.nh == 58 and ICMPv6PacketTooBig in a and a[ICMPv6PacketTooBig].type == 2 and a[ICMPv6PacketTooBig].code == 0 and a[ICMPv6PacketTooBig].cksum == 0x88a3 and a[ICMPv6PacketTooBig].mtu == 1280 and IPerror6 in a True >>> True True ###(083)=[passed] ICMPv6PacketTooBig Class - Dissection with specific values >>> a=IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6PacketTooBig(code=2, cksum=0x6666, mtu=1460)/IPv6(src="2047::cafe", dst="2048::deca"))) >>> a.plen == 48 and a.nh == 58 and ICMPv6PacketTooBig in a and a[ICMPv6PacketTooBig].type == 2 and a[ICMPv6PacketTooBig].code == 2 and a[ICMPv6PacketTooBig].cksum == 0x6666 and a[ICMPv6PacketTooBig].mtu == 1460 and IPerror6 in a True ###(084)=[passed] ICMPv6PacketTooBig Class - checksum computation related stuff >>> a=IPv6(raw(IPv6(src="2048::deca", dst="2047::cafe")/ICMPv6PacketTooBig(code=1, cksum=0x6666, mtu=0x7777)/IPv6(src="2047::cafe", dst="2048::deca")/TCP())) >>> b=IPv6(raw(IPv6(src="2047::cafe", dst="2048::deca")/TCP())) >>> a[ICMPv6PacketTooBig][TCPerror].chksum == b.chksum True ###### ## Test ICMPv6EchoRequest Class ###### ###(085)=[passed] ICMPv6EchoRequest - Basic Instantiation >>> raw(ICMPv6EchoRequest()) == b'\x80\x00\x00\x00\x00\x00\x00\x00' more No IPv6 underlayer to compute checksum. Leaving null. True ###(086)=[passed] ICMPv6EchoRequest - Instantiation with specific values >>> raw(ICMPv6EchoRequest(code=0xff, cksum=0x1111, id=0x2222, seq=0x3333, data="thisissomestring")) == b'\x80\xff\x11\x11""33thisissomestring' True ###(087)=[passed] ICMPv6EchoRequest - Basic dissection >>> a=ICMPv6EchoRequest(b'\x80\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 128 and a.code == 0 and a.cksum == 0 and a.id == 0 and a.seq == 0 and a.data == b"" True ###(088)=[passed] ICMPv6EchoRequest - Dissection with specific values >>> a=ICMPv6EchoRequest(b'\x80\xff\x11\x11""33thisissomerawing') >>> a.type == 128 and a.code == 0xff and a.cksum == 0x1111 and a.id == 0x2222 and a.seq == 0x3333 and a.data == b"thisissomerawing" True ###(089)=[passed] ICMPv6EchoRequest - Automatic checksum computation and field overloading (build) >>> raw(IPv6(dst="2001::cafe", src="2001::deca", hlim=64)/ICMPv6EchoRequest()) == b'`\x00\x00\x00\x00\x08:@ \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x80\x00\x95\xf1\x00\x00\x00\x00' True ###(090)=[passed] ICMPv6EchoRequest - Automatic checksum computation and field overloading (dissection) >>> a=IPv6(b'`\x00\x00\x00\x00\x08:@ \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x80\x00\x95\xf1\x00\x00\x00\x00') >>> isinstance(a, IPv6) and a.nh == 58 and isinstance(a.payload, ICMPv6EchoRequest) and a.payload.cksum == 0x95f1 True ###### ## Test ICMPv6EchoReply Class ###### ###(091)=[passed] ICMPv6EchoReply - Basic Instantiation >>> raw(ICMPv6EchoReply()) == b'\x81\x00\x00\x00\x00\x00\x00\x00' True ###(092)=[passed] ICMPv6EchoReply - Instantiation with specific values >>> raw(ICMPv6EchoReply(code=0xff, cksum=0x1111, id=0x2222, seq=0x3333, data="thisissomestring")) == b'\x81\xff\x11\x11""33thisissomestring' True ###(093)=[passed] ICMPv6EchoReply - Basic dissection >>> a=ICMPv6EchoReply(b'\x80\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 128 and a.code == 0 and a.cksum == 0 and a.id == 0 and a.seq == 0 and a.data == b"" True ###(094)=[passed] ICMPv6EchoReply - Dissection with specific values >>> a=ICMPv6EchoReply(b'\x80\xff\x11\x11""33thisissomerawing') >>> a.type == 128 and a.code == 0xff and a.cksum == 0x1111 and a.id == 0x2222 and a.seq == 0x3333 and a.data == b"thisissomerawing" True ###(095)=[passed] ICMPv6EchoReply - Automatic checksum computation and field overloading (build) >>> raw(IPv6(dst="2001::cafe", src="2001::deca", hlim=64)/ICMPv6EchoReply()) == b'`\x00\x00\x00\x00\x08:@ \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x81\x00\x94\xf1\x00\x00\x00\x00' True ###(096)=[passed] ICMPv6EchoReply - Automatic checksum computation and field overloading (dissection) >>> a=IPv6(b'`\x00\x00\x00\x00\x08:@ \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xca \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe\x80\x00\x95\xf1\x00\x00\x00\x00') >>> isinstance(a, IPv6) and a.nh == 58 and isinstance(a.payload, ICMPv6EchoRequest) and a.payload.cksum == 0x95f1 True ###(097)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 1 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(data="somedata") >>> b.hashret() == a.hashret() True ###(098)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 2 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(data="otherdata") >>> b.hashret() == a.hashret() True ###(099)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 3 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(id=0x6666, seq=0x7777,data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(id=0x6666, seq=0x8888, data="somedata") >>> b.hashret() != a.hashret() True ###(100)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - hashret() test 4 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(id=0x6666, seq=0x7777,data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(id=0x8888, seq=0x7777, data="somedata") >>> b.hashret() != a.hashret() True ###(101)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 5 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(data="somedata") >>> (a > b) == True True ###(102)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 6 >>> b=IPv6(src="2047::deca", dst="2048::cafe")/ICMPv6EchoReply(id=0x6666, seq=0x7777, data="somedata") >>> a=IPv6(src="2048::cafe", dst="2047::deca")/ICMPv6EchoRequest(id=0x6666, seq=0x7777, data="somedata") >>> (a > b) == True True ###(103)=[passed] ICMPv6EchoRequest and ICMPv6EchoReply - answers() test 7 - IPv6ExtHdrDestOpt >>> b = IPv6(b'`\x0f\\\xe3\x00\x08:@\xfe\x80\x00\x00\x00\x00\x00\x00\x02PV\xff\xfe\x84\x1c\x14\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x81\x00\r\xad\x00\x00\x00\x00') >>> a = IPv6(b'`\x00\x00\x00\x00\x10<\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xfe\x80\x00\x00\x00\x00\x00\x00\x02PV\xff\xfe\x84\x1c\x14:\x00\x00\x00\x00\x00\x00\x00\x80\x00\x0e\xad\x00\x00\x00\x00') >>> assert a.hashret() == b.hashret() >>> assert b.answers(a) ###(105)=[passed] ICMPv6MRD_Advertisement - Basic instantiation >>> raw(ICMPv6MRD_Advertisement()) == b'\x97\x14\x00\x00\x00\x00\x00\x00' True ###(106)=[passed] ICMPv6MRD_Advertisement - Instantiation with specific values >>> raw(ICMPv6MRD_Advertisement(advinter=0xdd, queryint=0xeeee, robustness=0xffff)) == b'\x97\xdd\x00\x00\xee\xee\xff\xff' True ###(107)=[passed] ICMPv6MRD_Advertisement - Basic Dissection and overloading mechanisms >>> a=Ether(raw(Ether()/IPv6()/ICMPv6MRD_Advertisement())) >>> a.dst == "33:33:00:00:00:02" and IPv6 in a and a[IPv6].plen == 8 and a[IPv6].nh == 58 and a[IPv6].hlim == 1 and a[IPv6].dst == "ff02::2" and ICMPv6MRD_Advertisement in a and a[ICMPv6MRD_Advertisement].type == 151 and a[ICMPv6MRD_Advertisement].advinter == 20 and a[ICMPv6MRD_Advertisement].queryint == 0 and a[ICMPv6MRD_Advertisement].robustness == 0 True ###(108)=[passed] ICMPv6MRD_Solicitation - Basic dissection >>> raw(ICMPv6MRD_Solicitation()) == b'\x98\x00\x00\x00' True ###(109)=[passed] ICMPv6MRD_Solicitation - Instantiation with specific values >>> raw(ICMPv6MRD_Solicitation(res=0xbb)) == b'\x98\xbb\x00\x00' True ###(110)=[passed] ICMPv6MRD_Solicitation - Basic Dissection and overloading mechanisms >>> a=Ether(raw(Ether()/IPv6()/ICMPv6MRD_Solicitation())) >>> a.dst == "33:33:00:00:00:02" and IPv6 in a and a[IPv6].plen == 4 and a[IPv6].nh == 58 and a[IPv6].hlim == 1 and a[IPv6].dst == "ff02::2" and ICMPv6MRD_Solicitation in a and a[ICMPv6MRD_Solicitation].type == 152 and a[ICMPv6MRD_Solicitation].res == 0 True ###(111)=[passed] ICMPv6MRD_Termination Basic instantiation >>> raw(ICMPv6MRD_Termination()) == b'\x99\x00\x00\x00' True ###(112)=[passed] ICMPv6MRD_Termination - Instantiation with specific values >>> raw(ICMPv6MRD_Termination(res=0xbb)) == b'\x99\xbb\x00\x00' True ###(113)=[passed] ICMPv6MRD_Termination - Basic Dissection and overloading mechanisms >>> a=Ether(raw(Ether()/IPv6()/ICMPv6MRD_Termination())) >>> a.dst == "33:33:00:00:00:6a" and IPv6 in a and a[IPv6].plen == 4 and a[IPv6].nh == 58 and a[IPv6].hlim == 1 and a[IPv6].dst == "ff02::6a" and ICMPv6MRD_Termination in a and a[ICMPv6MRD_Termination].type == 153 and a[ICMPv6MRD_Termination].res == 0 True ###### ## Test HBHOptUnknown Class ###### ###(114)=[passed] HBHOptUnknown - Basic Instantiation >>> raw(HBHOptUnknown()) == b'\x01\x00' True ###(115)=[passed] HBHOptUnknown - Basic Dissection >>> a=HBHOptUnknown(b'\x01\x00') >>> a.otype == 0x01 and a.optlen == 0 and a.optdata == b"" True ###(116)=[passed] HBHOptUnknown - Automatic optlen computation >>> raw(HBHOptUnknown(optdata="B"*10)) == b'\x01\nBBBBBBBBBB' True ###(117)=[passed] HBHOptUnknown - Instantiation with specific values >>> raw(HBHOptUnknown(optlen=9, optdata="B"*10)) == b'\x01\tBBBBBBBBBB' True ###(118)=[passed] HBHOptUnknown - Dissection with specific values >>> a=HBHOptUnknown(b'\x01\tBBBBBBBBBB') >>> a.otype == 0x01 and a.optlen == 9 and a.optdata == b"B"*9 and isinstance(a.payload, Raw) and a.payload.load == b"B" True ###### ## Test Pad1 Class ###### ###(119)=[passed] Pad1 - Basic Instantiation >>> raw(Pad1()) == b'\x00' True ###(120)=[passed] Pad1 - Basic Dissection >>> raw(Pad1(b'\x00')) == b'\x00' True ###### ## Test PadN Class ###### ###(121)=[passed] PadN - Basic Instantiation >>> raw(PadN()) == b'\x01\x00' True ###(122)=[passed] PadN - Optlen Automatic computation >>> raw(PadN(optdata="B"*10)) == b'\x01\nBBBBBBBBBB' True ###(123)=[passed] PadN - Basic Dissection >>> a=PadN(b'\x01\x00') >>> a.otype == 1 and a.optlen == 0 and a.optdata == b"" True ###(124)=[passed] PadN - Dissection with specific values >>> a=PadN(b'\x01\x0cBBBBBBBBBB') >>> a.otype == 1 and a.optlen == 12 and a.optdata == b'BBBBBBBBBB' True ###(125)=[passed] PadN - Instantiation with forced optlen >>> raw(PadN(optdata="B"*10, optlen=9)) == b'\x01\x09BBBBBBBBBB' True ###### ## Test RouterAlert Class (RFC 2711) ###### ###(126)=[passed] RouterAlert - Basic Instantiation >>> raw(RouterAlert()) == b'\x05\x02\x00\x00' True ###(127)=[passed] RouterAlert - Basic Dissection >>> a=RouterAlert(b'\x05\x02\x00\x00') >>> a.otype == 0x05 and a.optlen == 2 and a.value == 00 True ###(128)=[passed] RouterAlert - Instantiation with specific values >>> raw(RouterAlert(optlen=3, value=0xffff)) == b'\x05\x03\xff\xff' True ###(129)=[passed] RouterAlert - Instantiation with specific values >>> a=RouterAlert(b'\x05\x03\xff\xff') >>> a.otype == 0x05 and a.optlen == 3 and a.value == 0xffff True ###### ## Test RPL Option (RFC 6553) ###### ###(130)=[passed] RplOption - Basic Instantiation >>> raw(RplOption()) == b'c\x04\x00\x00\x00\x00' True ###(131)=[passed] RplOption - Basic Dissection >>> a=RplOption(b'c\x04\x00\x00\x00\x00') >>> a.otype == 0x63 and a.optlen == 4 and a.Down == False and a.RankError == 0 and a.ForwardError == 0 and a.RplInstanceId == 0 and a.SenderRank == 0 True ###(132)=[passed] RplOption - Instantiation with specific values >>> a=RplOption(RplInstanceId=0x1e, SenderRank=0x800) >>> a.otype == 0x63 and a.optlen == 4 and a.Down == False and a.RankError == 0 and a.ForwardError == 0 and a.RplInstanceId == 0x1e and a.SenderRank == 0x800 True ###(133)=[passed] RplOption - Instantiation with specific values >>> a=RplOption(Down=True, RplInstanceId=0x1e, SenderRank=0x800) >>> a.otype == 0x63 and a.optlen == 4 and a.Down == True and a.RankError == 0 and a.ForwardError == 0 and a.RplInstanceId == 0x1e and a.SenderRank == 0x800 True >>> raw(a) == b'c\x04\x80\x1e\x08\x00' True ###### ## Test Jumbo Class (RFC 2675) ###### ###(134)=[passed] Jumbo - Basic Instantiation >>> raw(Jumbo()) == b'\xc2\x04\x00\x00\x00\x00' True ###(135)=[passed] Jumbo - Basic Dissection >>> a=Jumbo(b'\xc2\x04\x00\x00\x00\x00') >>> a.otype == 0xC2 and a.optlen == 4 and a.jumboplen == 0 True ###(136)=[passed] Jumbo - Instantiation with specific values >>> raw(Jumbo(optlen=6, jumboplen=0xffffffff)) == b'\xc2\x06\xff\xff\xff\xff' True ###(137)=[passed] Jumbo - Dissection with specific values >>> a=Jumbo(b'\xc2\x06\xff\xff\xff\xff') >>> a.otype == 0xc2 and a.optlen == 6 and a.jumboplen == 0xffffffff True ###### ## Test HAO Class (RFC 3775) ###### ###(138)=[passed] HAO - Basic Instantiation >>> raw(HAO()) == b'\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(139)=[passed] HAO - Basic Dissection >>> a=HAO(b'\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.otype == 0xC9 and a.optlen == 16 and a.hoa == "::" True ###(140)=[passed] HAO - Instantiation with specific values >>> raw(HAO(optlen=9, hoa="2001::ffff")) == b'\xc9\t \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff' True ###(141)=[passed] HAO - Dissection with specific values >>> a=HAO(b'\xc9\t \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff') >>> a.otype == 0xC9 and a.optlen == 9 and a.hoa == "2001::ffff" True ###(142)=[passed] HAO - hashret >>> p = IPv6()/IPv6ExtHdrDestOpt(options=HAO(hoa="2001:db8::1"))/ICMPv6EchoRequest() >>> p.hashret() == b' \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x00\x00\x00\x00' True ###### ## Test IPv6ExtHdrHopByHop() ###### ###(143)=[passed] IPv6ExtHdrHopByHop - Basic Instantiation >>> raw(IPv6ExtHdrHopByHop()) == b';\x00\x01\x04\x00\x00\x00\x00' True ###(144)=[passed] IPv6ExtHdrHopByHop - Instantiation with HAO option >>> raw(IPv6ExtHdrHopByHop(options=[HAO()])) == b';\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(145)=[passed] IPv6ExtHdrHopByHop - Instantiation with RouterAlert option >>> raw(IPv6ExtHdrHopByHop(options=[RouterAlert()])) == b';\x00\x05\x02\x00\x00\x01\x00' True ###(146)=[passed] IPv6ExtHdrHopByHop - Instantiation with RPL option >>> raw(IPv6ExtHdrHopByHop(options=[RplOption()])) == b';\x00c\x04\x00\x00\x00\x00' True ###(147)=[passed] IPv6ExtHdrHopByHop - Instantiation with Jumbo option >>> raw(IPv6ExtHdrHopByHop(options=[Jumbo()])) == b';\x00\xc2\x04\x00\x00\x00\x00' True ###(148)=[passed] IPv6ExtHdrHopByHop - Complete dissection with Jumbo option >>> s = b'`\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01:\x00\xc2\x04\x00\x00\x00\x10\x80\x00\x7f\xbb\x00\x00\x00\x00' >>> p = IPv6(s) >>> assert IPv6ExtHdrHopByHop in p and Jumbo in p and ICMPv6EchoRequest in p >>> >>> s = b'`\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01:\x01\x01\x06\x00\x00\x00\x00\x00\x00\xc2\x04\x00\x00\x00\x18\x80\x00\x7f\xbb\x00\x00\x00\x00' >>> p = IPv6(s) >>> assert IPv6ExtHdrHopByHop in p and PadN in p and Jumbo in p and ICMPv6EchoRequest in p ###(149)=[passed] IPv6ExtHdrHopByHop - Instantiation with Pad1 option >>> raw(IPv6ExtHdrHopByHop(options=[Pad1()])) == b';\x00\x00\x01\x03\x00\x00\x00' True ###(150)=[passed] IPv6ExtHdrHopByHop - Instantiation with PadN option >>> raw(IPv6ExtHdrHopByHop(options=[Pad1()])) == b';\x00\x00\x01\x03\x00\x00\x00' True ###(151)=[passed] IPv6ExtHdrHopByHop - Instantiation with Jumbo, RouterAlert, HAO >>> raw(IPv6ExtHdrHopByHop(options=[Jumbo(), RouterAlert(), HAO()])) == b';\x03\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(152)=[passed] IPv6ExtHdrHopByHop - Instantiation with HAO, Jumbo, RouterAlert >>> raw(IPv6ExtHdrHopByHop(options=[HAO(), Jumbo(), RouterAlert()])) == b';\x04\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00\x05\x02\x00\x00\x01\x02\x00\x00' True ###(153)=[passed] IPv6ExtHdrHopByHop - Instantiation with RouterAlert, HAO, Jumbo >>> raw(IPv6ExtHdrHopByHop(options=[RouterAlert(), HAO(), Jumbo()])) == b';\x03\x05\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xc2\x04\x00\x00\x00\x00' True ###(154)=[passed] IPv6ExtHdrHopByHop - Hashret >>> (IPv6(src="::1", dst="::1")/IPv6ExtHdrHopByHop()).hashret() == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;' True ###(155)=[passed] IPv6ExtHdrHopByHop - Basic Dissection >>> a=IPv6ExtHdrHopByHop(b';\x00\x01\x04\x00\x00\x00\x00') >>> a.nh == 59 and a.len == 0 and len(a.options) == 1 and isinstance(a.options[0], PadN) and a.options[0].otype == 1 and a.options[0].optlen == 4 and a.options[0].optdata == b'\x00'*4 True ###### ## Test ICMPv6ND_RS() class - ICMPv6 Type 133 Code 0 ###### ###(156)=[passed] ICMPv6ND_RS - Basic instantiation >>> raw(ICMPv6ND_RS()) == b'\x85\x00\x00\x00\x00\x00\x00\x00' True ###(157)=[passed] ICMPv6ND_RS - Basic instantiation with empty dst in IPv6 underlayer >>> raw(IPv6(src="2001:db8::1")/ICMPv6ND_RS()) == b'`\x00\x00\x00\x00\x08:\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x85\x00M\xfe\x00\x00\x00\x00' True ###(158)=[passed] ICMPv6ND_RS - Basic dissection >>> a=ICMPv6ND_RS(b'\x85\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 133 and a.code == 0 and a.cksum == 0 and a.res == 0 True ###(159)=[passed] ICMPv6ND_RS - Basic instantiation with empty dst in IPv6 underlayer >>> a=IPv6(b'`\x00\x00\x00\x00\x08:\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x85\x00M\xfe\x00\x00\x00\x00') >>> assert isinstance(a, IPv6) and a.nh == 58 and a.hlim == 255 and isinstance(a.payload, ICMPv6ND_RS) and a.payload.type == 133 and a.payload.code == 0 and a.payload.cksum == 0x4dfe and a.payload.res == 0 >>> assert a.hashret() == b":" ###### ## Test ICMPv6ND_RA() class - ICMPv6 Type 134 Code 0 ###### ###(160)=[passed] ICMPv6ND_RA - Basic Instantiation >>> raw(ICMPv6ND_RA()) == b'\x86\x00\x00\x00\x00\x08\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00' True ###(161)=[passed] ICMPv6ND_RA - Basic instantiation with empty dst in IPv6 underlayer >>> raw(IPv6(src="2001:db8::1")/ICMPv6ND_RA()) == b'`\x00\x00\x00\x00\x10:\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x86\x00E\xe7\x00\x08\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00' True ###(162)=[passed] ICMPv6ND_RA - Basic dissection >>> a=ICMPv6ND_RA(b'\x86\x00\x00\x00\x00\x08\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 134 and a.code == 0 and a.cksum == 0 and a.chlim == 0 and a.M == 0 and a.O == 0 and a.H == 0 and a.prf == 1 and a.res == 0 and a.routerlifetime == 1800 and a.reachabletime == 0 and a.retranstimer == 0 True ###(163)=[passed] ICMPv6ND_RA - Basic instantiation with empty dst in IPv6 underlayer >>> a=IPv6(b'`\x00\x00\x00\x00\x10:\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x86\x00E\xe7\x00\x08\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00') >>> isinstance(a, IPv6) and a.nh == 58 and a.hlim == 255 and isinstance(a.payload, ICMPv6ND_RA) and a.payload.type == 134 and a.code == 0 and a.cksum == 0x45e7 and a.chlim == 0 and a.M == 0 and a.O == 0 and a.H == 0 and a.prf == 1 and a.res == 0 and a.routerlifetime == 1800 and a.reachabletime == 0 and a.retranstimer == 0 True ###(164)=[passed] ICMPv6ND_RA - Answers >>> assert ICMPv6ND_RA().answers(ICMPv6ND_RS()) >>> a=IPv6(b'`\x00\x00\x00\x00\x10:\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x86\x00E\xe7\x00\x08\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = IPv6(b"`\x00\x00\x00\x00\x10:\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x85\x00M\xff\x00\x00\x00\x00") >>> assert a.answers(b) ###(165)=[passed] ICMPv6ND_RA - Summary Output >>> ICMPv6ND_RA(chlim=42, M=0, O=1, H=0, prf=1, P=0, routerlifetime=300).mysummary() == "ICMPv6 Neighbor Discovery - Router Advertisement Lifetime 300 Hop Limit 42 Preference High Managed 0 Other 1 Home 0" True ###### ## ICMPv6ND_NS Class Test ###### ###(166)=[passed] ICMPv6ND_NS - Basic Instantiation >>> raw(ICMPv6ND_NS()) == b'\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(167)=[passed] ICMPv6ND_NS - Instantiation with specific values >>> raw(ICMPv6ND_NS(code=0x11, res=3758096385, tgt="ffff::1111")) == b'\x87\x11\x00\x00\xe0\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(168)=[passed] ICMPv6ND_NS - Basic Dissection >>> a=ICMPv6ND_NS(b'\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.code==0 and a.res==0 and a.tgt=="::" True ###(169)=[passed] ICMPv6ND_NS - Dissection with specific values >>> a=ICMPv6ND_NS(b'\x87\x11\x00\x00\xe0\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> assert a.code==0x11 and a.res==3758096385 and a.tgt=="ffff::1111" >>> assert a.hashret() == b"ffff::1111" ###(170)=[passed] ICMPv6ND_NS - IPv6 layer fields overloading >>> a=IPv6(raw(IPv6()/ICMPv6ND_NS())) >>> a.nh == 58 and a.dst=="ff02::1" and a.hlim==255 True ###### ## ICMPv6ND_NA Class Test ###### ###(171)=[passed] ICMPv6ND_NA - Basic Instantiation >>> raw(ICMPv6ND_NA()) == b'\x88\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(172)=[passed] ICMPv6ND_NA - Instantiation with specific values >>> raw(ICMPv6ND_NA(code=0x11, R=0, S=1, O=0, res=1, tgt="ffff::1111")) == b'\x88\x11\x00\x00@\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(173)=[passed] ICMPv6ND_NA - Basic Dissection >>> a=ICMPv6ND_NA(b'\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.code==0 and a.R==0 and a.S==0 and a.O==0 and a.res==0 and a.tgt=="::" True ###(174)=[passed] ICMPv6ND_NA - Dissection with specific values >>> a=ICMPv6ND_NA(b'\x88\x11\x00\x00@\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.code==0x11 and a.R==0 and a.S==1 and a.O==0 and a.res==1 and a.tgt=="ffff::1111" True >>> assert a.hashret() == b'ffff::1111' ###(175)=[passed] ICMPv6ND_NS - IPv6 layer fields overloading >>> a=IPv6(raw(IPv6()/ICMPv6ND_NS())) >>> a.nh == 58 and a.dst=="ff02::1" and a.hlim==255 True ###### ## ICMPv6ND_ND/ICMPv6ND_ND matching test ###### ###(176)=[passed] ICMPv6ND_ND/ICMPv6ND_ND matching - test 1 >>> a=IPv6(b'`\x00\x00\x00\x00\x18:\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x0f\x1f\xff\xfe\xcaFP\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87\x00UC\x00\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x0f4\xff\xfe\x8a\x8a\xa1') >>> b=IPv6(b'n\x00\x00\x00\x00 :\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x0f4\xff\xfe\x8a\x8a\xa1\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x0f\x1f\xff\xfe\xcaFP\x88\x00\xf3F\xe0\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x0f4\xff\xfe\x8a\x8a\xa1\x02\x01\x00\x0f4\x8a\x8a\xa1') >>> b.answers(a) True ###### ## ICMPv6NDOptUnknown Class Test ###### ###(177)=[passed] ICMPv6NDOptUnknown - Basic Instantiation >>> b = b'\x00\x01\x00\x00\x00\x00\x00\x00' >>> >>> raw(ICMPv6NDOptUnknown()) == b True ###(178)=[passed] ICMPv6NDOptUnknown - Instantiation with specific values >>> raw(ICMPv6NDOptUnknown(data="somestring")) == b'\x00\x02somestring\x00\x00\x00\x00' True ###(179)=[passed] ICMPv6NDOptUnknown - Basic Dissection >>> b = b'\x00\x01\x00\x00\x00\x00\x00\x00' >>> >>> p = ICMPv6NDOptUnknown(b) >>> p.type == 0 and p.len == 1 and p.data == b'\x00' * 6 True >>> >>> p = ICMPv6NDOptUnknown(b + b'\x00') ICMPv6NDOptUnknown.guess_payload_class() returned [None] >>> assert Raw in p and raw(p[Raw]) == b'\x00' >>> >>> p = ICMPv6NDOptUnknown(b + b'\x00\x00') >>> assert raw(p[ICMPv6NDOptUnknown:2]) == b'\x00\x00' ###(180)=[passed] ICMPv6NDOptUnknown - Dissection with specific values >>> p = ICMPv6NDOptUnknown(b'\x00\x01string') >>> assert p.type == 0 and p.len == 1 and p.data == b'string' >>> >>> p = ICMPv6NDOptUnknown(b'\x00\x04somestring') >>> assert p.type == 0 and p.len == 4 and p.data == b'somestring' ###(181)=[passed] ICMPv6NDOptUnknown - Instantiation/Dissection with unknown option in the middle >>> b = b'\x01\x01\x00\x00\x00\x00\x00\x00\x00\x02somestring\x00\x00\x00\x00%\x01\x00\x00\x00\x00\x00\x00' >>> >>> p = ICMPv6NDOptSrcLLAddr()/ICMPv6NDOptUnknown(data='somestring')/ICMPv6NDOptCaptivePortal() >>> assert raw(p) == b >>> >>> p = ICMPv6NDOptSrcLLAddr(b)[ICMPv6NDOptUnknown] >>> assert p.type == 0 and p.len == 2 and p.data == b'somestring\x00\x00\x00\x00' ###(182)=[passed] ICMPv6NDOptUnknown - fuzz >>> assert isinstance(fuzz(ICMPv6NDOptUnknown()).type, RandByte) ###### ## ICMPv6NDOptSrcLLAddr Class Test ###### ###(183)=[passed] ICMPv6NDOptSrcLLAddr - Basic Instantiation >>> raw(ICMPv6NDOptSrcLLAddr()) == b'\x01\x01\x00\x00\x00\x00\x00\x00' True ###(184)=[passed] ICMPv6NDOptSrcLLAddr - Instantiation with specific values >>> raw(ICMPv6NDOptSrcLLAddr(len=2, lladdr="11:11:11:11:11:11")) == b'\x01\x02\x11\x11\x11\x11\x11\x11' True ###(185)=[passed] ICMPv6NDOptSrcLLAddr - Basic Dissection >>> a=ICMPv6NDOptSrcLLAddr(b'\x01\x01\x00\x00\x00\x00\x00\x00') >>> a.type == 1 and a.len == 1 and a.lladdr == "00:00:00:00:00:00" True ###(186)=[passed] ICMPv6NDOptSrcLLAddr - Instantiation with specific values >>> a=ICMPv6NDOptSrcLLAddr(b'\x01\x02\x11\x11\x11\x11\x11\x11') >>> a.type == 1 and a.len == 2 and a.lladdr == "11:11:11:11:11:11" True ###### ## ICMPv6NDOptDstLLAddr Class Test ###### ###(187)=[passed] ICMPv6NDOptDstLLAddr - Basic Instantiation >>> raw(ICMPv6NDOptDstLLAddr()) == b'\x02\x01\x00\x00\x00\x00\x00\x00' True ###(188)=[passed] ICMPv6NDOptDstLLAddr - Instantiation with specific values >>> raw(ICMPv6NDOptDstLLAddr(len=2, lladdr="11:11:11:11:11:11")) == b'\x02\x02\x11\x11\x11\x11\x11\x11' True ###(189)=[passed] ICMPv6NDOptDstLLAddr - Basic Dissection >>> a=ICMPv6NDOptDstLLAddr(b'\x02\x01\x00\x00\x00\x00\x00\x00') >>> a.type == 2 and a.len == 1 and a.lladdr == "00:00:00:00:00:00" True ###(190)=[passed] ICMPv6NDOptDstLLAddr - Instantiation with specific values >>> a=ICMPv6NDOptDstLLAddr(b'\x02\x02\x11\x11\x11\x11\x11\x11') >>> a.type == 2 and a.len == 2 and a.lladdr == "11:11:11:11:11:11" True ###### ## ICMPv6NDOptPrefixInfo Class Test ###### ###(191)=[passed] ICMPv6NDOptPrefixInfo - Basic Instantiation >>> raw(ICMPv6NDOptPrefixInfo()) == b'\x03\x04@\xc0\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(192)=[passed] ICMPv6NDOptPrefixInfo - Instantiation with specific values >>> raw(ICMPv6NDOptPrefixInfo(len=5, prefixlen=64, L=0, A=0, R=1, res1=1, validlifetime=0x11111111, preferredlifetime=0x22222222, res2=0x33333333, prefix="2001:db8::1")) == b'\x03\x05@!\x11\x11\x11\x11""""3333 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(193)=[passed] ICMPv6NDOptPrefixInfo - Basic Dissection >>> a=ICMPv6NDOptPrefixInfo(b'\x03\x04\x00\xc0\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 3 and a.len == 4 and a.prefixlen == 0 and a.L == 1 and a.A == 1 and a.R == 0 and a.res1 == 0 and a.validlifetime == 0xffffffff and a.preferredlifetime == 0xffffffff and a.res2 == 0 and a.prefix == "::" True ###(194)=[passed] ICMPv6NDOptPrefixInfo - Instantiation with specific values >>> a=ICMPv6NDOptPrefixInfo(b'\x03\x05@!\x11\x11\x11\x11""""3333 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.type == 3 and a.len == 5 and a.prefixlen == 64 and a.L == 0 and a.A == 0 and a.R == 1 and a.res1 == 1 and a.validlifetime == 0x11111111 and a.preferredlifetime == 0x22222222 and a.res2 == 0x33333333 and a.prefix == "2001:db8::1" True ###### ## ICMPv6NDOptRedirectedHdr Class Test ###### ###(195)=[passed] ICMPv6NDOptRedirectedHdr - Basic Instantiation >>> raw(ICMPv6NDOptRedirectedHdr()) == b'\x04\x01\x00\x00\x00\x00\x00\x00' True ###(196)=[passed] ICMPv6NDOptRedirectedHdr - Instantiation with specific values >>> raw(ICMPv6NDOptRedirectedHdr(len=0xff, res="abcdef", pkt="somestringthatisnotanipv6packet")) == b'\x04\xffabcdefsomestringthatisnotanipv' True ###(197)=[passed] ICMPv6NDOptRedirectedHdr - Instantiation with simple IPv6 packet (no upper layer) >>> raw(ICMPv6NDOptRedirectedHdr(pkt=IPv6())) == b'\x04\x06\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(198)=[passed] ICMPv6NDOptRedirectedHdr - Basic Dissection >>> a=ICMPv6NDOptRedirectedHdr(b'\x04\x00\x00\x00') >>> assert a.type == 4 >>> assert a.len == 0 >>> assert a.res == b"\x00\x00" >>> assert a.pkt == b"" ###(199)=[passed] ICMPv6NDOptRedirectedHdr - Disssection with specific values >>> with no_debug_dissector(): ... a=ICMPv6NDOptRedirectedHdr(b'\x04\xff\x11\x11\x00\x00\x00\x00somerawingthatisnotanipv6pac') ... >>> a.type == 4 and a.len == 255 and a.res == b'\x11\x11\x00\x00\x00\x00' and isinstance(a.pkt, Raw) and a.pkt.load == b"somerawingthatisnotanipv6pac" True ###(200)=[passed] ICMPv6NDOptRedirectedHdr - Dissection with cut IPv6 Header >>> with no_debug_dissector(): ... a=ICMPv6NDOptRedirectedHdr(b'\x04\x06\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') ... >>> a.type == 4 and a.len == 6 and a.res == b"\x00\x00\x00\x00\x00\x00" and isinstance(a.pkt, Raw) and a.pkt.load == b'`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(201)=[passed] ICMPv6NDOptRedirectedHdr - Complete dissection >>> x=ICMPv6NDOptRedirectedHdr(b'\x04\x06\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> y=x.copy() >>> del y.len >>> x == ICMPv6NDOptRedirectedHdr(raw(y)) True ###### ## ICMPv6NDOptMTU Class Test ###### ###(202)=[passed] ICMPv6NDOptMTU - Basic Instantiation >>> raw(ICMPv6NDOptMTU()) == b'\x05\x01\x00\x00\x00\x00\x05\x00' True ###(203)=[passed] ICMPv6NDOptMTU - Instantiation with specific values >>> raw(ICMPv6NDOptMTU(len=2, res=0x1111, mtu=1500)) == b'\x05\x02\x11\x11\x00\x00\x05\xdc' True ###(204)=[passed] ICMPv6NDOptMTU - Basic dissection >>> a=ICMPv6NDOptMTU(b'\x05\x01\x00\x00\x00\x00\x05\x00') >>> a.type == 5 and a.len == 1 and a.res == 0 and a.mtu == 1280 True ###(205)=[passed] ICMPv6NDOptMTU - Dissection with specific values >>> a=ICMPv6NDOptMTU(b'\x05\x02\x11\x11\x00\x00\x05\xdc') >>> a.type == 5 and a.len == 2 and a.res == 0x1111 and a.mtu == 1500 True ###(206)=[passed] ICMPv6NDOptMTU - Summary Output >>> ICMPv6NDOptMTU(b'\x05\x02\x11\x11\x00\x00\x05\xdc').mysummary() == "ICMPv6 Neighbor Discovery Option - MTU 1500" True ###### ## ICMPv6NDOptShortcutLimit Class Test (RFC2491) ###### ###(207)=[passed] ICMPv6NDOptShortcutLimit - Basic Instantiation >>> raw(ICMPv6NDOptShortcutLimit()) == b'\x06\x01(\x00\x00\x00\x00\x00' True ###(208)=[passed] ICMPv6NDOptShortcutLimit - Instantiation with specific values >>> raw(ICMPv6NDOptShortcutLimit(len=2, shortcutlim=0x11, res1=0xee, res2=0xaaaaaaaa)) == b'\x06\x02\x11\xee\xaa\xaa\xaa\xaa' True ###(209)=[passed] ICMPv6NDOptShortcutLimit - Basic Dissection >>> a=ICMPv6NDOptShortcutLimit(b'\x06\x01(\x00\x00\x00\x00\x00') >>> a.type == 6 and a.len == 1 and a.shortcutlim == 40 and a.res1 == 0 and a.res2 == 0 True ###(210)=[passed] ICMPv6NDOptShortcutLimit - Dissection with specific values >>> a=ICMPv6NDOptShortcutLimit(b'\x06\x02\x11\xee\xaa\xaa\xaa\xaa') >>> a.len==2 and a.shortcutlim==0x11 and a.res1==0xee and a.res2==0xaaaaaaaa True ###### ## ICMPv6NDOptAdvInterval Class Test ###### ###(211)=[passed] ICMPv6NDOptAdvInterval - Basic Instantiation >>> raw(ICMPv6NDOptAdvInterval()) == b'\x07\x01\x00\x00\x00\x00\x00\x00' True ###(212)=[passed] ICMPv6NDOptAdvInterval - Instantiation with specific values >>> raw(ICMPv6NDOptAdvInterval(len=2, res=0x1111, advint=0xffffffff)) == b'\x07\x02\x11\x11\xff\xff\xff\xff' True ###(213)=[passed] ICMPv6NDOptAdvInterval - Basic dissection >>> a=ICMPv6NDOptAdvInterval(b'\x07\x01\x00\x00\x00\x00\x00\x00') >>> a.type == 7 and a.len == 1 and a.res == 0 and a.advint == 0 True ###(214)=[passed] ICMPv6NDOptAdvInterval - Dissection with specific values >>> a=ICMPv6NDOptAdvInterval(b'\x07\x02\x11\x11\xff\xff\xff\xff') >>> a.type == 7 and a.len == 2 and a.res == 0x1111 and a.advint == 0xffffffff True ###### ## ICMPv6NDOptHAInfo Class Test ###### ###(215)=[passed] ICMPv6NDOptHAInfo - Basic Instantiation >>> raw(ICMPv6NDOptHAInfo()) == b'\x08\x01\x00\x00\x00\x00\x00\x01' True ###(216)=[passed] ICMPv6NDOptHAInfo - Instantiation with specific values >>> raw(ICMPv6NDOptHAInfo(len=2, res=0x1111, pref=0x2222, lifetime=0x3333)) == b'\x08\x02\x11\x11""33' True ###(217)=[passed] ICMPv6NDOptHAInfo - Basic dissection >>> a=ICMPv6NDOptHAInfo(b'\x08\x01\x00\x00\x00\x00\x00\x01') >>> a.type == 8 and a.len == 1 and a.res == 0 and a.pref == 0 and a.lifetime == 1 True ###(218)=[passed] ICMPv6NDOptHAInfo - Dissection with specific values >>> a=ICMPv6NDOptHAInfo(b'\x08\x02\x11\x11""33') >>> a.type == 8 and a.len == 2 and a.res == 0x1111 and a.pref == 0x2222 and a.lifetime == 0x3333 True ###### ## ICMPv6NDOptSrcAddrList Class Test ###### ###(219)=[passed] ICMPv6NDOptSrcAddrList - Basic Instantiation >>> raw(ICMPv6NDOptSrcAddrList()) == b'\t\x01\x00\x00\x00\x00\x00\x00' True ###(220)=[passed] ICMPv6NDOptSrcAddrList - Instantiation with specific values (auto len) >>> raw(ICMPv6NDOptSrcAddrList(res="BBBBBB", addrlist=["ffff::ffff", "1111::1111"])) == b'\t\x05BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(221)=[passed] ICMPv6NDOptSrcAddrList - Instantiation with specific values >>> raw(ICMPv6NDOptSrcAddrList(len=3, res="BBBBBB", addrlist=["ffff::ffff", "1111::1111"])) == b'\t\x03BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(222)=[passed] ICMPv6NDOptSrcAddrList - Basic Dissection >>> a=ICMPv6NDOptSrcAddrList(b'\t\x01\x00\x00\x00\x00\x00\x00') >>> a.type == 9 and a.len == 1 and a.res == b'\x00\x00\x00\x00\x00\x00' and not a.addrlist True ###(223)=[passed] ICMPv6NDOptSrcAddrList - Dissection with specific values (auto len) >>> a=ICMPv6NDOptSrcAddrList(b'\t\x05BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.type == 9 and a.len == 5 and a.res == b'BBBBBB' and len(a.addrlist) == 2 and a.addrlist[0] == "ffff::ffff" and a.addrlist[1] == "1111::1111" True ###(224)=[passed] ICMPv6NDOptSrcAddrList - Dissection with specific values >>> with no_debug_dissector(): ... a=ICMPv6NDOptSrcAddrList(b'\t\x03BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') ... >>> a.type == 9 and a.len == 3 and a.res == b'BBBBBB' and len(a.addrlist) == 1 and a.addrlist[0] == "ffff::ffff" and isinstance(a.payload, Raw) and a.payload.load == b'\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###### ## ICMPv6NDOptTgtAddrList Class Test ###### ###(225)=[passed] ICMPv6NDOptTgtAddrList - Basic Instantiation >>> raw(ICMPv6NDOptTgtAddrList()) == b'\n\x01\x00\x00\x00\x00\x00\x00' True ###(226)=[passed] ICMPv6NDOptTgtAddrList - Instantiation with specific values (auto len) >>> raw(ICMPv6NDOptTgtAddrList(res="BBBBBB", addrlist=["ffff::ffff", "1111::1111"])) == b'\n\x05BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(227)=[passed] ICMPv6NDOptTgtAddrList - Instantiation with specific values >>> raw(ICMPv6NDOptTgtAddrList(len=3, res="BBBBBB", addrlist=["ffff::ffff", "1111::1111"])) == b'\n\x03BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(228)=[passed] ICMPv6NDOptTgtAddrList - Basic Dissection >>> a=ICMPv6NDOptTgtAddrList(b'\n\x01\x00\x00\x00\x00\x00\x00') >>> a.type == 10 and a.len == 1 and a.res == b'\x00\x00\x00\x00\x00\x00' and not a.addrlist True ###(229)=[passed] ICMPv6NDOptTgtAddrList - Dissection with specific values (auto len) >>> a=ICMPv6NDOptTgtAddrList(b'\n\x05BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.type == 10 and a.len == 5 and a.res == b'BBBBBB' and len(a.addrlist) == 2 and a.addrlist[0] == "ffff::ffff" and a.addrlist[1] == "1111::1111" True ###(230)=[passed] ICMPv6NDOptTgtAddrList - Instantiation with specific values >>> with no_debug_dissector(): ... a=ICMPv6NDOptTgtAddrList(b'\n\x03BBBBBB\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') ... >>> a.type == 10 and a.len == 3 and a.res == b'BBBBBB' and len(a.addrlist) == 1 and a.addrlist[0] == "ffff::ffff" and isinstance(a.payload, Raw) and a.payload.load == b'\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###### ## ICMPv6NDOptIPAddr Class Test (RFC 4068) ###### ###(231)=[passed] ICMPv6NDOptIPAddr - Basic Instantiation >>> raw(ICMPv6NDOptIPAddr()) == b'\x11\x03\x01@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(232)=[passed] ICMPv6NDOptIPAddr - Instantiation with specific values >>> raw(ICMPv6NDOptIPAddr(len=5, optcode=0xff, plen=40, res=0xeeeeeeee, addr="ffff::1111")) == b'\x11\x05\xff(\xee\xee\xee\xee\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(233)=[passed] ICMPv6NDOptIPAddr - Basic Dissection >>> a=ICMPv6NDOptIPAddr(b'\x11\x03\x01@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 17 and a.len == 3 and a.optcode == 1 and a.plen == 64 and a.res == 0 and a.addr == "::" True ###(234)=[passed] ICMPv6NDOptIPAddr - Dissection with specific values >>> a=ICMPv6NDOptIPAddr(b'\x11\x05\xff(\xee\xee\xee\xee\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.type == 17 and a.len == 5 and a.optcode == 0xff and a.plen == 40 and a.res == 0xeeeeeeee and a.addr == "ffff::1111" True ###### ## ICMPv6NDOptNewRtrPrefix Class Test (RFC 4068) ###### ###(235)=[passed] ICMPv6NDOptNewRtrPrefix - Basic Instantiation >>> raw(ICMPv6NDOptNewRtrPrefix()) == b'\x12\x03\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(236)=[passed] ICMPv6NDOptNewRtrPrefix - Instantiation with specific values >>> raw(ICMPv6NDOptNewRtrPrefix(len=5, optcode=0xff, plen=40, res=0xeeeeeeee, prefix="ffff::1111")) == b'\x12\x05\xff(\xee\xee\xee\xee\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(237)=[passed] ICMPv6NDOptNewRtrPrefix - Basic Dissection >>> a=ICMPv6NDOptNewRtrPrefix(b'\x12\x03\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 18 and a.len == 3 and a.optcode == 0 and a.plen == 64 and a.res == 0 and a.prefix == "::" True ###(238)=[passed] ICMPv6NDOptNewRtrPrefix - Dissection with specific values >>> a=ICMPv6NDOptNewRtrPrefix(b'\x12\x05\xff(\xee\xee\xee\xee\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.type == 18 and a.len == 5 and a.optcode == 0xff and a.plen == 40 and a.res == 0xeeeeeeee and a.prefix == "ffff::1111" True ###### ## ICMPv6NDOptLLA Class Test (RFC 4068) ###### ###(239)=[passed] ICMPv6NDOptLLA - Basic Instantiation >>> raw(ICMPv6NDOptLLA()) == b'\x13\x01\x00\x00\x00\x00\x00\x00\x00' True ###(240)=[passed] ICMPv6NDOptLLA - Instantiation with specific values >>> raw(ICMPv6NDOptLLA(len=2, optcode=3, lla="ff:11:ff:11:ff:11")) == b'\x13\x02\x03\xff\x11\xff\x11\xff\x11' True ###(241)=[passed] ICMPv6NDOptLLA - Basic Dissection >>> a=ICMPv6NDOptLLA(b'\x13\x01\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 19 and a.len == 1 and a.optcode == 0 and a.lla == "00:00:00:00:00:00" True ###(242)=[passed] ICMPv6NDOptLLA - Dissection with specific values >>> a=ICMPv6NDOptLLA(b'\x13\x02\x03\xff\x11\xff\x11\xff\x11') >>> a.type == 19 and a.len == 2 and a.optcode == 3 and a.lla == "ff:11:ff:11:ff:11" True ###### ## ICMPv6NDOptRouteInfo Class Test ###### ###(243)=[passed] ICMPv6NDOptRouteInfo - Basic Instantiation >>> raw(ICMPv6NDOptRouteInfo()) == b'\x18\x01\x00\x00\xff\xff\xff\xff' True ###(244)=[passed] ICMPv6NDOptRouteInfo - Instantiation with forced prefix but no length >>> raw(ICMPv6NDOptRouteInfo(prefix="2001:db8:1:1:1:1:1:1")) == b'\x18\x03\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01' True ###(245)=[passed] ICMPv6NDOptRouteInfo - Instantiation with forced length values (1/4) >>> raw(ICMPv6NDOptRouteInfo(len=1, prefix="2001:db8:1:1:1:1:1:1")) == b'\x18\x01\x00\x00\xff\xff\xff\xff' True ###(246)=[passed] ICMPv6NDOptRouteInfo - Instantiation with forced length values (2/4) >>> raw(ICMPv6NDOptRouteInfo(len=2, prefix="2001:db8:1:1:1:1:1:1")) == b'\x18\x02\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x01\x00\x01' True ###(247)=[passed] ICMPv6NDOptRouteInfo - Instantiation with forced length values (3/4) >>> raw(ICMPv6NDOptRouteInfo(len=3, prefix="2001:db8:1:1:1:1:1:1")) == b'\x18\x03\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01' True ###(248)=[passed] ICMPv6NDOptRouteInfo - Instantiation with forced length values (4/4) >>> raw(ICMPv6NDOptRouteInfo(len=4, prefix="2001:db8:1:1:1:1:1:1")) == b'\x18\x04\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00' True ###(249)=[passed] ICMPv6NDOptRouteInfo - Instantiation with specific values >>> raw(ICMPv6NDOptRouteInfo(len=6, plen=0x11, res1=1, prf=3, res2=1, rtlifetime=0x22222222, prefix="2001:db8::1")) == b'\x18\x06\x119"""" \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(250)=[passed] ICMPv6NDOptRouteInfo - Basic dissection >>> a=ICMPv6NDOptRouteInfo(b'\x18\x03\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 24 and a.len == 3 and a.plen == 0 and a.res1 == 0 and a.prf == 0 and a.res2 == 0 and a.rtlifetime == 0xffffffff and a. prefix == "::" True ###(251)=[passed] ICMPv6NDOptRouteInfo - Dissection with specific values >>> a=ICMPv6NDOptRouteInfo(b'\x18\x04\x119"""" \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.plen == 0x11 and a.res1 == 1 and a.prf == 3 and a.res2 == 1 and a.rtlifetime == 0x22222222 and a.prefix == "2001:db8::1" True ###(252)=[passed] ICMPv6NDOptRouteInfo - Summary Output >>> ICMPv6NDOptRouteInfo(b'\x18\x04\x119"""" \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01').mysummary() == "ICMPv6 Neighbor Discovery Option - Route Information Option 2001:db8::1/17 Preference Low" True ###### ## ICMPv6NDOptMAP Class Test ###### ###(253)=[passed] ICMPv6NDOptMAP - Basic Instantiation >>> raw(ICMPv6NDOptMAP()) == b'\x17\x03\x1f\x80\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(254)=[passed] ICMPv6NDOptMAP - Instantiation with specific values >>> raw(ICMPv6NDOptMAP(len=5, dist=3, pref=10, R=0, res=1, validlifetime=0x11111111, addr="ffff::1111")) == b'\x17\x05:\x01\x11\x11\x11\x11\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11' True ###(255)=[passed] ICMPv6NDOptMAP - Basic Dissection >>> a=ICMPv6NDOptMAP(b'\x17\x03\x1f\x80\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type==23 and a.len==3 and a.dist==1 and a.pref==15 and a.R==1 and a.res==0 and a.validlifetime==0xffffffff and a.addr=="::" True ###(256)=[passed] ICMPv6NDOptMAP - Dissection with specific values >>> a=ICMPv6NDOptMAP(b'\x17\x05:\x01\x11\x11\x11\x11\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11') >>> a.type==23 and a.len==5 and a.dist==3 and a.pref==10 and a.R==0 and a.res==1 and a.validlifetime==0x11111111 and a.addr=="ffff::1111" True ###### ## ICMPv6NDOptRDNSS Class Test ###### ###(257)=[passed] ICMPv6NDOptRDNSS - Basic Instantiation >>> raw(ICMPv6NDOptRDNSS()) == b'\x19\x01\x00\x00\xff\xff\xff\xff' True ###(258)=[passed] ICMPv6NDOptRDNSS - Basic instantiation with 1 DNS address >>> raw(ICMPv6NDOptRDNSS(dns=["2001:db8::1"])) == b'\x19\x03\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' True ###(259)=[passed] ICMPv6NDOptRDNSS - Basic instantiation with 2 DNS addresses >>> raw(ICMPv6NDOptRDNSS(dns=["2001:db8::1", "2001:db8::2"])) == b'\x19\x05\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(260)=[passed] ICMPv6NDOptRDNSS - Instantiation with specific values >>> raw(ICMPv6NDOptRDNSS(len=43, res=0xaaee, lifetime=0x11111111, dns=["2001:db8::2"])) == b'\x19+\xaa\xee\x11\x11\x11\x11 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' True ###(261)=[passed] ICMPv6NDOptRDNSS - Basic Dissection >>> a=ICMPv6NDOptRDNSS(b'\x19\x01\x00\x00\xff\xff\xff\xff') >>> a.type==25 and a.len==1 and a.res == 0 and a.dns==[] True ###(262)=[passed] ICMPv6NDOptRDNSS - Dissection (with 1 DNS address) >>> a=ICMPv6NDOptRDNSS(b'\x19\x03\x00\x00\xff\xff\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') >>> a.type==25 and a.len==3 and a.res ==0 and len(a.dns) == 1 and a.dns[0] == "2001:db8::1" True ###(263)=[passed] ICMPv6NDOptRDNSS - Dissection (with 2 DNS addresses) >>> a=ICMPv6NDOptRDNSS(b'\x19\x05\xaa\xee\xff\xff\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.type==25 and a.len==5 and a.res == 0xaaee and len(a.dns) == 2 and a.dns[0] == "2001:db8::1" and a.dns[1] == "2001:db8::2" True ###(264)=[passed] ICMPv6NDOptRDNSS - Summary Output >>> a=ICMPv6NDOptRDNSS(b'\x19\x05\xaa\xee\xff\xff\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') >>> a.mysummary() == "ICMPv6 Neighbor Discovery Option - Recursive DNS Server Option 2001:db8::1, 2001:db8::2" True ###### ## ICMPv6NDOptDNSSL Class Test ###### ###(265)=[passed] ICMPv6NDOptDNSSL - Basic Instantiation >>> raw(ICMPv6NDOptDNSSL()) == b'\x1f\x01\x00\x00\xff\xff\xff\xff' True ###(266)=[passed] ICMPv6NDOptDNSSL - Instantiation with 1 search domain, as seen in the wild >>> raw(ICMPv6NDOptDNSSL(lifetime=60, searchlist=["home."])) == b'\x1f\x02\x00\x00\x00\x00\x00<\x04home\x00\x00\x00' True ###(267)=[passed] ICMPv6NDOptDNSSL - Basic instantiation with 2 search domains >>> raw(ICMPv6NDOptDNSSL(searchlist=["home.", "office."])) == b'\x1f\x03\x00\x00\xff\xff\xff\xff\x04home\x00\x06office\x00\x00\x00' True ###(268)=[passed] ICMPv6NDOptDNSSL - Basic instantiation with 3 search domains >>> raw(ICMPv6NDOptDNSSL(searchlist=["home.", "office.", "here.there."])) == b'\x1f\x05\x00\x00\xff\xff\xff\xff\x04home\x00\x06office\x00\x04here\x05there\x00\x00\x00\x00\x00\x00\x00' True ###(269)=[passed] ICMPv6NDOptDNSSL - Basic Dissection >>> p = ICMPv6NDOptDNSSL(b'\x1f\x01\x00\x00\xff\xff\xff\xff') >>> p.type == 31 and p.len == 1 and p.res == 0 and p.searchlist == [] True ###(270)=[passed] ICMPv6NDOptDNSSL - Basic Dissection with specific values >>> p = ICMPv6NDOptDNSSL(b'\x1f\x02\x00\x00\x00\x00\x00<\x04home\x00\x00\x00') >>> p.type == 31 and p.len == 2 and p.res == 0 and p.lifetime == 60 and p.searchlist == ["home."] True ###(271)=[passed] ICMPv6NDOptDNSSL - Summary Output >>> ICMPv6NDOptDNSSL(searchlist=["home.", "office.", "{"]).mysummary() == "ICMPv6 Neighbor Discovery Option - DNS Search List Option home., office., {" True ###### ## ICMPv6NDOptCaptivePortal Class Test ###### ###(272)=[passed] ICMPv6NDOptCaptivePortal - Basic Instantiation >>> raw(ICMPv6NDOptCaptivePortal()) == b"\x25\x01\x00\x00\x00\x00\x00\x00" True ###(273)=[passed] ICMPv6NDOptCaptivePortal - Instantiation with captive portal URI >>> raw(ICMPv6NDOptCaptivePortal(URI="https://example.com")) == b"\x25\x03https://example.com\x00\x00\x00" True ###(274)=[passed] ICMPv6NDOptCaptivePortal - Instantiation where total length is already a multiple of 8 bytes >>> p = ICMPv6NDOptCaptivePortal(URI="abcdef") >>> len(p) == 8 and raw(p) == b"\x25\x01abcdef" and ICMPv6NDOptCaptivePortal(raw(p)).URI == b"abcdef" True ###(275)=[passed] ICMPv6NDOptCaptivePortal - Basic Dissection >>> p = ICMPv6NDOptCaptivePortal(b"\x25\x01\x00\x00\x00\x00\x00\x00") >>> p.type == 37 and p.len == 1 and p.URI == b"" True ###(276)=[passed] ICMPv6NDOptCaptivePortal - Basic Dissection with captive portal URI >>> p = ICMPv6NDOptCaptivePortal(b"\x25\x03https://example.com\x00\x00\x00") >>> p.type == 37 and p.len == 3 and p.URI == b"https://example.com" True ###(277)=[passed] ICMPv6NDOptCaptivePortal - Dissection with zero length >>> p = ICMPv6NDOptCaptivePortal(b"\x25\x00abcdef\x00\x01") >>> p.type == 37 and p.len == 0 and p.URI == b"abcdef" True >>> pay = p.payload >>> assert pay.type == 0 and pay.len == 1 and pay.data == b"" ###(278)=[passed] ICMPv6NDOptCaptivePortal - Summary Output >>> ICMPv6NDOptCaptivePortal(URI="https://example.com").mysummary() == "ICMPv6 Neighbor Discovery Option - Captive-Portal Option b'https://example.com'" True ###### ## ICMPv6NDOptEFA Class Test ###### ###(279)=[passed] ICMPv6NDOptEFA - Basic Instantiation >>> raw(ICMPv6NDOptEFA()) == b'\x1a\x01\x00\x00\x00\x00\x00\x00' True ###(280)=[passed] ICMPv6NDOptEFA - Basic Dissection >>> a=ICMPv6NDOptEFA(b'\x1a\x01\x00\x00\x00\x00\x00\x00') >>> a.type==26 and a.len==1 and a.res == 0 True ###### ## ICMPv6NDOptPREF64 Class Test ###### ###(281)=[passed] ICMPv6NDOptPREF64 - Basic Instantiation >>> raw(ICMPv6NDOptPREF64()) == b'\x26\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(282)=[passed] ICMPv6NDOptPREF64 - Basic Dissection >>> p = ICMPv6NDOptPREF64(b'\x26\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert p.type == 38 and p.len == 2 and p.scaledlifetime == 0 and p.plc == 0 and p.prefix == '::' ###(283)=[passed] ICMPv6NDOptPREF64 - Instantiation/Dissection with specific values >>> p = ICMPv6NDOptPREF64(scaledlifetime=225, plc='/64', prefix='2003:da8:1::') >>> assert raw(p) == b'\x26\x02\x07\x09\x20\x03\x0d\xa8\x00\x01\x00\x00\x00\x00\x00\x00' >>> >>> p = ICMPv6NDOptPREF64(raw(p)) >>> assert p.type == 38 and p.len == 2 and p.scaledlifetime == 225 and p.plc == 1 and p.prefix == '2003:da8:1::' >>> >>> p = ICMPv6NDOptPREF64(raw(p) + b'\x00\x00\x00\x00') >>> assert ICMPv6NDOptUnknown in p and len(p[ICMPv6NDOptUnknown]) == 4 ###(284)=[passed] ICMPv6NDOptPREF64 - Summary Output >>> ICMPv6NDOptPREF64(prefix='12:34:56::', plc='/32').mysummary() == "ICMPv6 Neighbor Discovery Option - PREF64 Option 12:34:56::/32" True >>> ICMPv6NDOptPREF64(prefix='12:34:56::', plc=6).mysummary() == "ICMPv6 Neighbor Discovery Option - PREF64 Option 12:34:56::[invalid PLC(6)]" True ###### ## Test Node Information Query - ICMPv6NIQueryNOOP ###### ###(285)=[passed] ICMPv6NIQueryNOOP - Basic Instantiation >>> raw(ICMPv6NIQueryNOOP(nonce=b"\x00"*8)) == b'\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(286)=[passed] ICMPv6NIQueryNOOP - Basic Dissection >>> a = ICMPv6NIQueryNOOP(b'\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 139 and a.code == 1 and a.cksum == 0 and a.qtype == 0 and a.unused == 0 and a.flags == 0 and a.nonce == b"\x00"*8 and a.data == b"" True ###### ## Test Node Information Query - ICMPv6NIQueryName ###### ###(287)=[passed] ICMPv6NIQueryName - single label DNS name (internal) >>> a=ICMPv6NIQueryName(data="abricot").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x07abricot\x00\x00' True ###(288)=[passed] ICMPv6NIQueryName - single label DNS name >>> ICMPv6NIQueryName(data="abricot").data == b"abricot" True ###(289)=[passed] ICMPv6NIQueryName - fqdn (internal) >>> a=ICMPv6NIQueryName(data="n.d.org").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x01n\x01d\x03org\x00' True ###(290)=[passed] ICMPv6NIQueryName - fqdn >>> ICMPv6NIQueryName(data="n.d.org").data == b"n.d.org" True ###(291)=[passed] ICMPv6NIQueryName - IPv6 address (internal) >>> a=ICMPv6NIQueryName(data="2001:db8::1").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == '2001:db8::1' True ###(292)=[passed] ICMPv6NIQueryName - IPv6 address >>> ICMPv6NIQueryName(data="2001:db8::1").data == "2001:db8::1" True ###(293)=[passed] ICMPv6NIQueryName - IPv4 address (internal) >>> a=ICMPv6NIQueryName(data="169.254.253.252").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and a[1] == '169.254.253.252' True ###(294)=[passed] ICMPv6NIQueryName - IPv4 address >>> ICMPv6NIQueryName(data="169.254.253.252").data == '169.254.253.252' True ###(295)=[passed] ICMPv6NIQueryName - build & dissection >>> s = raw(IPv6()/ICMPv6NIQueryName(data="n.d.org")) >>> p = IPv6(s) >>> ICMPv6NIQueryName in p and p[ICMPv6NIQueryName].data == b"n.d.org" True ###(296)=[passed] ICMPv6NIQueryName - dissection >>> s = b'\x8b\x00z^\x00\x02\x00\x00\x00\x03g\x90\xc7\xa3\xdd[\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> p = ICMPv6NIQueryName(s) >>> p.show() ###[ ICMPv6 Node Information Query - IPv6 Name Query ]### type = ICMP Node Information Query code = IPv6 Query cksum = 0x7a5e qtype = Node Name unused = 0 flags = nonce = b'\x00\x03g\x90\xc7\xa3\xdd[' data = 'ff02::1' >>> assert ICMPv6NIQueryName in p and p.data == "ff02::1" ###### ## Test Node Information Query - ICMPv6NIQueryIPv6 ###### ###(297)=[passed] ICMPv6NIQueryIPv6 - single label DNS name (internal) >>> a = ICMPv6NIQueryIPv6(data="abricot") >>> ls(a) type : ByteEnumField = 139 ('139') code : NIQueryCodeField = None ('None') cksum : XShortField = None ('None') qtype : ShortEnumField = 3 ('3') unused : BitField (10 bits) = 0 ('0') flags : FlagsField = ('62') nonce : NonceField = ('') data : NIQueryDataField = b'abricot' ("(1, b'\\x00\\x00\\x00')") >>> a = a.getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x07abricot\x00\x00' True ###(298)=[passed] ICMPv6NIQueryIPv6 - single label DNS name >>> ICMPv6NIQueryIPv6(data="abricot").data == b"abricot" True ###(299)=[passed] ICMPv6NIQueryIPv6 - fqdn (internal) >>> a=ICMPv6NIQueryIPv6(data="n.d.org").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x01n\x01d\x03org\x00' True ###(300)=[passed] ICMPv6NIQueryIPv6 - fqdn >>> ICMPv6NIQueryIPv6(data="n.d.org").data == b"n.d.org" True ###(301)=[passed] ICMPv6NIQueryIPv6 - IPv6 address (internal) >>> a=ICMPv6NIQueryIPv6(data="2001:db8::1").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == '2001:db8::1' True ###(302)=[passed] ICMPv6NIQueryIPv6 - IPv6 address >>> ICMPv6NIQueryIPv6(data="2001:db8::1").data == "2001:db8::1" True ###(303)=[passed] ICMPv6NIQueryIPv6 - IPv4 address (internal) >>> a=ICMPv6NIQueryIPv6(data="169.254.253.252").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and a[1] == '169.254.253.252' True ###(304)=[passed] ICMPv6NIQueryIPv6 - IPv4 address >>> ICMPv6NIQueryIPv6(data="169.254.253.252").data == '169.254.253.252' True ###### ## Test Node Information Query - ICMPv6NIQueryIPv4 ###### ###(305)=[passed] ICMPv6NIQueryIPv4 - single label DNS name (internal) >>> a=ICMPv6NIQueryIPv4(data="abricot").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x07abricot\x00\x00' True ###(306)=[passed] ICMPv6NIQueryIPv4 - single label DNS name >>> ICMPv6NIQueryIPv4(data="abricot").data == b"abricot" True ###(307)=[passed] ICMPv6NIQueryIPv4 - fqdn (internal) >>> a=ICMPv6NIQueryIPv4(data="n.d.org").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 1 and a[1] == b'\x01n\x01d\x03org\x00' True ###(308)=[passed] ICMPv6NIQueryIPv4 - fqdn >>> ICMPv6NIQueryIPv4(data="n.d.org").data == b"n.d.org" True ###(309)=[passed] ICMPv6NIQueryIPv4 - IPv6 address (internal) >>> a=ICMPv6NIQueryIPv4(data="2001:db8::1").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == '2001:db8::1' True ###(310)=[passed] ICMPv6NIQueryIPv4 - IPv6 address >>> ICMPv6NIQueryIPv4(data="2001:db8::1").data == "2001:db8::1" True ###(311)=[passed] ICMPv6NIQueryIPv4 - IPv4 address (internal) >>> a=ICMPv6NIQueryIPv4(data="169.254.253.252").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and a[1] == '169.254.253.252' True ###(312)=[passed] ICMPv6NIQueryIPv4 - IPv4 address >>> ICMPv6NIQueryIPv4(data="169.254.253.252").data == '169.254.253.252' True ###(313)=[passed] ICMPv6NIQueryIPv4 - dissection >>> s = b'\x8b\x01\x00\x00\x00\x04\x00\x00\xc2\xb9\xc2\x96\xc3\xa1.H\x07freebsd\x00\x00' >>> p = ICMPv6NIQueryIPv4(s) >>> p.show() ###[ ICMPv6 Node Information Query - IPv4 Address Query ]### type = ICMP Node Information Query code = Name Query cksum = 0x0 qtype = IPv4 Address unused = 0 flags = nonce = b'\xc2\xb9\xc2\x96\xc3\xa1.H' data = freebsd >>> assert ICMPv6NIQueryIPv4 in p and p.data == b"freebsd" ###(314)=[passed] ICMPv6NIQueryIPv4 - hashret() >>> random.seed(0x2807) >>> p = IPv6(src="::", dst="::")/ICMPv6NIQueryIPv4(data="freebsd") >>> h = p.hashret() >>> h b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:$#\xb5\xb7\xd0\xbf \xe2' >>> assert h in [ ... b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:g\x02f1\xbd?\xb3\xc4', ... b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x88\xccb\x19~\x9e\xe3a', ... b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:$#\xb5\xb7\xd0\xbf \xe2' ... ] ###### ## Test Node Information Query - Flags tests ###### ###(315)=[passed] ICMPv6NIQuery* - flags handling (Test 1) >>> t = ICMPv6NIQueryIPv6(flags="T") >>> a = ICMPv6NIQueryIPv6(flags="A") >>> c = ICMPv6NIQueryIPv6(flags="C") >>> l = ICMPv6NIQueryIPv6(flags="L") >>> s = ICMPv6NIQueryIPv6(flags="S") >>> g = ICMPv6NIQueryIPv6(flags="G") >>> allflags = ICMPv6NIQueryIPv6(flags="TALCLSG") >>> t.flags == 1 and a.flags == 2 and c.flags == 4 and l.flags == 8 and s.flags == 16 and g.flags == 32 and allflags.flags == 63 True ###(316)=[passed] ICMPv6NIQuery* - flags handling (Test 2) >>> t = raw(ICMPv6NIQueryNOOP(flags="T", nonce="A"*8))[6:8] >>> a = raw(ICMPv6NIQueryNOOP(flags="A", nonce="A"*8))[6:8] >>> c = raw(ICMPv6NIQueryNOOP(flags="C", nonce="A"*8))[6:8] >>> l = raw(ICMPv6NIQueryNOOP(flags="L", nonce="A"*8))[6:8] >>> s = raw(ICMPv6NIQueryNOOP(flags="S", nonce="A"*8))[6:8] >>> g = raw(ICMPv6NIQueryNOOP(flags="G", nonce="A"*8))[6:8] >>> allflags = raw(ICMPv6NIQueryNOOP(flags="TALCLSG", nonce="A"*8))[6:8] >>> t == b'\x00\x01' and a == b'\x00\x02' and c == b'\x00\x04' and l == b'\x00\x08' and s == b'\x00\x10' and g == b'\x00\x20' and allflags == b'\x00\x3F' True ###(317)=[passed] ICMPv6NIReply* - flags handling (Test 1) >>> t = ICMPv6NIReplyIPv6(flags="T") >>> a = ICMPv6NIReplyIPv6(flags="A") >>> c = ICMPv6NIReplyIPv6(flags="C") >>> l = ICMPv6NIReplyIPv6(flags="L") >>> s = ICMPv6NIReplyIPv6(flags="S") >>> g = ICMPv6NIReplyIPv6(flags="G") >>> allflags = ICMPv6NIReplyIPv6(flags="TALCLSG") >>> t.flags == 1 and a.flags == 2 and c.flags == 4 and l.flags == 8 and s.flags == 16 and g.flags == 32 and allflags.flags == 63 True ###(318)=[passed] ICMPv6NIReply* - flags handling (Test 2) >>> t = raw(ICMPv6NIReplyNOOP(flags="T", nonce="A"*8))[6:8] >>> a = raw(ICMPv6NIReplyNOOP(flags="A", nonce="A"*8))[6:8] >>> c = raw(ICMPv6NIReplyNOOP(flags="C", nonce="A"*8))[6:8] >>> l = raw(ICMPv6NIReplyNOOP(flags="L", nonce="A"*8))[6:8] >>> s = raw(ICMPv6NIReplyNOOP(flags="S", nonce="A"*8))[6:8] >>> g = raw(ICMPv6NIReplyNOOP(flags="G", nonce="A"*8))[6:8] >>> allflags = raw(ICMPv6NIReplyNOOP(flags="TALCLSG", nonce="A"*8))[6:8] >>> t == b'\x00\x01' and a == b'\x00\x02' and c == b'\x00\x04' and l == b'\x00\x08' and s == b'\x00\x10' and g == b'\x00\x20' and allflags == b'\x00\x3F' True ###(319)=[passed] ICMPv6NIQuery* - Flags Default values >>> a = ICMPv6NIQueryNOOP() >>> b = ICMPv6NIQueryName() >>> c = ICMPv6NIQueryIPv4() >>> d = ICMPv6NIQueryIPv6() >>> a.flags == 0 and b.flags == 0 and c.flags == 0 and d.flags == 62 True ###(320)=[passed] ICMPv6NIReply* - Flags Default values >>> a = ICMPv6NIReplyIPv6() >>> b = ICMPv6NIReplyName() >>> c = ICMPv6NIReplyIPv6() >>> d = ICMPv6NIReplyIPv4() >>> e = ICMPv6NIReplyRefuse() >>> f = ICMPv6NIReplyUnknown() >>> a.flags == 0 and b.flags == 0 and c.flags == 0 and d.flags == 0 and e.flags == 0 and f.flags == 0 True ###### ## Test Node Information Query - Dispatching ###### ###(321)=[passed] ICMPv6NIQueryIPv6 - dispatch with nothing in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv6()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv6) True ###(322)=[passed] ICMPv6NIQueryIPv6 - dispatch with IPv6 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv6(data="2001::db8::1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv6) True ###(323)=[passed] ICMPv6NIQueryIPv6 - dispatch with IPv4 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv6(data="192.168.0.1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv6) True ###(324)=[passed] ICMPv6NIQueryIPv6 - dispatch with name in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv6(data="alfred")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv6) True ###(325)=[passed] ICMPv6NIQueryName - dispatch with nothing in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryName()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryName) True ###(326)=[passed] ICMPv6NIQueryName - dispatch with IPv6 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryName(data="2001:db8::1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryName) True ###(327)=[passed] ICMPv6NIQueryName - dispatch with IPv4 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryName(data="192.168.0.1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryName) True ###(328)=[passed] ICMPv6NIQueryName - dispatch with name in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryName(data="alfred")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryName) True ###(329)=[passed] ICMPv6NIQueryIPv4 - dispatch with nothing in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv4()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv4) True ###(330)=[passed] ICMPv6NIQueryIPv4 - dispatch with IPv6 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv4(data="2001:db8::1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv4) True ###(331)=[passed] ICMPv6NIQueryIPv4 - dispatch with IPv6 address in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv4(data="192.168.0.1")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv4) True ###(332)=[passed] ICMPv6NIQueryIPv4 - dispatch with name in data >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIQueryIPv4(data="alfred")) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIQueryIPv4) True ###(333)=[passed] ICMPv6NIReplyName - dispatch >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIReplyName()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIReplyName) True ###(334)=[passed] ICMPv6NIReplyIPv6 - dispatch >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIReplyIPv6()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIReplyIPv6) True ###(335)=[passed] ICMPv6NIReplyIPv4 - dispatch >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIReplyIPv4()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIReplyIPv4) True ###(336)=[passed] ICMPv6NIReplyRefuse - dispatch >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIReplyRefuse()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIReplyRefuse) True ###(337)=[passed] ICMPv6NIReplyUnknown - dispatch >>> s = raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/ICMPv6NIReplyUnknown()) >>> p = IPv6(s) >>> isinstance(p.payload, ICMPv6NIReplyUnknown) True ###### ## Test Node Information Query - ICMPv6NIReplyNOOP ###### ###(338)=[passed] ICMPv6NIReplyNOOP - single DNS name without hint => understood as string (internal) >>> a=ICMPv6NIReplyNOOP(data="abricot").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == b"abricot" True ###(339)=[passed] ICMPv6NIReplyNOOP - single DNS name without hint => understood as string >>> ICMPv6NIReplyNOOP(data="abricot").data == b"abricot" True ###(340)=[passed] ICMPv6NIReplyNOOP - fqdn without hint => understood as string (internal) >>> a=ICMPv6NIReplyNOOP(data="n.d.tld").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == b"n.d.tld" True ###(341)=[passed] ICMPv6NIReplyNOOP - fqdn without hint => understood as string >>> ICMPv6NIReplyNOOP(data="n.d.tld").data == b"n.d.tld" True ###(342)=[passed] ICMPv6NIReplyNOOP - IPv6 address without hint => understood as string (internal) >>> a=ICMPv6NIReplyNOOP(data="2001:0db8::1").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == b"2001:0db8::1" True ###(343)=[passed] ICMPv6NIReplyNOOP - IPv6 address without hint => understood as string >>> ICMPv6NIReplyNOOP(data="2001:0db8::1").data == b"2001:0db8::1" True ###(344)=[passed] ICMPv6NIReplyNOOP - IPv4 address without hint => understood as string (internal) >>> a=ICMPv6NIReplyNOOP(data="169.254.253.010").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 0 and a[1] == b"169.254.253.010" True ###(345)=[passed] ICMPv6NIReplyNOOP - IPv4 address without hint => understood as string >>> ICMPv6NIReplyNOOP(data="169.254.253.010").data == b"169.254.253.010" True ###### ## Test Node Information Query - ICMPv6NIReplyName ###### ###(346)=[passed] ICMPv6NIReplyName - single label DNS name as a rawing (without ttl) (internal) >>> a=ICMPv6NIReplyName(data="abricot").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and type(a[1]) is list and len(a[1]) == 2 and a[1][0] == 0 and a[1][1] == b'\x07abricot\x00\x00' True ###(347)=[passed] ICMPv6NIReplyName - single label DNS name as a rawing (without ttl) >>> ICMPv6NIReplyName(data="abricot").data == [0, b"abricot"] True ###(348)=[passed] ICMPv6NIReplyName - fqdn name as a rawing (without ttl) (internal) >>> a=ICMPv6NIReplyName(data="n.d.tld").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and type(a[1]) is list and len(a[1]) == 2 and a[1][0] == 0 and a[1][1] == b'\x01n\x01d\x03tld\x00' True ###(349)=[passed] ICMPv6NIReplyName - fqdn name as a rawing (without ttl) >>> ICMPv6NIReplyName(data="n.d.tld").data == [0, b'n.d.tld'] True ###(350)=[passed] ICMPv6NIReplyName - list of 2 single label DNS names (without ttl) (internal) >>> a=ICMPv6NIReplyName(data=["abricot", "poire"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and type(a[1]) is list and len(a[1]) == 2 and a[1][0] == 0 and a[1][1] == b'\x07abricot\x00\x00\x05poire\x00\x00' True ###(351)=[passed] ICMPv6NIReplyName - list of 2 single label DNS names (without ttl) >>> ICMPv6NIReplyName(data=["abricot", "poire"]).data == [0, b"abricot", b"poire"] True ###(352)=[passed] ICMPv6NIReplyName - [ttl, single-label, single-label, fqdn] (internal) >>> a=ICMPv6NIReplyName(data=[42, "abricot", "poire", "n.d.tld"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 2 and type(a[1]) is list and len(a[1]) == 2 and a[1][0] == 42 and a[1][1] == b'\x07abricot\x00\x00\x05poire\x00\x00\x01n\x01d\x03tld\x00' True ###(353)=[passed] ICMPv6NIReplyName - [ttl, single-label, single-label, fqdn] >>> ICMPv6NIReplyName(data=[42, "abricot", "poire", "n.d.tld"]).data == [42, b"abricot", b"poire", b"n.d.tld"] True ###(354)=[passed] ICMPv6NIReplyName - dissection >>> s = b'\x8c\x00\xd1\x0f\x00\x02\x00\x00\x00\x00\xd9$\x94\x8d\xc6%\x00\x00\x00\x00\x07freebsd\x00\x00' >>> p = ICMPv6NIReplyName(s) >>> p.show() ###[ ICMPv6 Node Information Reply - Node Names ]### type = ICMP Node Information Response code = Successful Reply cksum = 0xd10f qtype = Node Name unused = 0 flags = nonce = b'\x00\x00\xd9$\x94\x8d\xc6%' data = ttl:0 freebsd >>> assert ICMPv6NIReplyName in p and p.data == [0, b'freebsd'] ###### ## Test Node Information Query - ICMPv6NIReplyIPv6 ###### ###(355)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address without TTL (internal) >>> a=ICMPv6NIReplyIPv6(data="2001:db8::1").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 3 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "2001:db8::1" True ###(356)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address without TTL >>> ICMPv6NIReplyIPv6(data="2001:db8::1").data == [(0, '2001:db8::1')] True ###(357)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address without TTL (as a list) (internal) >>> a=ICMPv6NIReplyIPv6(data=["2001:db8::1"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 3 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "2001:db8::1" True ###(358)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address without TTL (as a list) >>> ICMPv6NIReplyIPv6(data=["2001:db8::1"]).data == [(0, '2001:db8::1')] True ###(359)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address with TTL (internal) >>> a=ICMPv6NIReplyIPv6(data=[(0, "2001:db8::1")]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 3 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "2001:db8::1" True ###(360)=[passed] ICMPv6NIReplyIPv6 - one IPv6 address with TTL >>> ICMPv6NIReplyIPv6(data=[(0, "2001:db8::1")]).data == [(0, '2001:db8::1')] True ###(361)=[passed] ICMPv6NIReplyIPv6 - two IPv6 addresses as a list of rawings (without TTL) (internal) >>> a=ICMPv6NIReplyIPv6(data=["2001:db8::1", "2001:db8::2"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 3 and type(a[1]) is list and len(a[1]) == 2 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "2001:db8::1" and len(a[1][1]) == 2 and a[1][1][0] == 0 and a[1][1][1] == "2001:db8::2" True ###(362)=[passed] ICMPv6NIReplyIPv6 - two IPv6 addresses as a list of rawings (without TTL) >>> ICMPv6NIReplyIPv6(data=["2001:db8::1", "2001:db8::2"]).data == [(0, '2001:db8::1'), (0, '2001:db8::2')] True ###(363)=[passed] ICMPv6NIReplyIPv6 - two IPv6 addresses as a list (first with ttl, second without) (internal) >>> a=ICMPv6NIReplyIPv6(data=[(42, "2001:db8::1"), "2001:db8::2"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 3 and type(a[1]) is list and len(a[1]) == 2 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 42 and a[1][0][1] == "2001:db8::1" and len(a[1][1]) == 2 and a[1][1][0] == 0 and a[1][1][1] == "2001:db8::2" True ###(364)=[passed] ICMPv6NIReplyIPv6 - two IPv6 addresses as a list (first with ttl, second without) >>> ICMPv6NIReplyIPv6(data=[(42, "2001:db8::1"), "2001:db8::2"]).data == [(42, "2001:db8::1"), (0, "2001:db8::2")] True ###(365)=[passed] ICMPv6NIReplyIPv6 - build & dissection >>> s = raw(IPv6()/ICMPv6NIReplyIPv6(data="2001:db8::1")) >>> p = IPv6(s) >>> ICMPv6NIReplyIPv6 in p and p.data == [(0, '2001:db8::1')] True ###### ## Test Node Information Query - ICMPv6NIReplyIPv4 ###### ###(366)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address without TTL (internal) >>> a=ICMPv6NIReplyIPv4(data="169.254.253.252").getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 4 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "169.254.253.252" True ###(367)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address without TTL >>> ICMPv6NIReplyIPv4(data="169.254.253.252").data == [(0, '169.254.253.252')] True ###(368)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address without TTL (as a list) (internal) >>> a=ICMPv6NIReplyIPv4(data=["169.254.253.252"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 4 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "169.254.253.252" True ###(369)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address without TTL (as a list) >>> ICMPv6NIReplyIPv4(data=["169.254.253.252"]).data == [(0, '169.254.253.252')] True ###(370)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address with TTL (internal) >>> a=ICMPv6NIReplyIPv4(data=[(0, "169.254.253.252")]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 4 and type(a[1]) is list and len(a[1]) == 1 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "169.254.253.252" True ###(371)=[passed] ICMPv6NIReplyIPv4 - one IPv4 address with TTL (internal) >>> ICMPv6NIReplyIPv4(data=[(0, "169.254.253.252")]).data == [(0, '169.254.253.252')] True ###(372)=[passed] ICMPv6NIReplyIPv4 - two IPv4 addresses as a list of rawings (without TTL) >>> a=ICMPv6NIReplyIPv4(data=["169.254.253.252", "169.254.253.253"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 4 and type(a[1]) is list and len(a[1]) == 2 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 0 and a[1][0][1] == "169.254.253.252" and len(a[1][1]) == 2 and a[1][1][0] == 0 and a[1][1][1] == "169.254.253.253" True ###(373)=[passed] ICMPv6NIReplyIPv4 - two IPv4 addresses as a list of rawings (without TTL) (internal) >>> ICMPv6NIReplyIPv4(data=["169.254.253.252", "169.254.253.253"]).data == [(0, '169.254.253.252'), (0, '169.254.253.253')] True ###(374)=[passed] ICMPv6NIReplyIPv4 - two IPv4 addresses as a list (first with ttl, second without) >>> a=ICMPv6NIReplyIPv4(data=[(42, "169.254.253.252"), "169.254.253.253"]).getfieldval("data") >>> type(a) is tuple and len(a) == 2 and a[0] == 4 and type(a[1]) is list and len(a[1]) == 2 and type(a[1][0]) is tuple and len(a[1][0]) == 2 and a[1][0][0] == 42 and a[1][0][1] == "169.254.253.252" and len(a[1][1]) == 2 and a[1][1][0] == 0 and a[1][1][1] == "169.254.253.253" True ###(375)=[passed] ICMPv6NIReplyIPv4 - two IPv4 addresses as a list (first with ttl, second without) (internal) >>> ICMPv6NIReplyIPv4(data=[(42, "169.254.253.252"), "169.254.253.253"]).data == [(42, "169.254.253.252"), (0, "169.254.253.253")] True ###(376)=[passed] ICMPv6NIReplyIPv4 - build & dissection >>> s = raw(IPv6()/ICMPv6NIReplyIPv4(data="192.168.0.1")) >>> p = IPv6(s) >>> ICMPv6NIReplyIPv4 in p and p.data == [(0, '192.168.0.1')] True >>> >>> s = raw(IPv6()/ICMPv6NIReplyIPv4(data=[(2807, "192.168.0.1")])) >>> p = IPv6(s) >>> ICMPv6NIReplyIPv4 in p and p.data == [(2807, "192.168.0.1")] True ###### ## Test Node Information Query - ICMPv6NIReplyRefuse ###### ###(377)=[passed] ICMPv6NIReplyRefuse - basic instantiation >>> raw(ICMPv6NIReplyRefuse())[:8] == b'\x8c\x01\x00\x00\x00\x00\x00\x00' True ###(378)=[passed] ICMPv6NIReplyRefuse - basic dissection >>> a=ICMPv6NIReplyRefuse(b'\x8c\x01\x00\x00\x00\x00\x00\x00\xf1\xe9\xab\xc9\x8c\x0by\x18') >>> a.type == 140 and a.code == 1 and a.cksum == 0 and a.unused == 0 and a.flags == 0 and a.nonce == b'\xf1\xe9\xab\xc9\x8c\x0by\x18' and a.data == b"" True ###### ## Test Node Information Query - ICMPv6NIReplyUnknown ###### ###(379)=[passed] ICMPv6NIReplyUnknown - basic instantiation >>> raw(ICMPv6NIReplyUnknown(nonce=b'\x00'*8)) == b'\x8c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(380)=[passed] ICMPv6NIReplyRefuse - basic dissection >>> a=ICMPv6NIReplyRefuse(b'\x8c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> a.type == 140 and a.code == 2 and a.cksum == 0 and a.unused == 0 and a.flags == 0 and a.nonce == b'\x00'*8 and a.data == b"" True ###### ## Test Node Information Query - utilities ###### ###(381)=[passed] computeNIGroupAddr >>> computeNIGroupAddr("scapy") == "ff02::2:f886:2f66" True ###### ## IPv6ExtHdrFragment Class Test ###### ###(382)=[passed] IPv6ExtHdrFragment - Basic Instantiation >>> raw(IPv6ExtHdrFragment()) == b';\x00\x00\x00\x00\x00\x00\x00' True ###(383)=[passed] IPv6ExtHdrFragment - Instantiation with specific values >>> raw(IPv6ExtHdrFragment(nh=0xff, res1=0xee, offset=0x1fff, res2=1, m=1, id=0x11111111)) == b'\xff\xee\xff\xfb\x11\x11\x11\x11' True ###(384)=[passed] IPv6ExtHdrFragment - Basic Dissection >>> a=IPv6ExtHdrFragment(b';\x00\x00\x00\x00\x00\x00\x00') >>> a.nh == 59 and a.res1 == 0 and a.offset == 0 and a.res2 == 0 and a.m == 0 and a.id == 0 True ###(385)=[passed] IPv6ExtHdrFragment - Instantiation with specific values >>> a=IPv6ExtHdrFragment(b'\xff\xee\xff\xfb\x11\x11\x11\x11') >>> a.nh == 0xff and a.res1 == 0xee and a.offset==0x1fff and a.res2==1 and a.m == 1 and a.id == 0x11111111 True ###(386)=[passed] IPv6 - IPv6ExtHdrFragment hashret >>> a=IPv6()/IPv6ExtHdrFragment(b'\xff\xee\xff\xfb\x11\x11\x11\x11') >>> a.hashret() == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff' True ###### ## Test fragment6 function ###### ###(387)=[passed] fragment6 - test against a long TCP packet with a 1280 MTU >>> l=fragment6(IPv6()/IPv6ExtHdrFragment()/TCP()/Raw(load="A"*40000), 1280) >>> len(l) == 33 and len(raw(l[-1])) == 644 True ###(388)=[passed] fragment6 - test against a long TCP packet with a 1280 MTU without fragment header >>> l=fragment6(IPv6()/TCP()/Raw(load="A"*40000), 1280) >>> len(l) == 33 and len(raw(l[-1])) == 644 True ###### ## Test defragment6 function ###### ###(389)=[passed] defragment6 - test against a long TCP packet fragmented with a 1280 MTU >>> l=fragment6(IPv6()/IPv6ExtHdrFragment()/TCP()/Raw(load="A"*40000), 1280) >>> raw(defragment6(l)) == (b'`\x00\x00\x00\x9cT\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xe92\x00\x00' + b'A'*40000) True ###(390)=[passed] defragment6 - test against packets with L2 header >>> l=defragment6(fragment6(Ether()/IPv6()/IPv6ExtHdrFragment()/TCP()/Raw(load="A"*2000), 1280)) >>> Ether in l True ###(391)=[passed] defragment6 - test against a large TCP packet fragmented with a 1280 bytes MTU and missing fragments >>> l=fragment6(IPv6()/IPv6ExtHdrFragment()/TCP()/Raw(load="A"*40000), 1280) >>> del l[2] >>> del l[4] >>> del l[12] >>> del l[18] >>> raw(defragment6(l)) == (b'`\x00\x00\x00\x9cT\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xe92\x00\x00' + 2444*b'A' + 1232*b'X' + 2464*b'A' + 1232*b'X' + 9856*b'A' + 1232*b'X' + 7392*b'A' + 1232*b'X' + 12916*b'A') Expected an offset of 2464. Found 3696. Padding with XXXX Expected an offset of 6160. Found 7392. Padding with XXXX more Expected an offset of 17248. Found 18480. Padding with XXXX True ###(392)=[passed] defragment6 - test against a TCP packet fragmented with a 800 bytes MTU and missing fragments >>> l=fragment6(IPv6()/IPv6ExtHdrFragment()/TCP()/Raw(load="A"*4000), 800) >>> del l[4] >>> del l[2] >>> raw(defragment6(l)) == b'`\x00\x00\x00\x0f\xb4\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xb2\x0f\x00\x00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' True ###(393)=[passed] defragment6 - test the packet length >>> pkts = fragment6(IPv6()/IPv6ExtHdrFragment()/UDP(dport=42, sport=42)/Raw(load="A"*1500), 1280) >>> pkts = [IPv6(raw(p)) for p in pkts] >>> assert defragment6(pkts).plen == 1508 ###(394)=[passed] defragment6 - discard payload >>> pkt = Ether() / IPv6() / ICMPv6EchoRequest(data='b'*100) >>> frags = fragment6(pkt, 100) >>> pkt = defragment6(Ether(raw(frag / Padding(b'a' * 8))) for frag in frags) >>> assert b'a' not in pkt.data ###### ## Test Route6 class ###### ###(395)=[passed] Fake interfaces >>> conf.ifaces._add_fake_iface("eth0") >>> conf.ifaces._add_fake_iface("lo") >>> conf.ifaces._add_fake_iface("scapy0") ###(396)=[passed] Route6 - Route6 flushing >>> conf_iface = conf.iface >>> conf.iface = "eth0" This interface is not specified in any provider ! See conf.ifaces output >>> conf.route6.routes=[ ... ( '::1', 128, '::', 'lo', ['::1'], 1), ... ( 'fe80::20f:1fff:feca:4650', 128, '::', 'lo', ['::1'], 1)] >>> conf.route6.flush() >>> not conf.route6.routes True ###(397)=[passed] Route6 - Route6.route >>> conf.route6.flush() >>> conf.route6.ipv6_ifaces = set(['lo', 'eth0']) >>> conf.route6.routes=[ ... ( '::1', 128, '::', 'lo', ['::1'], 1), ... ( 'fe80::20f:1fff:feca:4650', 128, '::', 'lo', ['::1'], 1), ... ( 'fe80::', 64, '::', 'eth0', ['fe80::20f:1fff:feca:4650'], 1), ... ('2001:db8:0:4444:20f:1fff:feca:4650', 128, '::', 'lo', ['::1'], 1), ... ( '2001:db8:0:4444::', 64, '::', 'eth0', ['2001:db8:0:4444:20f:1fff:feca:4650'], 1), ... ( '::', 0, 'fe80::20f:34ff:fe8a:8aa1', 'eth0', ['2001:db8:0:4444:20f:1fff:feca:4650', '2002:db8:0:4444:20f:1fff:feca:4650'], 1) ... ] >>> assert conf.route6.route("2002::1") == ('eth0', '2002:db8:0:4444:20f:1fff:feca:4650', 'fe80::20f:34ff:fe8a:8aa1') >>> assert conf.route6.route("2001::1") == ('eth0', '2001:db8:0:4444:20f:1fff:feca:4650', 'fe80::20f:34ff:fe8a:8aa1') >>> assert conf.route6.route("fe80::20f:1fff:feab:4870") == ('eth0', 'fe80::20f:1fff:feca:4650', '::') >>> assert conf.route6.route("::1") == ('lo', '::1', '::') >>> assert conf.route6.route("::") == ('eth0', '2001:db8:0:4444:20f:1fff:feca:4650', 'fe80::20f:34ff:fe8a:8aa1') >>> assert conf.route6.route('ff00::') == ('eth0', '2001:db8:0:4444:20f:1fff:feca:4650', 'fe80::20f:34ff:fe8a:8aa1') >>> conf.iface = conf_iface >>> conf.route6.resync() >>> if not len(conf.route6.routes): ... # IPv6 seems disabled. Force a route to ::1 ... conf.route6.routes.append(("::1", 128, "::", conf.loopback_name, ["::1"], 1)) ... True ... ###(398)=[passed] Route6 - Route6.make_route >>> r6 = Route6() >>> r6.make_route("2001:db8::1", dev=conf.loopback_name) in [ ... ("2001:db8::1", 128, "::", conf.loopback_name, [], 1), ... ("2001:db8::1", 128, "::", conf.loopback_name, ["::1"], 1) ... ] True >>> len_r6 = len(r6.routes) ###(399)=[passed] Route6 - Route6.add & Route6.delt >>> r6.add(dst="2001:db8:cafe:f000::/64", gw="2001:db8:cafe::1", dev="eth0") >>> assert len(r6.routes) == len_r6 + 1 >>> r6.delt(dst="2001:db8:cafe:f000::/64", gw="2001:db8:cafe::1") >>> assert len(r6.routes) == len_r6 ###(400)=[passed] Route6 - Route6.ifadd & Route6.ifdel >>> r6.ifadd("scapy0", "2001:bd8:cafe:1::1/64") >>> r6.ifdel("scapy0") ###(401)=[passed] IPv6 - utils >>> from unittest import mock >>> @mock.patch("scapy.layers.inet6.get_if_hwaddr") ... @mock.patch("scapy.layers.inet6.srp1") ... def test_neighsol(mock_srp1, mock_get_if_hwaddr): ... mock_srp1.return_value = Ether()/IPv6()/ICMPv6ND_NA()/ICMPv6NDOptDstLLAddr(lladdr="05:04:03:02:01:00") ... mock_get_if_hwaddr.return_value = "00:01:02:03:04:05" ... return neighsol("fe80::f6ce:46ff:fea9:e04b", "fe80::f6ce:46ff:fea9:e04b", "scapy0") ... >>> p = test_neighsol() >>> ICMPv6NDOptDstLLAddr in p and p[ICMPv6NDOptDstLLAddr].lladdr == "05:04:03:02:01:00" True >>> >>> >>> @mock.patch("scapy.layers.inet6.neighsol") ... @mock.patch("scapy.layers.inet6.conf.route6.route") ... def test_getmacbyip6(mock_route6, mock_neighsol): ... mock_route6.return_value = ("scapy0", "fe80::baca:3aff:fe72:b08b", "::") ... mock_neighsol.return_value = test_neighsol() ... return getmacbyip6("fe80::704:3ff:fe2:100") ... >>> test_getmacbyip6() == "05:04:03:02:01:00" True ###(402)=[passed] IPv6 - IPerror6 & UDPerror & _ICMPv6Error >>> query = IPv6(dst="2001:db8::1", src="2001:db8::2", hlim=1)/UDP()/DNS() >>> answer = IPv6(dst="2001:db8::2", src="2001:db8::1", hlim=1)/ICMPv6TimeExceeded()/IPerror6(dst="2001:db8::1", src="2001:db8::2", hlim=0)/UDPerror()/DNS() >>> answer.answers(query) == True True >>> >>> from scapy.layers.inet6 import _ICMPv6Error >>> assert _ICMPv6Error().guess_payload_class(None) == IPerror6 >>> assert _ICMPv6Error().hashret() == b'' ###(403)=[passed] reset routes properly >>> conf.ifaces.reload() >>> >>> if WINDOWS: ... from scapy.arch.windows import _route_add_loopback ... _route_add_loopback() ... ###### ## ICMPv6ML ###### ###(404)=[passed] ICMPv6MLQuery - build & dissection >>> s = raw(IPv6(src="fe80::1")/ICMPv6MLQuery()) >>> assert s == b"`\x00\x00\x00\x00\x18:\x01\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x82\x00Y\x17'\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>> >>> p = IPv6(s) >>> assert ICMPv6MLQuery in p and p[IPv6].dst == "ff02::1" ###(405)=[passed] Check answers >>> q = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLQuery() >>> a = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLReport() >>> >>> assert a.answers(q) ###### ## ICMPv6MLv2 ###### ###(406)=[passed] ICMPv6MLQuery2 - build & dissection >>> p = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLQuery2(sources=["::1"]) >>> s = raw(p) >>> assert s == b"`\x00\x00\x00\x004\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01:\x00\x05\x02\x00\x00\x01\x00\x82\x00V\x85'\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" >>> >>> p = IPv6(s) >>> assert ICMPv6MLQuery2 in p and p.sources_number == 1 ###(407)=[passed] ICMPv6MLReport2 - build & dissection >>> p = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLReport2(records=[ICMPv6MLDMultAddrRec(), ICMPv6MLDMultAddrRec(sources=["::1"], auxdata="scapy")]) >>> s = raw(p) >>> assert s == b'`\x00\x00\x00\x00M\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01:\x00\x05\x02\x00\x00\x01\x00\x8f\x00\x1a\xa1\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01scapy' >>> >>> p = IPv6(s) >>> assert ICMPv6MLReport2 in p and p.records_number == 2 ###(408)=[passed] ICMPv6MLReport2 and ICMPv6MLDMultAddrRec - dissection >>> z = b'33\x00\x00\x00\x16\xd0P\x99V\xdd\xf9\x86\xdd`\x00\x00\x00\x00\x1c:\x01\xfe\x80\x00\x00\x00\x00\x00\x00q eX\x98\x86\xfa\x88\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x8f\x00\x13\x4d\x00\x00\x00\x01\x04\x00\x00\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xffR\xf3\xe1' >>> w = Ether(z) >>> >>> assert len(w.records) == 1 >>> assert isinstance(w.records[0], ICMPv6MLDMultAddrRec) >>> assert w.records[0].dst == "ff02::1:ff52:f3e1" ###(409)=[passed] Check answers >>> q = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLQuery2() >>> a = IPv6()/IPv6ExtHdrHopByHop(options=[RouterAlert()])/ICMPv6MLReport2() >>> >>> assert a.answers(q) ###### ## IPv6 attacks ###### ###(410)=[passed] Define test utilities >>> from unittest import mock >>> >>> @mock.patch("scapy.layers.inet6.sniff") ... @mock.patch("scapy.layers.inet6.sendp") ... def test_attack(function, pktlist, sendp_mock, sniff_mock, options=()): ... pktlist = [Ether(raw(x)) for x in pktlist] ... ret_list = [] ... def _fake_sniff(lfilter=None, prn=None, **kwargs): ... for p in pktlist: ... if lfilter and lfilter(p) and prn: ... prn(p) ... sniff_mock.side_effect = _fake_sniff ... def _fake_sendp(pkt, *args, **kwargs): ... ret_list.append(Ether(raw(pkt))) ... sendp_mock.side_effect = _fake_sendp ... function(*options) ... return ret_list ... ###(411)=[passed] Test NDP_Attack_DAD_DoS_via_NS >>> data = [Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:00:11:11')/IPv6(src="::", dst="ff02::1:ff00:1111")/ICMPv6ND_NS(tgt="ffff::1111", code=17, res=3758096385), ... Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:5d:c3:53')/IPv6(src="::", dst="ff02::1:ff5d:c353")/ICMPv6ND_NS(tgt="b643:44c3:f659:f8e6:31c0:6437:825d:c353"), ... Ether()/IP()/ICMP()] >>> results = test_attack(NDP_Attack_DAD_DoS_via_NS, data) Reply NS for target address ffff::1111 (received from aa:aa:aa:aa:aa:aa) Reply NS for target address b643:44c3:f659:f8e6:31c0:6437:825d:c353 (received from aa:aa:aa:aa:aa:aa) >>> assert len(results) == 2 >>> >>> a = results[0][IPv6] >>> assert a[IPv6].src == "::" >>> assert a[IPv6].dst == "ff02::1:ff00:1111" >>> assert a[IPv6].hlim == 255 >>> assert a[ICMPv6ND_NS].tgt == "ffff::1111" >>> >>> b = results[1][IPv6] >>> assert b[IPv6].src == "::" >>> assert b[IPv6].dst == "ff02::1:ff5d:c353" >>> assert b[IPv6].hlim == 255 >>> assert b[ICMPv6ND_NS].tgt == "b643:44c3:f659:f8e6:31c0:6437:825d:c353" ###(412)=[passed] Test NDP_Attack_DAD_DoS_via_NA >>> data = [Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:00:11:11')/IPv6(src="::", dst="ff02::1:ff00:1111")/ICMPv6ND_NS(tgt="ffff::1111", code=17, res=3758096385), ... Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:5d:c3:53')/IPv6(src="::", dst="ff02::1:ff5d:c353")/ICMPv6ND_NS(tgt="b643:44c3:f659:f8e6:31c0:6437:825d:c353"), ... Ether()/IP()/ICMP()] >>> results = test_attack(NDP_Attack_DAD_DoS_via_NA, data, options=(None, None, None, "ab:ab:ab:ab:ab:ab")) Reply NA for target address ffff::1111 (received from aa:aa:aa:aa:aa:aa) Reply NA for target address b643:44c3:f659:f8e6:31c0:6437:825d:c353 (received from aa:aa:aa:aa:aa:aa) >>> assert len(results) == 2 >>> results[0].dst = "ff:ff:ff:ff:ff:ff" >>> results[1].dst = "ff:ff:ff:ff:ff:ff" >>> >>> a = results[0] >>> assert a[Ether].dst == "ff:ff:ff:ff:ff:ff" >>> assert a[Ether].src == "ab:ab:ab:ab:ab:ab" >>> assert a[IPv6].src == "ffff::1111" >>> assert a[IPv6].dst == "ff02::1:ff00:1111" >>> assert a[IPv6].hlim == 255 >>> assert a[ICMPv6ND_NA].tgt == "ffff::1111" >>> assert a[ICMPv6NDOptDstLLAddr].lladdr == "ab:ab:ab:ab:ab:ab" >>> >>> b = results[1] >>> assert b[Ether].dst == "ff:ff:ff:ff:ff:ff" >>> assert b[Ether].src == "ab:ab:ab:ab:ab:ab" >>> assert b[IPv6].src == "b643:44c3:f659:f8e6:31c0:6437:825d:c353" >>> assert b[IPv6].dst == "ff02::1:ff5d:c353" >>> assert b[IPv6].hlim == 255 >>> assert b[ICMPv6ND_NA].tgt == "b643:44c3:f659:f8e6:31c0:6437:825d:c353" >>> assert b[ICMPv6NDOptDstLLAddr].lladdr == "ab:ab:ab:ab:ab:ab" ###(413)=[passed] Test NDP_Attack_NA_Spoofing >>> data = [Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:d4:e5:f6')/IPv6(src="753a:727c:97b5:f71d:51ea:3901:ab52:e110", dst="ff02::1:ffd4:e5f6")/ICMPv6ND_NS(tgt="ff02::1:ffd4:e5f6", code=171, res=3758096), ... Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:e4:68:c9:4f')/IPv6(src="753a:727c:97b5:f71d:51ea:3901:ab52:e110", dst="fe9c:98b0:52b5:7033:5db0:394f:e468:c94f")/ICMPv6ND_NS(), ... Ether()/IP()/ICMP()] >>> results = test_attack(NDP_Attack_NA_Spoofing, data, options=(None, None, None, "ff:ff:ff:ff:ff:ff", None)) Reply NA for target address ff02::1:ffd4:e5f6 (received from aa:aa:aa:aa:aa:aa) Reply NA for target address :: (received from aa:aa:aa:aa:aa:aa) >>> assert len(results) == 2 >>> >>> a = results[0] >>> assert a[Ether].dst == "aa:aa:aa:aa:aa:aa" >>> assert a[Ether].src == "ff:ff:ff:ff:ff:ff" >>> assert a[IPv6].src == "ff02::1:ffd4:e5f6" >>> assert a[IPv6].dst == "753a:727c:97b5:f71d:51ea:3901:ab52:e110" >>> assert a[IPv6].hlim == 255 >>> assert a[ICMPv6ND_NA].R == 0 >>> assert a[ICMPv6ND_NA].S == 1 >>> assert a[ICMPv6ND_NA].O == 1 >>> assert a[ICMPv6ND_NA].tgt == "ff02::1:ffd4:e5f6" >>> assert a[ICMPv6NDOptDstLLAddr].lladdr == "ff:ff:ff:ff:ff:ff" >>> >>> b = results[1] >>> assert b[Ether].dst == "aa:aa:aa:aa:aa:aa" >>> assert b[Ether].src == "ff:ff:ff:ff:ff:ff" >>> assert b[IPv6].src == "::" >>> assert b[IPv6].dst == "753a:727c:97b5:f71d:51ea:3901:ab52:e110" >>> assert b[IPv6].hlim == 255 >>> assert b[ICMPv6ND_NA].R == 0 >>> assert b[ICMPv6ND_NA].S == 1 >>> assert b[ICMPv6ND_NA].O == 1 >>> assert b[ICMPv6ND_NA].tgt == "::" >>> assert b[ICMPv6NDOptDstLLAddr].lladdr == "ff:ff:ff:ff:ff:ff" ###(414)=[passed] Test NDP_Attack_Kill_Default_Router >>> data = [Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ff:d4:e5:f6')/IPv6(src="753a:727c:97b5:f71d:51ea:3901:ab52:e110", dst="ff02::1:ffd4:e5f6")/ICMPv6ND_RA(routerlifetime=1), ... Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ab:52:e1:10')/IPv6(src="fe9c:98b0:52b5:7033:5db0:394f:e468:c94f", dst="753a:727c:97b5:f71d:51ea:3901:ab52:e110")/ICMPv6ND_RA(routerlifetime=1), ... Ether()/IP()/"RANDOM"] >>> results = test_attack(NDP_Attack_Kill_Default_Router, data) Fake RA sent with source address 753a:727c:97b5:f71d:51ea:3901:ab52:e110 Fake RA sent with source address fe9c:98b0:52b5:7033:5db0:394f:e468:c94f >>> assert len(results) == 2 >>> >>> a = results[0][IPv6] >>> assert a[IPv6].src == "753a:727c:97b5:f71d:51ea:3901:ab52:e110" >>> assert a[IPv6].dst == "ff02::1" >>> assert a[IPv6].hlim == 255 >>> assert a[ICMPv6ND_RA].M == 0 >>> assert a[ICMPv6ND_RA].O == 0 >>> assert a[ICMPv6ND_RA].H == 0 >>> assert a[ICMPv6ND_RA].P == 0 >>> assert a[ICMPv6ND_RA].routerlifetime == 0 >>> assert a[ICMPv6ND_RA].reachabletime == 0 >>> assert a[ICMPv6ND_RA].retranstimer == 0 >>> assert a[ICMPv6NDOptSrcLLAddr].lladdr == "aa:aa:aa:aa:aa:aa" >>> >>> b = results[1][IPv6] >>> assert b[IPv6].src == "fe9c:98b0:52b5:7033:5db0:394f:e468:c94f" >>> assert b[IPv6].dst == "ff02::1" >>> assert b[IPv6].hlim == 255 >>> assert b[ICMPv6ND_RA].M == 0 >>> assert b[ICMPv6ND_RA].O == 0 >>> assert b[ICMPv6ND_RA].H == 0 >>> assert b[ICMPv6ND_RA].P == 0 >>> assert b[ICMPv6ND_RA].routerlifetime == 0 >>> assert b[ICMPv6ND_RA].reachabletime == 0 >>> assert b[ICMPv6ND_RA].retranstimer == 0 >>> assert b[ICMPv6NDOptSrcLLAddr].lladdr == "aa:aa:aa:aa:aa:aa" ###(415)=[passed] Test NDP_Attack_Fake_Router >>> ra = Ether()/IPv6()/ICMPv6ND_RA() >>> ra /= ICMPv6NDOptPrefixInfo(prefix="2001:db8:1::", prefixlen=64) >>> ra /= ICMPv6NDOptPrefixInfo(prefix="2001:db8:2::", prefixlen=64) >>> ra /= ICMPv6NDOptSrcLLAddr(lladdr="00:11:22:33:44:55") >>> >>> rad = Ether(raw(ra)) >>> >>> data = [Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ab:52:e1:10')/IPv6(src="753a:727c:97b5:f71d:51ea:3901:ab52:e110", dst="ff02::1:ffd4:e5f6")/ICMPv6ND_RS(code=11, res=3758096), ... Ether(src='aa:aa:aa:aa:aa:aa', dst='33:33:ab:52:e1:10')/IPv6(src="753a:727c:97b5:f71d:51ea:3901:ab52:e110", dst="fe9c:98b0:52b5:7033:5db0:394f:e468:c94f")/ICMPv6ND_RS(), ... Ether()/IP()/ICMP()] >>> results = test_attack(NDP_Attack_Fake_Router, data, options=(ra,)) Fake RA sent in response to RS from 753a:727c:97b5:f71d:51ea:3901:ab52:e110 Fake RA sent in response to RS from 753a:727c:97b5:f71d:51ea:3901:ab52:e110 >>> assert len(results) == 2 >>> >>> assert results[0] == rad >>> assert results[1] == rad ###(416)=[passed] Test NDP_Attack_NS_Spoofing >>> r = test_attack(NDP_Attack_NS_Spoofing, [], options=("aa:aa:aa:aa:aa:aa", "753a:727c:97b5:f71d:51ea:3901:ab52:e110", "2001:db8::1", 'e4a0:654b:1a24:1b15:761d:2e5d:245d:ba83', "cc:cc:cc:cc:cc:cc", "dd:dd:dd:dd:dd:dd"))[0] >>> >>> assert r[Ether].dst == "dd:dd:dd:dd:dd:dd" >>> assert r[Ether].src == "cc:cc:cc:cc:cc:cc" >>> assert r[IPv6].hlim == 255 >>> assert r[IPv6].src == "753a:727c:97b5:f71d:51ea:3901:ab52:e110" >>> assert r[IPv6].dst == "e4a0:654b:1a24:1b15:761d:2e5d:245d:ba83" >>> assert r[ICMPv6ND_NS].tgt == "2001:db8::1" >>> assert r[ICMPv6NDOptSrcLLAddr].lladdr == "aa:aa:aa:aa:aa:aa" ###### ## Home Agent Address Discovery ###### ###(417)=[passed] in6_getha() >>> in6_getha('2001:db8::') == '2001:db8::fdff:ffff:ffff:fffe' True ###(418)=[passed] ICMPv6HAADRequest - build/dissection >>> p = IPv6(raw(IPv6(dst=in6_getha('2001:db8::'), src='2001:db8::1')/ICMPv6HAADRequest(id=42))) >>> p.cksum == 0x9620 and p.dst == '2001:db8::fdff:ffff:ffff:fffe' and p.R == 1 True ###(419)=[passed] ICMPv6HAADReply - build/dissection >>> p = IPv6(raw(IPv6(dst='2001:db8::1', src='2001:db8::42')/ICMPv6HAADReply(id=42, addresses=['2001:db8::2', '2001:db8::3']))) >>> p.cksum = 0x3747 and p.addresses == [ '2001:db8::2', '2001:db8::3' ] ###(420)=[passed] ICMPv6HAADRequest / ICMPv6HAADReply - build/dissection >>> a=ICMPv6HAADRequest(id=42) >>> b=ICMPv6HAADReply(id=42) >>> not a < b and a > b True ###### ## Mobile Prefix Solicitation/Advertisement ###### ###(421)=[passed] ICMPv6MPSol - build (default values) >>> s = b'`\x00\x00\x00\x00\x08:@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x92\x00m\xbb\x00\x00\x00\x00' >>> raw(IPv6()/ICMPv6MPSol()) == s True ###(422)=[passed] ICMPv6MPSol - dissection (default values) >>> p = IPv6(s) >>> p[ICMPv6MPSol].type == 146 and p[ICMPv6MPSol].cksum == 0x6dbb and p[ICMPv6MPSol].id == 0 True ###(423)=[passed] ICMPv6MPSol - build >>> s = b'`\x00\x00\x00\x00\x08:@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x92\x00(\x08\x00\x08\x00\x00' >>> raw(IPv6()/ICMPv6MPSol(cksum=0x2808, id=8)) == s True ###(424)=[passed] ICMPv6MPSol - dissection >>> p = IPv6(s) >>> p[ICMPv6MPSol].cksum == 0x2808 and p[ICMPv6MPSol].id == 8 True ###(425)=[passed] ICMPv6MPAdv - build (default values) >>> s = b'`\x00\x00\x00\x00(:@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x93\x00\xa8\xd6\x00\x00\x80\x00\x03\x04@\xc0\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(IPv6()/ICMPv6MPAdv()/ICMPv6NDOptPrefixInfo()) == s True ###(426)=[passed] ICMPv6MPAdv - dissection (default values) >>> p = IPv6(s) >>> p[ICMPv6MPAdv].type == 147 and p[ICMPv6MPAdv].cksum == 0xa8d6 and p[ICMPv6NDOptPrefixInfo].prefix == '::' True ###(427)=[passed] ICMPv6MPAdv - build >>> s = b'`\x00\x00\x00\x00(:@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x93\x00(\x07\x00*@\x00\x03\x04@@\xff\xff\xff\xff\x00\x00\x00\x0c\x00\x00\x00\x00 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> raw(IPv6()/ICMPv6MPAdv(cksum=0x2807, flags=1, id=42)/ICMPv6NDOptPrefixInfo(prefix='2001:db8::1', L=0, preferredlifetime=12)) == s True ###(428)=[passed] ICMPv6MPAdv - dissection >>> p = IPv6(s) >>> p[ICMPv6MPAdv].cksum == 0x2807 and p[ICMPv6MPAdv].flags == 1 and p[ICMPv6MPAdv].id == 42 and p[ICMPv6NDOptPrefixInfo].prefix == '2001:db8::1' and p[ICMPv6NDOptPrefixInfo].preferredlifetime == 12 True ###### ## Type 2 Routing Header ###### ###(429)=[passed] IPv6ExtHdrRouting - type 2 - build/dissection >>> p = IPv6(raw(IPv6(dst='2001:db8::1', src='2001:db8::2')/IPv6ExtHdrRouting(type=2, addresses=['2001:db8::3'])/ICMPv6EchoRequest())) >>> p.type == 2 and len(p.addresses) == 1 and p.cksum == 0x2446 True ###(430)=[passed] IPv6ExtHdrRouting - type 2 - hashret >>> p = IPv6()/IPv6ExtHdrRouting(addresses=["2001:db8::1", "2001:db8::2"])/ICMPv6EchoRequest() >>> p.hashret() == b" \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x00\x00\x00\x00" True ###### ## Mobility Options - Binding Refresh Advice ###### ###(431)=[passed] MIP6OptBRAdvice - build (default values) >>> s = b'\x02\x02\x00\x00' >>> raw(MIP6OptBRAdvice()) == s True ###(432)=[passed] MIP6OptBRAdvice - dissection (default values) >>> p = MIP6OptBRAdvice(s) >>> p.otype == 2 and p.olen == 2 and p.rinter == 0 True ###(433)=[passed] MIP6OptBRAdvice - build >>> s = b'\x03*\n\xf7' >>> raw(MIP6OptBRAdvice(otype=3, olen=42, rinter=2807)) == s True ###(434)=[passed] MIP6OptBRAdvice - dissection >>> p = MIP6OptBRAdvice(s) >>> p.otype == 3 and p.olen == 42 and p.rinter == 2807 True ###### ## Mobility Options - Alternate Care-of Address ###### ###(435)=[passed] MIP6OptAltCoA - build (default values) >>> s = b'\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(MIP6OptAltCoA()) == s True ###(436)=[passed] MIP6OptAltCoA - dissection (default values) >>> p = MIP6OptAltCoA(s) >>> p.otype == 3 and p.olen == 16 and p.acoa == '::' True ###(437)=[passed] MIP6OptAltCoA - build >>> s = b'*\x08 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01' >>> raw(MIP6OptAltCoA(otype=42, olen=8, acoa='2001:db8::1')) == s True ###(438)=[passed] MIP6OptAltCoA - dissection >>> p = MIP6OptAltCoA(s) >>> p.otype == 42 and p.olen == 8 and p.acoa == '2001:db8::1' True ###### ## Mobility Options - Nonce Indices ###### ###(439)=[passed] MIP6OptNonceIndices - build (default values) >>> s = b'\x04\x10\x00\x00\x00\x00' >>> raw(MIP6OptNonceIndices()) == s True ###(440)=[passed] MIP6OptNonceIndices - dissection (default values) >>> p = MIP6OptNonceIndices(s) >>> p.otype == 4 and p.olen == 16 and p.hni == 0 and p.coni == 0 True ###(441)=[passed] MIP6OptNonceIndices - build >>> s = b'\x04\x12\x00\x13\x00\x14' >>> raw(MIP6OptNonceIndices(olen=18, hni=19, coni=20)) == s True ###(442)=[passed] MIP6OptNonceIndices - dissection >>> p = MIP6OptNonceIndices(s) >>> p.hni == 19 and p.coni == 20 True ###### ## Mobility Options - Binding Authentication Data ###### ###(443)=[passed] MIP6OptBindingAuthData - build (default values) >>> s = b'\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(MIP6OptBindingAuthData()) == s True ###(444)=[passed] MIP6OptBindingAuthData - dissection (default values) >>> p = MIP6OptBindingAuthData(s) >>> p.otype == 5 and p.olen == 16 and p.authenticator == 0 True ###(445)=[passed] MIP6OptBindingAuthData - build >>> s = b'\x05*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xf7' >>> raw(MIP6OptBindingAuthData(olen=42, authenticator=2807)) == s True ###(446)=[passed] MIP6OptBindingAuthData - dissection >>> p = MIP6OptBindingAuthData(s) >>> p.otype == 5 and p.olen == 42 and p.authenticator == 2807 True ###### ## Mobility Options - Mobile Network Prefix ###### ###(447)=[passed] MIP6OptMobNetPrefix - build (default values) >>> s = b'\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(MIP6OptMobNetPrefix()) == s True ###(448)=[passed] MIP6OptMobNetPrefix - dissection (default values) >>> p = MIP6OptMobNetPrefix(s) >>> p.otype == 6 and p.olen == 18 and p.plen == 64 and p.prefix == '::' True ###(449)=[passed] MIP6OptMobNetPrefix - build >>> s = b'\x06*\x02 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(MIP6OptMobNetPrefix(olen=42, reserved=2, plen=32, prefix='2001:db8::')) == s True ###(450)=[passed] MIP6OptMobNetPrefix - dissection >>> p = MIP6OptMobNetPrefix(s) >>> p.olen == 42 and p.reserved == 2 and p.plen == 32 and p.prefix == '2001:db8::' True ###### ## Mobility Options - Link-Layer Address (MH-LLA) ###### ###(451)=[passed] MIP6OptLLAddr - basic build >>> raw(MIP6OptLLAddr()) == b'\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00' True ###(452)=[passed] MIP6OptLLAddr - basic dissection >>> p = MIP6OptLLAddr(b'\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00') >>> p.otype == 7 and p.olen == 7 and p.ocode == 2 and p.pad == 0 and p.lla == "00:00:00:00:00:00" True ###(453)=[passed] MIP6OptLLAddr - build with specific values >>> raw(MIP6OptLLAddr(olen=42, ocode=4, pad=0xff, lla='EE:EE:EE:EE:EE:EE')) == b'\x07*\x04\xff\xee\xee\xee\xee\xee\xee' True ###(454)=[passed] MIP6OptLLAddr - dissection with specific values >>> p = MIP6OptLLAddr(b'\x07*\x04\xff\xee\xee\xee\xee\xee\xee') >>> >>> raw(MIP6OptLLAddr(olen=42, ocode=4, pad=0xff, lla='EE:EE:EE:EE:EE:EE')) b'\x07*\x04\xff\xee\xee\xee\xee\xee\xee' >>> p.otype == 7 and p.olen == 42 and p.ocode == 4 and p.pad == 0xff and p.lla == "ee:ee:ee:ee:ee:ee" True ###### ## Mobility Options - Mobile Node Identifier ###### ###(455)=[passed] MIP6OptMNID - basic build >>> raw(MIP6OptMNID()) == b'\x08\x01\x01' True ###(456)=[passed] MIP6OptMNID - basic dissection >>> p = MIP6OptMNID(b'\x08\x01\x01') >>> p.otype == 8 and p.olen == 1 and p.subtype == 1 and p.id == b"" True ###(457)=[passed] MIP6OptMNID - build with specific values >>> raw(MIP6OptMNID(subtype=42, id="someid")) == b'\x08\x07*someid' True ###(458)=[passed] MIP6OptMNID - dissection with specific values >>> p = MIP6OptMNID(b'\x08\x07*someid') >>> p.otype == 8 and p.olen == 7 and p.subtype == 42 and p.id == b"someid" True ###### ## Mobility Options - Message Authentication ###### ###(459)=[passed] MIP6OptMsgAuth - basic build >>> raw(MIP6OptMsgAuth()) == b'\x09\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' True ###(460)=[passed] MIP6OptMsgAuth - basic dissection >>> p = MIP6OptMsgAuth(b'\x09\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA') >>> p.otype == 9 and p.olen == 17 and p.subtype == 1 and p.mspi == 0 and p.authdata == b"A"*12 True ###(461)=[passed] MIP6OptMsgAuth - build with specific values >>> raw(MIP6OptMsgAuth(authdata="B"*16, mspi=0xeeeeeeee, subtype=0xff)) == b'\t\x15\xff\xee\xee\xee\xeeBBBBBBBBBBBBBBBB' True ###(462)=[passed] MIP6OptMsgAuth - dissection with specific values >>> p = MIP6OptMsgAuth(b'\t\x15\xff\xee\xee\xee\xeeBBBBBBBBBBBBBBBB') >>> p.otype == 9 and p.olen == 21 and p.subtype == 255 and p.mspi == 0xeeeeeeee and p.authdata == b"B"*16 True ###### ## Mobility Options - Replay Protection ###### ###(463)=[passed] MIP6OptReplayProtection - basic build >>> raw(MIP6OptReplayProtection()) == b'\n\x08\x00\x00\x00\x00\x00\x00\x00\x00' True ###(464)=[passed] MIP6OptReplayProtection - basic dissection >>> p = MIP6OptReplayProtection(b'\n\x08\x00\x00\x00\x00\x00\x00\x00\x00') >>> p.otype == 10 and p.olen == 8 and p.timestamp == 0 True ###(465)=[passed] MIP6OptReplayProtection - build with specific values >>> s = raw(MIP6OptReplayProtection(olen=42, timestamp=(72*31536000)<<32)) >>> s == b'\n*\x87V|\x00\x00\x00\x00\x00' True ###(466)=[passed] MIP6OptReplayProtection - dissection with specific values >>> p = MIP6OptReplayProtection(s) >>> p.otype == 10 and p.olen == 42 and p.timestamp == 9752118382559232000 True >>> p.fields_desc[-1].i2repr("", p.timestamp) == 'Mon, 13 Dec 1971 23:50:39 +0000 (9752118382559232000)' True ###### ## Mobility Options - CGA Parameters ###### ###(467)=[passed] MIP6OptCGAParams >>> ###### ## Mobility Options - Signature ###### ###(468)=[passed] MIP6OptSignature >>> ###### ## Mobility Options - Permanent Home Keygen Token ###### ###(469)=[passed] MIP6OptHomeKeygenToken >>> ###### ## Mobility Options - Care-of Test Init ###### ###(470)=[passed] MIP6OptCareOfTestInit >>> ###### ## Mobility Options - Care-of Test ###### ###(471)=[passed] MIP6OptCareOfTest >>> ###### ## Mobility Options - Automatic Padding - MIP6OptBRAdvice ###### ###(472)=[passed] Mobility Options - Automatic Padding - MIP6OptBRAdvice >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptBRAdvice()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x02\x02\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x00\x02\x02\x00\x00\x01\x04\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x02\x02\x00\x00\x01\x04\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x00\x02\x02\x00\x00\x01\x02\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x02\x02\x00\x00\x01\x02\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x00\x02\x02\x00\x00\x01\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x02\x02\x00\x00\x01\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x00\x02\x02\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptBRAdvice()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x02\x02\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptAltCoA ###### ###(473)=[passed] Mobility Options - Automatic Padding - MIP6OptAltCoA >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptAltCoA()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptAltCoA()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptAltCoA()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x01\x05\x00\x00\x00\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x01\x04\x00\x00\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x01\x03\x00\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x01\x02\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x01\x01\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptAltCoA()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x01\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptNonceIndices ###### ###(474)=[passed] Mobility Options - Automatic Padding - MIP6OptNonceIndices >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x04\x10\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x00\x04\x10\x00\x00\x00\x00\x01\x02\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x04\x10\x00\x00\x00\x00\x01\x02\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x00\x04\x10\x00\x00\x00\x00\x01\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x04\x10\x00\x00\x00\x00\x01\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x00\x04\x10\x00\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptNonceIndices()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x04\x10\x00\x00\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptNonceIndices()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x00\x04\x10\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptNonceIndices()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x04\x10\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptBindingAuthData ###### ###(475)=[passed] Mobility Options - Automatic Padding - MIP6OptBindingAuthData >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x01\x03\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x01\x02\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x01\x01\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x01\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptBindingAuthData()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptBindingAuthData()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptBindingAuthData()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptMobNetPrefix ###### ###(476)=[passed] Mobility Options - Automatic Padding - MIP6OptMobNetPrefix >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptMobNetPrefix()])) == b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x01\x05\x00\x00\x00\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x01\x04\x00\x00\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x01\x03\x00\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x01\x02\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x01\x01\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x01\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptMobNetPrefix()])) == b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptLLAddr ###### ###(477)=[passed] Mobility Options - Automatic Padding - MIP6OptLLAddr >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptLLAddr()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptLLAddr()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptLLAddr()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptLLAddr()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptMNID ###### ###(478)=[passed] Mobility Options - Automatic Padding - MIP6OptMNID >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptMNID()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x08\x01\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptMNID()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x08\x01\x01' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x08\x01\x01\x01\x05\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x08\x01\x01\x01\x04\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x08\x01\x01\x01\x03\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x08\x01\x01\x01\x02\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x08\x01\x01\x01\x01\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x08\x01\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptMNID()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x08\x01\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptMsgAuth ###### ###(479)=[passed] Mobility Options - Automatic Padding - MIP6OptMsgAuth >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptMsgAuth()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptMsgAuth()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x01\x01\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA\x01\x02\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x01\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA\x01\x02\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA\x01\x02\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA\x01\x02\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x01\x01\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x01\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptMsgAuth()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x00\t\x11\x01\x00\x00\x00\x00AAAAAAAAAAAA' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptReplayProtection ###### ###(480)=[passed] Mobility Options - Automatic Padding - MIP6OptReplayProtection >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x01\x03\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x01\x02\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x01\x01\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x01\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptReplayProtection()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptReplayProtection()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptReplayProtection()])) ==b';\x04\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptCGAParamsReq ###### ###(481)=[passed] Mobility Options - Automatic Padding - MIP6OptCGAParamsReq >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptCGAParamsReq()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x0b\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptCGAParamsReq()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x0b\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptCGAParamsReq()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x0b\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x0b\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x0b\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x0b\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x0b\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x0b\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptCGAParamsReq()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x0b\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptCGAParams ###### ###(482)=[passed] Mobility Options - Automatic Padding - MIP6OptCGAParams >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptCGAParams()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x0c\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptCGAParams()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x0c\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptCGAParams()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x0c\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x0c\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x0c\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x0c\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x0c\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x0c\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptCGAParams()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptSignature ###### ###(483)=[passed] Mobility Options - Automatic Padding - MIP6OptSignature >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptSignature()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\r\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptSignature()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\r\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptSignature()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\r\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\r\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\r\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\r\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\r\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\r\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptSignature()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\r\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptHomeKeygenToken ###### ###(484)=[passed] Mobility Options - Automatic Padding - MIP6OptHomeKeygenToken >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptHomeKeygenToken()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x0e\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptHomeKeygenToken()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x0e\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptHomeKeygenToken()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x0e\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x0e\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x0e\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x0e\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x0e\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x0e\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptHomeKeygenToken()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x0e\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptCareOfTestInit ###### ###(485)=[passed] Mobility Options - Automatic Padding - MIP6OptCareOfTestInit >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptCareOfTestInit()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x0f\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptCareOfTestInit()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x0f\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptCareOfTestInit()])) ==b';\x01\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x0f\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x0f\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x0f\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x0f\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x0f\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x0f\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptCareOfTestInit()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x0f\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Mobility Options - Automatic Padding - MIP6OptCareOfTest ###### ###(486)=[passed] Mobility Options - Automatic Padding - MIP6OptCareOfTest >>> a = raw(MIP6MH_BU(seq=0x4242, options=[MIP6OptCareOfTest()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00' >>> b = raw(MIP6MH_BU(seq=0x4242, options=[Pad1(),MIP6OptCareOfTest()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> c = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*0),MIP6OptCareOfTest()])) ==b';\x02\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00' >>> d = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*1),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x01\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00' >>> e = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*2),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x02\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00' >>> g = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*3),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x03\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00' >>> h = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*4),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x04\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00' >>> i = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*5),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x05\x00\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00' >>> j = raw(MIP6MH_BU(seq=0x4242, options=[PadN(optdata=b'\x00'*6),MIP6OptCareOfTest()])) ==b';\x03\x05\x00\x00\x00BB\xd0\x00\x00\x03\x01\x06\x00\x00\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00' >>> a and b and c and d and e and g and h and i and j True ###### ## Binding Refresh Request Message ###### ###(487)=[passed] MIP6MH_BRR - Build (default values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_BRR()) == b'`\x00\x00\x00\x00\x08\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x00\x00\x00h\xfb\x00\x00' True ###(488)=[passed] MIP6MH_BRR - Build with specific values >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_BRR(nh=0xff, res=0xee, res2=0xaaaa, options=[MIP6OptLLAddr(), MIP6OptAltCoA()])) == b'`\x00\x00\x00\x00(\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\x04\x00\xee\xec$\xaa\xaa\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(489)=[passed] MIP6MH_BRR - Basic dissection >>> a=IPv6(b'`\x00\x00\x00\x00\x08\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x00\x00\x00h\xfb\x00\x00') >>> b=a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_BRR) and b.nh == 59 and b.len == 0 and b.mhtype == 0 and b.res == 0 and b.cksum == 0x68fb and b.res2 == 0 and b.options == [] True ###(490)=[passed] MIP6MH_BRR - Dissection with specific values >>> a=IPv6(b'`\x00\x00\x00\x00(\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xff\x04\x00\xee\xec$\xaa\xaa\x07\x07\x02\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b=a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_BRR) and b.nh == 0xff and b.len == 4 and b.mhtype == 0 and b.res == 238 and b.cksum == 0xec24 and b.res2 == 43690 and len(b.options) == 3 and isinstance(b.options[0], MIP6OptLLAddr) and isinstance(b.options[1], PadN) and isinstance(b.options[2], MIP6OptAltCoA) True ###(491)=[passed] MIP6MH_BRR / MIP6MH_BU / MIP6MH_BA hashret() and answers() >>> hoa="2001:db8:9999::1" >>> coa="2001:db8:7777::1" >>> cn="2001:db8:8888::1" >>> ha="2001db8:6666::1" >>> a=IPv6(raw(IPv6(src=cn, dst=hoa)/MIP6MH_BRR())) >>> b=IPv6(raw(IPv6(src=coa, dst=cn)/IPv6ExtHdrDestOpt(options=HAO(hoa=hoa))/MIP6MH_BU(flags=0x01))) >>> b2=IPv6(raw(IPv6(src=coa, dst=cn)/IPv6ExtHdrDestOpt(options=HAO(hoa=hoa))/MIP6MH_BU(flags=~0x01))) >>> c=IPv6(raw(IPv6(src=cn, dst=coa)/IPv6ExtHdrRouting(type=2, addresses=[hoa])/MIP6MH_BA())) >>> b.answers(a) and not a.answers(b) and c.answers(b) and not b.answers(c) and not c.answers(b2) 0 >>> >>> len(b[IPv6ExtHdrDestOpt].options) == 2 True ###### ## Home Test Init Message ###### ###(492)=[passed] MIP6MH_HoTI - Build (default values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_HoTI()) == b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x01\x00g\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(493)=[passed] MIP6MH_HoTI - Dissection (default values) >>> a=IPv6(b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x01\x00g\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_HoTI) and b.nh==59 and b.mhtype == 1 and b.len== 1 and b.res == 0 and b.cksum == 0x67f2 and b.cookie == b'\x00'*8 True ###(494)=[passed] MIP6MH_HoTI - Build (specific values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_HoTI(res=0x77, cksum=0x8899, cookie=b"\xAA"*8)) == b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x01w\x88\x99\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' True ###(495)=[passed] MIP6MH_HoTI - Dissection (specific values) >>> a=IPv6(b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x01w\x88\x99\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa') >>> b=a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_HoTI) and b.nh==59 and b.mhtype == 1 and b.len == 1 and b.res == 0x77 and b.cksum == 0x8899 and b.cookie == b'\xAA'*8 True ###### ## Care-of Test Init Message ###### ###(496)=[passed] MIP6MH_CoTI - Build (default values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_CoTI()) == b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x02\x00f\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(497)=[passed] MIP6MH_CoTI - Dissection (default values) >>> a=IPv6(b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x02\x00f\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_CoTI) and b.nh==59 and b.mhtype == 2 and b.len== 1 and b.res == 0 and b.cksum == 0x66f2 and b.cookie == b'\x00'*8 True ###(498)=[passed] MIP6MH_CoTI - Build (specific values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_CoTI(res=0x77, cksum=0x8899, cookie=b"\xAA"*8)) == b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x02w\x88\x99\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' True ###(499)=[passed] MIP6MH_CoTI - Dissection (specific values) >>> a=IPv6(b'`\x00\x00\x00\x00\x10\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x01\x02w\x88\x99\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa') >>> b=a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_CoTI) and b.nh==59 and b.mhtype == 2 and b.len == 1 and b.res == 0x77 and b.cksum == 0x8899 and b.cookie == b'\xAA'*8 True ###### ## Home Test Message ###### ###(500)=[passed] MIP6MH_HoT - Build (default values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_HoT()) == b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x03\x00e\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(501)=[passed] MIP6MH_HoT - Dissection (default values) >>> a=IPv6(b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x03\x00e\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_HoT) and b.nh==59 and b.mhtype == 3 and b.len== 2 and b.res == 0 and b.cksum == 0x65e9 and b.index == 0 and b.cookie == b'\x00'*8 and b.token == b'\x00'*8 True ###(502)=[passed] MIP6MH_HoT - Build (specific values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_HoT(res=0x77, cksum=0x8899, cookie=b"\xAA"*8, index=0xAABB, token=b'\xCC'*8)) == b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x03w\x88\x99\xaa\xbb\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' True ###(503)=[passed] MIP6MH_HoT - Dissection (specific values) >>> a=IPv6(b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x03w\x88\x99\xaa\xbb\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_HoT) and b.nh==59 and b.mhtype == 3 and b.len== 2 and b.res == 0x77 and b.cksum == 0x8899 and b.index == 0xAABB and b.cookie == b'\xAA'*8 and b.token == b'\xCC'*8 True ###(504)=[passed] MIP6MH_HoT answers >>> a1, a2 = "2001:db8::1", "2001:db8::2" >>> cookie = RandString(8)._fix() >>> p1 = IPv6(src=a1, dst=a2)/MIP6MH_HoTI(cookie=cookie) >>> p2 = IPv6(src=a2, dst=a1)/MIP6MH_HoT(cookie=cookie) >>> p2_ko = IPv6(src=a2, dst=a1)/MIP6MH_HoT(cookie="".join(chr((orb(b'\xff') + 1) % 256))) >>> assert p1.hashret() == p2.hashret() and p2.answers(p1) and not p1.answers(p2) >>> assert p1.hashret() != p2_ko.hashret() and not p2_ko.answers(p1) and not p1.answers(p2_ko) ###### ## Care-of Test Message ###### ###(505)=[passed] MIP6MH_CoT - Build (default values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_CoT()) == b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x04\x00d\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(506)=[passed] MIP6MH_CoT - Dissection (default values) >>> a=IPv6(b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x04\x00d\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_HoT) and b.nh==59 and b.mhtype == 4 and b.len== 2 and b.res == 0 and b.cksum == 0x64e9 and b.index == 0 and b.cookie == b'\x00'*8 and b.token == b'\x00'*8 True ###(507)=[passed] MIP6MH_CoT - Build (specific values) >>> raw(IPv6(src="2001:db8::1", dst="2001:db8::2")/MIP6MH_CoT(res=0x77, cksum=0x8899, cookie=b"\xAA"*8, index=0xAABB, token=b'\xCC'*8)) == b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x04w\x88\x99\xaa\xbb\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc' True ###(508)=[passed] MIP6MH_CoT - Dissection (specific values) >>> a=IPv6(b'`\x00\x00\x00\x00\x18\x87@ \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02;\x02\x04w\x88\x99\xaa\xbb\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc') >>> b = a.payload >>> a.nh == 135 and isinstance(b, MIP6MH_CoT) and b.nh==59 and b.mhtype == 4 and b.len== 2 and b.res == 0x77 and b.cksum == 0x8899 and b.index == 0xAABB and b.cookie == b'\xAA'*8 and b.token == b'\xCC'*8 True ###### ## Binding Update Message ###### ###(509)=[passed] MIP6MH_BU - build (default values) >>> s= b'`\x00\x00\x00\x00(<@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87\x02\x01\x02\x00\x00\xc9\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x01\x05\x00\xee`\x00\x00\xd0\x00\x00\x03\x01\x02\x00\x00' >>> raw(IPv6()/IPv6ExtHdrDestOpt(options=[HAO()])/MIP6MH_BU()) == s True ###(510)=[passed] MIP6MH_BU - dissection (default values) >>> p = IPv6(s) >>> p[MIP6MH_BU].len == 1 True ###(511)=[passed] MIP6MH_BU - build >>> s = b'`\x00\x00\x00\x00P<@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87\x02\x01\x02\x00\x00\xc9\x10 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfe;\x06\x05\x00\xea\xf2\x00\x00\xd0\x00\x00*\x01\x00\x03\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x06\x12\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> raw(IPv6()/IPv6ExtHdrDestOpt(options=[HAO(hoa='2001:db8::cafe')])/MIP6MH_BU(mhtime=42, options=[MIP6OptAltCoA(),MIP6OptMobNetPrefix()])) == s True ###(512)=[passed] MIP6MH_BU - dissection >>> p = IPv6(s) >>> p[MIP6MH_BU].cksum == 0xeaf2 and p[MIP6MH_BU].len == 6 and len(p[MIP6MH_BU].options) == 4 and p[MIP6MH_BU].mhtime == 42 True ###### ## Binding ACK Message ###### ###(513)=[passed] MIP6MH_BA - build >>> s = b'`\x00\x00\x00\x00\x10\x87@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01;\x01\x06\x00\xbc\xb9\x00\x80\x00\x00\x00*\x01\x02\x00\x00' >>> raw(IPv6()/MIP6MH_BA(mhtime=42)) == s True ###(514)=[passed] MIP6MH_BA - dissection >>> p = IPv6(s) >>> p[MIP6MH_BA].cksum == 0xbcb9 and p[MIP6MH_BA].len == 1 and len(p[MIP6MH_BA].options) == 1 and p[MIP6MH_BA].mhtime == 42 True ###### ## Binding ERR Message ###### ###(515)=[passed] MIP6MH_BE - build >>> s = b'`\x00\x00\x00\x00\x18\x87@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01;\x02\x07\x00\xbbY\x02\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02' >>> raw(IPv6()/MIP6MH_BE(status=2, ha='1::2')) == s True ###(516)=[passed] MIP6MH_BE - dissection >>> p = IPv6(s) >>> p[MIP6MH_BE].cksum=0xba10 and p[MIP6MH_BE].len == 1 and len(p[MIP6MH_BE].options) == 1 ###### ## TracerouteResult6 ###### ###(517)=[passed] get_trace() >>> ip6_hlim = [("2001:db8::%d" % i, i) for i in range(1, 12)] >>> >>> tr6_packets = [ (IPv6(dst="2001:db8::1", src="2001:db8::254", hlim=hlim)/UDP()/"scapy", ... IPv6(dst="2001:db8::254", src=ip)/ICMPv6TimeExceeded()/IPerror6(dst="2001:db8::1", src="2001:db8::254", hlim=0)/UDPerror()/"scapy") ... for (ip, hlim) in ip6_hlim ] >>> >>> tr6 = TracerouteResult6(tr6_packets) >>> tr6.get_trace() == {'2001:db8::1': {1: ('2001:db8::1', False), 2: ('2001:db8::2', False), 3: ('2001:db8::3', False), 4: ('2001:db8::4', False), 5: ('2001:db8::5', False), 6: ('2001:db8::6', False), 7: ('2001:db8::7', False), 8: ('2001:db8::8', False), 9: ('2001:db8::9', False), 10: ('2001:db8::10', False), 11: ('2001:db8::11', False)}} True ###(518)=[passed] show() >>> def test_show(): ... with ContextManagerCaptureOutput() as cmco: ... tr6 = TracerouteResult6(tr6_packets) ... tr6.show() ... result = cmco.get_output() ... expected = " 2001:db8::1 :udpdomain \n" ... expected += "1 2001:db8::1 3 \n" ... expected += "2 2001:db8::2 3 \n" ... expected += "3 2001:db8::3 3 \n" ... expected += "4 2001:db8::4 3 \n" ... expected += "5 2001:db8::5 3 \n" ... expected += "6 2001:db8::6 3 \n" ... expected += "7 2001:db8::7 3 \n" ... expected += "8 2001:db8::8 3 \n" ... expected += "9 2001:db8::9 3 \n" ... expected += "10 2001:db8::10 3 \n" ... expected += "11 2001:db8::11 3 \n" ... index_result = result.index("\n1") ... index_expected = expected.index("\n1") ... assert result[index_result:] == expected[index_expected:] ... >>> test_show() ###(519)=[passed] graph() >>> saved_AS_resolver = conf.AS_resolver >>> conf.AS_resolver = None >>> tr6.make_graph() >>> assert len(tr6.graphdef) == 530 >>> assert tr6.graphdef.startswith("digraph trace {") >>> '"2001:db8::1 53/udp";' in tr6.graphdef True >>> conf.AS_resolver = saved_AS_resolver IPsec layer regression tests ━ Run at 04:11:50 from [test/scapy/layers/ipsec.uts] by UTscapy in 3.662259101867676 └ Passed=122 └ Failed=0 ###### ## IPv4 / ESP - Transport - Encryption Algorithms ###### ###(000)=[passed] IPv4 / ESP - Transport - NULL - NULL after decryption the original packet payload should be unaltered >>> import socket >>> >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(001)=[passed] IPv4 / ESP - Transport - DES - NULL the encrypted packet should have an ESP layer after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='DES', crypt_key=b'8bytekey', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x0f\x6d\x2f\x3d\x1e\xc1\x0b\xc2\xb6\x8f\xfd\x67\x39\xc0\x96\x2c' ... b'\x17\x79\x88\xf6\xbc\x4d\xf7\x45\xd8\x36\x63\x86\xcd\x08\x7c\x08' ... b'\x2b\xf8\xa2\x91\x18\x21\x88\xd9\x26\x00\xc5\x21\x24\xbf\x8f\xf5' ... b'\x6c\x47\xb0\x3a\x8e\xdb\x75\x21\xd9\x33\x85\x5a\x15\xc6\x31\x00' ... b'\x1c\xef\x3e\x12\xce\x70\xec\x8f\x48\xc7\x81\x9b\x66\xcb\xf5\x39' ... b'\x91\xb3\x8e\x72\xfb\x7f\x64\x65\x6c\xf4\xa9\xf2\x5e\x63\x2f\x60', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) ICMP.guess_payload_class() returned [None] >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(002)=[passed] IPv4 / ESP - Transport - 3DES - NULL the encrypted packet should have an ESP layer after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='3DES', crypt_key=b'threedifferent8byteskeys', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x36\x5c\x9b\x41\x37\xc8\x59\x1e\x39\x63\xe8\x6b\xf7\x0d\x97\x54' ... b'\x13\x84\xf6\x81\x66\x19\xe7\xcb\x75\x94\xf1\x0b\x8e\xa3\xf1\xa0' ... b'\x3e\x88\x51\xc4\x50\xd0\xa9\x1f\x16\x25\xc6\xbd\xe9\x0b\xdc\xae' ... b'\xf8\x13\x00\xa3\x8c\x53\xee\x1c\x96\xc0\xfe\x99\x70\xab\x94\x77' ... b'\xd7\xc4\xe8\xfd\x9f\x96\x28\xb8\x95\x20\x86\x7b\x19\xbc\x8f\xf5' ... b'\x96\xb0\x7e\xcc\x04\x83\xae\x4d\xa3\xba\x1d\x44\xf0\xba\x2e\xcd', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) more ICMP.guess_payload_class() returned [None] >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(003)=[passed] IPv4 / ESP - Transport - AES-CBC - NULL after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x08\x2f\x94\xe6\x53\xd8\x8e\x13\x70\xe8\xff\x61\x52\x90\x27\x3c' ... b'\xf2\xb4\x1f\x75\xd2\xa0\xac\xae\x1c\xa8\x5e\x1c\x78\x21\x4c\x7f' ... b'\xc3\x30\x17\x6a\x8d\xf3\xb1\xa7\xd1\xa8\x42\x01\xd6\x8d\x2d\x7e' ... b'\x5d\x06\xdf\xaa\x05\x27\x42\xb1\x00\x12\xcf\xff\x64\x02\x5a\x40' ... b'\xcd\xca\x1b\x91\xba\xf8\xc8\x59\xe7\xbd\x4d\x19\xb4\x8d\x39\x25' ... b'\x6c\x73\xf1\x2d\xaa\xee\xe1\x0b\x71\xcd\xfc\x11\x1d\x56\xce\x60' ... b'\xed\xd2\x32\x87\xd4\x90\xc3\xf5\x31\x47\x97\x69\x83\x82\x6d\x38', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(004)=[passed] IPv4 / ESP - Transport - AES-CTR - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CTR', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\xc4\xca\x09\x0f\x8b\xd3\x05\x3d\xac\x5a\x2f\x87\xca\x71\x10\x01' ... b'\xa7\x95\xc9\x07\xcc\xd4\x05\x58\x65\x23\x22\x4b\x63\x9b\x1f\xef' ... b'\x55\xb9\x1a\x91\x52\x76\x00\xf7\x94\x7b\x1d\xe1\x8e\x03\x2e\x85' ... b'\xad\xdd\x83\x22\x8a\xc3\x88\x6e\x85\xf5\x9b\xed\xa9\x6e\xb1\xc3' ... b'\x78\x00\x2f\xcd\x77\xe8\x3e\xec\x0e\x77\x94\xb2\x9b\x0f\x64\x5e' ... b'\x09\x83\x03\x7d\x83\x22\x39\xbb\x94\x66\xae\x9f\xbf\x01\xda\xfb', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(005)=[passed] IPv4 / ESP - Transport - Blowfish - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='Blowfish', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x93\x9f\x5a\x10\x55\x57\x30\xa0\xb4\x00\x72\x1e\x46\x42\x46\x20' ... b'\xbc\x01\xef\xc3\x79\xcc\x3e\x55\x64\xba\x09\xc2\x6a\x5a\x5c\xb3' ... b'\xcc\xb5\xd5\x87\x82\xb0\x0a\x94\x58\xfc\x50\x37\x40\xe1\x03\xd3' ... b'\x4a\x09\xb2\x23\x53\x56\xa4\x45\x4c\xbb\x81\x1c\xdb\x31\xa7\x67' ... b'\xbd\x38\x8e\xba\x55\xd9\x1f\xf1\x3c\xeb\x07\x4c\x02\xb0\x3e\xc5' ... b'\xf6\x60\xdd\x68\xe1\xd4\xec\xee\x27\xc0\x6d\x1a\x80\xe2\xcc\x7d', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(006)=[passed] IPv4 / ESP - Transport - CAST - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='CAST', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\xcd\x4a\x46\x05\x51\x54\x73\x35\x1d\xad\x4b\x10\xc1\x15\xe2\x70' ... b'\xbc\x9c\x53\x8f\x4d\x1c\x87\x1a\xc1\xb0\xdf\x80\xd1\x0c\xa4\x59' ... b'\xe6\x50\xde\x46\xdb\x3f\x28\xc2\xda\x6c\x2b\x81\x5e\x7c\x7b\x4f' ... b'\xbc\x8d\xc1\x6d\x4a\x2b\x04\x91\x9e\xc4\x0b\xba\x05\xba\x3b\x71' ... b'\xac\xe3\x16\xcf\x7f\x00\xc5\x87\x7d\x72\x48\xe6\x5b\x43\x19\x24' ... b'\xae\xa6\x2c\xcc\xad\xbf\x37\x6c\x6e\xea\x71\x67\x73\xd6\x11\x9f', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###### ## IPv4 / ESP - Tunnel - Encryption Algorithms ###### ###(007)=[passed] IPv4 / ESP - Tunnel - NULL - NULL after encryption packet should be encapsulated with the given ip tunnel header after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(008)=[passed] IPv4 / ESP - Tunnel - DES - NULL after encryption packet should be encapsulated with the given ip tunnel header the encrypted packet should have an ESP layer after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='DES', crypt_key=b'8bytekey', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(009)=[passed] IPv4 / ESP - Tunnel - 3DES - NULL after encryption packet should be encapsulated with the given ip tunnel header the encrypted packet should have an ESP layer after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='3DES', crypt_key=b'threedifferent8byteskeys', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(010)=[passed] IPv4 / ESP - Tunnel - AES-CBC - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(011)=[passed] IPv4 / ESP - Tunnel - AES-CTR - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CTR', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(012)=[passed] IPv4 / ESP - Tunnel - Blowfish - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='Blowfish', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(013)=[passed] IPv4 / ESP - Tunnel - CAST - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='CAST', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###### ## IPv4 / ESP - Transport - Authentication Algorithms ###### ###(014)=[passed] IPv4 / ESP - Transport - NULL - HMAC-SHA1-96 integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d[TCP] == p[TCP] ###(015)=[passed] IPv4 / ESP - Transport - NULL - HMAC-SHA1-96 - altered packet simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'S\\x11\\x8a\\r"\\x8b\\x1e/i\\xd78\\xa0\', computed_icv=b\'\\x02\\x0b\\xfe\\xf6\\xe1\\xc5\\xc8\\x87.7\\x7f\\xc9\'') ###(016)=[passed] IPv4 / ESP - Transport - NULL - SHA2-256-128 after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(017)=[passed] IPv4 / ESP - Transport - NULL - SHA2-256-128 - altered packet after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xf8H3-8\\xe6\\xfa\\xcb\\xa0T\\xd1\\xa0\\x03\\x8f\\xba@', computed_icv=b'.S\\xa5\\x9cw\\xf0\\xaeM0;\\x08M/6\\x990'") ###(018)=[passed] IPv4 / ESP - Transport - NULL - SHA2-384-192 after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-384-192', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(019)=[passed] IPv4 / ESP - Transport - NULL - SHA2-384-192 - altered packet after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-384-192', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x14\\x18\\xf6[\\x0c\\x1dJm\\x1e\\x86@\\xd5E{\\xab\\x95g\\x82j\\x1f>\\xb6R\\xff', computed_icv=b'`\\xcc\\x1bK\\x8e[_\\x02BQ\\x8dm2\\x92\\xcf\\\\;\\xa3\\x08+\\xa0Y\\xe3A'") ###(020)=[passed] IPv4 / ESP - Transport - NULL - SHA2-512-256 after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-512-256', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(021)=[passed] IPv4 / ESP - Transport - NULL - SHA2-512-256 - altered packet after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-512-256', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'lc\\x9e^K\\x00\\xbcI\\x02\\xf5 (\\xe12\\xb9\\x1d\\x0c\\x83\\xbe\\x1b\\xf0\\x8b0\\xd0\\x96-JO!\\xe3\\xaa\\xd3', computed_icv=b'\\n\\x8d\\xde\\x0fV~\\x08\\xad\\xdc\\xc5q\\x9a\\xb3\\n\\x89F3\\x03\\xb4s,\\xea\\xdb\\x9b\\x91)\\xf2\\x8ag]\\x90\\xc7'") ###(022)=[passed] IPv4 / ESP - Transport - NULL - HMAC-MD5-96 after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(023)=[passed] IPv4 / ESP - Transport - NULL - HMAC-MD5-96 - altered packet after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x98q\\xee\\xf9M\\r1\\x97\\xee\\xb3\\x8c7', computed_icv=b'Y\\xdb\\xec_)\\xbb\\xe1@)\\x05v\\x04'") ###(024)=[passed] IPv4 / ESP - Transport - NULL - AES-CMAC-96 after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(025)=[passed] IPv4 / ESP - Transport - NULL - AES-CMAC-96 - altered packet after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'Q\\xf6\\xa4\\x8c\\xc7<\\x97\\x12\\x05\\x99\\xa3\\xed', computed_icv=b'\\xcf\\xdb\\x01\\x05\\xa4I\\x9a\\xd6\\x00\\r\\x8aC'") ###### ## IPv4 / ESP - Tunnel - Authentication Algorithms ###### ###(026)=[passed] IPv4 / ESP - Tunnel - NULL - HMAC-SHA1-96 after encryption packet should be encapsulated with the given ip tunnel header integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d[TCP] == p[TCP] ###(027)=[passed] IPv4 / ESP - Tunnel - NULL - HMAC-SHA1-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x94\\xf0#\\xc9\\xbdT\\x05\\x1e^\\xcf\\xd7\\xf0', computed_icv=b'G\\xb2\\xcf\\xbe\\x84\\r(W\\xed\\xb4\\xffz'") ###(028)=[passed] IPv4 / ESP - Tunnel - NULL - SHA2-256-128 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(029)=[passed] IPv4 / ESP - Tunnel - NULL - SHA2-256-128 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x92V\\xb0\\xe5\\x12-\\xed\\xf94\\x97(\\xa27\\xeb\\x89\\xbb', computed_icv=b'\\xc3M~\\xdb\\xd4\\x16\\xd7\\x02>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-384-192', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(031)=[passed] IPv4 / ESP - Tunnel - NULL - SHA2-384-192 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-384-192', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'B8\\xbb\\xef\\x7f\\xd0\\xfak\\x7f\\xb29\\xd7\\x87\\xf67^\\x18m\\xd1=\\x94>8\\x90', computed_icv=b'\\x00\\x03B\\x19\\xbc\\xad\\xbc\\x9d\\xd8p \\xfd\\xd9s\\xd5\\xe3R\\xc4@\\x92R\\x0b\\x92\\xa4'") ###(032)=[passed] IPv4 / ESP - Tunnel - NULL - SHA2-512-256 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-512-256', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(033)=[passed] IPv4 / ESP - Tunnel - NULL - SHA2-512-256 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='SHA2-512-256', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'\\xc0\\xd4\\xe8\\xd3bpx\\x05L\\xaf|\\x95\\xce\\x18\\xb9i6L\\x19\\x05}\\x9c\\xab\\xcaJ\\xe9"\\xe5`/$-\', computed_icv=b\'\\x95Fn\\x9c\\x1e\\x8a\\x08\\xe9\\xedy\\x9c\\xf4=\\x1fgy\\xdf\\x02\\xf1\\xc1\\x8f\\xbb\\x82H\\x8d\\xec\\xae\\xa6Gu\\x96X\'') ###(034)=[passed] IPv4 / ESP - Tunnel - NULL - HMAC-MD5-96 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(035)=[passed] IPv4 / ESP - Tunnel - NULL - HMAC-MD5-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'{\\xd09\\x00%\\x02\\xe9\\xba\\x0482\\xd7', computed_icv=b'\\x8a\\xcfF\\xbe\\x9d}\\xda\\x00\\xc5\\xf1\\xe3\\x02'") ###(036)=[passed] IPv4 / ESP - Tunnel - NULL - AES-CMAC-96 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable integrity verification should pass after decryption the original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d == p ###(037)=[passed] IPv4 / ESP - Tunnel - NULL - AES-CMAC-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xef\\xbecVk\\xdf\\\\\\x86\\x9b\\xfb\\xf4T', computed_icv=b'\\xf1\\xbf\\xb8[DQ\\x17O}.y\\xce'") ###### ## IPv4 / ESP - Encryption + Authentication ###### ###(038)=[passed] IPv4 / ESP - Transport - AES-CBC - HMAC-SHA1-96 after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(039)=[passed] IPv4 / ESP - Transport - AES-CBC - HMAC-SHA1-96 - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'q\\x94Ee\\xe9\\xae\\x1e\\xee\\x1c\\xa4D\\xc6\', computed_icv=b"\\xaes\'\\x96\\x1c\\x07\\xba\\x0ck\\xb0\\xba\\x1c"') ###(040)=[passed] IPv4 / ESP - Transport - AES-CBC - HMAC-SHA2-256-128 -- ESN integrity verification should pass >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('hello world') >>> p = IP(raw(p)) >>> p >>> >>> >>> enc_key = bytes.fromhex("85ee354b4675a9c5d16e3d6f4118043b") >>> auth_key = bytes.fromhex("6f79bf94da7dde3c86009934d9258f1b3fc2f5382aca9c9cb8e216eed235f34c") >>> >>> sa = SecurityAssociation(ESP, spi=0xcf54ccdf, crypt_algo='AES-CBC', ... crypt_key=enc_key, ... auth_algo='SHA2-256-128', auth_key=auth_key, ... esn_en=True, esn=68) >>> e = sa.encrypt(p, iv=bytes.fromhex("11223344112233441122334411223344")) >>> >>> >>> assert bytes(e) == bytes.fromhex("4500006c000100004032745a0101010102020202cf54ccdf0000000111223344112233441122334411223344f5bda519c9ae64f283f0fc18a8d253eca8b34c2120c8958a97ec9d8e67756da2523fce9b5541c57fddf090afc2bfd97e8703203953f853eb61482e4c1384d4c8") >>> >>> d = sa.decrypt(e) >>> d >>> ###(041)=[passed] IPv4 / ESP - Transport - AES-GCM - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x66\x00\x28\x86\xe9\xdf\xc5\x24\xb0\xbd\xfd\x62\x61\x7e\xd3\x76' ... b'\x7b\x48\x28\x8e\x76\xaa\xea\x48\xb8\x40\x30\x8a\xce\x50\x71\xbb' ... b'\xc0\xb2\x47\x71\xd7\xa4\xa0\xcb\x03\x68\xd3\x16\x5a\x7c\x37\x84' ... b'\x87\xc7\x19\x59\xb4\x7c\x76\xe3\x48\xc0\x90\x4b\xd2\x36\x95\xc1' ... b'\xb7\xa4\xb6\x7b\x89\xe6\x4f\x10\xae\xdb\x84\x47\x46\x00\xb4\x44' ... b'\xe6\x6d\x16\x55\x5f\x82\x36\xa5\x49\xf7\x52\x81\x65\x90\x4d\x28' ... b'\x92\xb2\xe3\xf1\xa4\x02\xd2\x37\xac\x0b\x7a\x10\xcf\x64\x46\xb9', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(042)=[passed] IPv4 / ESP - Transport - AES-GCM - NULL -- ESN after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, esn_en = True, esn = 0x1) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x66\x00\x28\x86\xe9\xdf\xc5\x24\xb0\xbd\xfd\x62\x61\x7e\xd3\x76' ... b'\x7b\x48\x28\x8e\x76\xaa\xea\x48\xb8\x40\x30\x8a\xce\x50\x71\xbb' ... b'\xc0\xb2\x47\x71\xd7\xa4\xa0\xcb\x03\x68\xd3\x16\x5a\x7c\x37\x84' ... b'\x87\xc7\x19\x59\xb4\x7c\x76\xe3\x48\xc0\x90\x4b\xd2\x36\x95\xc1' ... b'\xb7\xa4\xb6\x7b\x89\xe6\x4f\x10\xae\xdb\x84\x47\x46\x00\xb4\x44' ... b'\xe6\x6d\x16\x55\x5f\x82\x36\xa5\x49\xf7\x52\x81\x65\x90\x4d\x28' ... b'\xfe\x4d\x22\x83\x6a\x81\x0d\x60\x94\xdb\x45\x22\x03\x92\xf6\x94', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(043)=[passed] IPv4 / ESP - Transport - AES-GCM - NULL - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(044)=[passed] IPv4 / ESP - Transport - AES-GCM - NULL - altered packet -- ESN after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, esn_en = True, esn = 0x200) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> try: ... d = sa.decrypt(e, esn = 0x201) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(045)=[passed] IPv4 / ESP - Transport - AES-NULL-GMAC - NULL AES-NULL-GMAC is integrity only, the original packet payload should be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-NULL-GMAC', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x54\x70\x6c\x6a\x9f\xba\xa6\x18\x45\x00\x00\x54\xbc\x53\x00\x00' ... b'\x40\x01\xa9\x59\x0a\x7d\x00\x01\x0a\x7d\x00\x02\x00\x00\xad\x53' ... b'\xa8\x83\x00\x01\x02\xe6\x09\x64\x00\x00\x00\x00\xd9\x0a\x06\x00' ... b'\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b' ... b'\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b' ... b'\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x01\x02\x02\x04' ... b'\x9b\x76\x32\x30\xf6\x49\x92\xa8\x8f\x6a\x20\x87\x2c\x74\x0c\x18', ... seq=22) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(046)=[passed] IPv4 / ESP - Transport - AES-NULL-GMAC - NULL -- ESN AES-NULL-GMAC is integrity only, the original packet payload should be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-NULL-GMAC', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, esn_en = True, esn = 0x1) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x43\xe6\xa1\xce\x70\x9d\x67\xf4\x45\x00\x00\x54\x2e\x4a\x40\x00' ... b'\x40\x01\xf7\x62\x0a\x7d\x00\x02\x0a\x7d\x00\x01\x08\x00\xd3\x32' ... b'\x8f\x4c\x00\x02\x8d\xec\x09\x64\x00\x00\x00\x00\x3c\x5b\x03\x00' ... b'\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b' ... b'\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b' ... b'\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x01\x02\x02\x04' ... b'\x76\xd4\x93\x90\x75\xee\x3f\xa3\xf3\xcf\xcc\x27\xf5\x5b\x12\xb6', ... seq=5) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(047)=[passed] IPv4 / ESP - Transport - AES-NULL-GMAC - NULL - altered packet AES-NULL-GMAC is integrity only, the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-NULL-GMAC', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(048)=[passed] IPv4 / ESP - Transport - AES-NULL-GMAC - NULL - altered packet -- ESN AES-NULL-GMAC is integrity only, the original packet payload should be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-NULL-GMAC', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, esn_en = True, esn = 0x200) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> try: ... d = sa.decrypt(e, esn = 0x201) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(049)=[passed] IPv4 / ESP - Transport - AES-CCM - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved Check for ICMP layer in decrypted reference >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... crypt_icv_size=8, ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p >>> >>> ref = IP() \ ... / ESP(spi=0x222, ... data=b'\x2e\x02\x9f\x1f\xad\x76\x80\x58\x8f\xeb\x45\xf1\x66\xe3\xad\xa6' ... b'\x90\x1b\x2b\x7d\xd3\x3d\xa4\x53\x35\xc8\xfa\x92\xfd\xd7\x42\x2f' ... b'\x87\x60\x9b\x46\xb0\x21\x5e\x82\xfb\x2f\x59\xba\xf0\x6c\xe5\x51' ... b'\xb8\x36\x20\x88\xfe\x49\x86\x60\xe8\x0a\x3d\x36\xb5\x8a\x08\xa9' ... b'\x5e\xe3\x87\xfa\x93\x3f\xe8\xc2\xc5\xbf\xb1\x2e\x6f\x7d\xc5\xa5' ... b'\xd8\xe5\xf3\x25\x21\x81\x43\x16\x48\x10\x7c\x04\x31\x20\x07\x7c' ... b'\x7b\xda\x5d\x1a\x72\x45\xc4\x79', ... seq=1) >>> >>> d_ref = sa.decrypt(ref) >>> d_ref >>> >>> >>> assert d_ref.haslayer(ICMP) ###(050)=[passed] IPv4 / ESP - Transport - AES-CCM - NULL - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(051)=[passed] IPv4 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(052)=[passed] IPv4 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xc4|\\xf6j\\x8dP=\\xca&>Qd', computed_icv=b'\\xfeL\\x97\\xf3\\xc0\\x00\\xe5h\\x81\\xff\\xde\\xd7'") ###(053)=[passed] IPv4 / ESP - Tunnel - AES-GCM - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(054)=[passed] IPv4 / ESP - Tunnel - AES-GCM - NULL -- ESN after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'), esn_en = True, esn = 0x2) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(055)=[passed] IPv4 / ESP - Tunnel - AES-GCM - NULL - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(056)=[passed] IPv4 / ESP - Tunnel - AES-GCM - NULL - altered packet - ESN after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'), esn_en = True, esn = 0x2) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> try: ... d = sa.decrypt(e, esn = 0x3) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(057)=[passed] IPv4 / ESP - Tunnel - AES-CTR - NULL - verify no cipher align padding after encryption packet should be padded for 4 byte alignment >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= UDP(sport=1000, dport=1001) >>> p /= Raw("\x00" * 3) >>> p >> >>> print("len p: {}".format(len(p))) len p: 31 >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CTR', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> print("crypt_algo.icv_size {}".format(sa.crypt_algo.icv_size)) crypt_algo.icv_size None >>> print("auth_algo.icv_size {}".format(sa.auth_algo.icv_size)) auth_algo.icv_size 0 >>> >>> e = sa.encrypt(p) >>> e > >>> print("len e: {}".format(len(e))) len e: 72 >>> >>> esp = sa.crypt_algo.decrypt(sa, e[ESP], sa.crypt_key, ... sa.crypt_algo.icv_size or ... sa.auth_algo.icv_size, ... esn_en=sa.esn_en, ... esn=sa.esn) >>> esp <_ESPPlain spi=0x222 seq=1 iv=b"\x1c\x8f'\xf7\x16e\xb0\x81" data=b'E\x00\x00\x1f\x00\x01\x00\x00@\x11t\xc8\x01\x01\x01\x01\x02\x02\x02\x02\x03\xe8\x03\xe9\x00\x0b\xf2\x01\x00\x00\x00' padding=b'\x01\x02\x03' padlen=3 nh=ipv4 icv=b'' |> >>> print("len(esp.data): {}".format(len(esp.data))) len(esp.data): 31 >>> >>> assert len(e) == 72 and esp.padlen == 3, "bad length/padding {}/{}".format(len(e), esp.padlen) ###(058)=[passed] IPv4 / ESP - Tunnel - AES-GCM - NULL - verify no cipher align padding after encryption packet should be padded for 4 byte alignment >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= UDP(sport=1000, dport=1001) >>> p /= Raw("\x00" * 1418) >>> print("len p: {}".format(len(p))) len p: 1446 >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> print("len e: {}".format(len(e))) len e: 1500 >>> >>> esp = sa.crypt_algo.decrypt(sa, e[ESP], sa.crypt_key, ... sa.crypt_algo.icv_size or ... sa.auth_algo.icv_size, ... esn_en=sa.esn_en, ... esn=sa.esn) >>> print("len(esp.data): {}".format(len(esp.data))) len(esp.data): 1446 >>> >>> assert len(e) == 1500 and esp.padlen == 0, "bad length/padding {}/{}".format(len(e), esp.padlen) ###(059)=[passed] IPv4 / ESP - Tunnel - AES-CCM - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(060)=[passed] IPv4 / ESP - Tunnel - AES-CCM - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###### ## IPv4 / AH - Transport ###### ###(061)=[passed] IPv4 / AH - Transport - HMAC-SHA1-96 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(062)=[passed] IPv4 / AH - Transport - HMAC-SHA1-96 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before decryption integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].sport = 5 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'J\\xcbe\\x085/\\xab\\xe8@KC\\x11', computed_icv=b'\\xcf\\x1f\\xdd\\xc4\\xb4X\\xf8\\x1b\\x08aL\\xe2'") ###(063)=[passed] IPv4 / AH - Transport - SHA2-256-128 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(064)=[passed] IPv4 / AH - Transport - SHA2-256-128 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x97\\x98\\x9e\\xbb\\x17R\\x0e\\x9d\\xc0\\xdb@\\x1c\\xfd\\x85/\\x9f', computed_icv=b'\\xc7\\x07t\\xe5n\\xc9\\x12cR\\xff\\x19\\x1a\\xa4\\xf401'") ###(065)=[passed] IPv4 / AH - Transport - SHA2-384-192 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-384-192', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(066)=[passed] IPv4 / AH - Transport - SHA2-384-192 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-384-192', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'/;u\\x90\\xb0\\xc7U\\xf2\\x1a\\xde#f\\xda\\xea\\x12\\xa6\\xbd/3\\xc1C\\xf2\\xd6\\x7f', computed_icv=b'\\x0b\\x97(\\xed\\xa9A\\x82\\x7f\\x8a\\xa9Hi\\x06m\\xa9\\xf3\\xf6&\\xc5\\x8e(eH0'") ###(067)=[passed] IPv4 / AH - Transport - SHA2-512-256 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-512-256', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(068)=[passed] IPv4 / AH - Transport - SHA2-512-256 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-512-256', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xa7\\xbc`E\\x8e\\xd7I\\x97\\xb0\\xca;\\x02\\xcdpsdu;W\\x8a\\xd4G\\x9b\\xf8m\\xb8\\xc6\\x9e\\xbc\\xb4\\x00\\xce', computed_icv=b'\\xe3Y[\\xb3\\xae\\x97\\xcb\\xe8\\x07\\xc0\\xd5f\\xe5\\x11\\xb3!A\\xa2%[nD\\xf0\\xac\\xca\\xd1\\x16g\\xccB\\x9f\\xa2'") ###(069)=[passed] IPv4 / AH - Transport - HMAC-MD5-96 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(070)=[passed] IPv4 / AH - Transport - HMAC-MD5-96 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'a|FaYF\\xa3K\\x88t2\\xc9', computed_icv=b'D\\xbf\\x8c\\xe3r@&T\\xf5z\\x9a:'") ###(071)=[passed] IPv4 / AH - Transport - AES-CMAC-96 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(072)=[passed] IPv4 / AH - Transport - AES-CMAC-96 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x9c\\x19\\xe2(\\x9b\\x17\\xb3\\xe3:|\\xce\\xf1', computed_icv=b'^V3D\\x82\\x98\\xa4fJ\\xf0{e'") ###(073)=[passed] IPv4 / AH - Transport - AES-CMAC-96 -- ESN the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... esn_en=True, esn=0x200) >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(074)=[passed] IPv4 / AH - Transport - AES-CMAC-96 - altered packet -- ESN the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... esn_en=True, esn=0x200) >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'\\x01:C\\x06\\xe5\\xe6\\xeb\\xbbw\\x94\\xef\\x17\', computed_icv=b\'8"\\x7f?\\xe9j\\\\\\x82\\x92\\x00\\x91]\'') ###### ## IPv4 / AH - Tunnel ###### ###(075)=[passed] IPv4 / AH - Tunnel - HMAC-SHA1-96 alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(076)=[passed] IPv4 / AH - Tunnel - HMAC-SHA1-96 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xb9\\xab\\xbb\\xe51\\xa2\\xaa[\\x92\\x81\\xf2(', computed_icv=b'[\\x1a\\x16>E\\xf6\\xa1\\x0b\\x00\\xa9\\x96\\xfe'") ###(077)=[passed] IPv4 / AH - Tunnel - SHA2-256-128 alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(078)=[passed] IPv4 / AH - Tunnel - SHA2-256-128 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xa4.\\x01\\xfcBC\\xeb\\xf2\\xfc\\xecN>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-384-192', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(080)=[passed] IPv4 / AH - Tunnel - SHA2-384-192 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-384-192', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xcc\\x1e\\x87\\x06\\x00y\\x02\\xbeY\\xd0\\x9d:\\xb6\\xd7\\x9b\\xe2mE%\\x14\\xf7yW\\xee', computed_icv=b'-\\xad\\x99\\xe5\\x91\\xb9g\\x04\\x9b\\xcaW\\x1d\\x91/l\\xfc\\x99\\x94/>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-512-256', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(082)=[passed] IPv4 / AH - Tunnel - SHA2-512-256 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-512-256', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x9a\\xa8\\xf6=\\xf4\\xc6\\x03r&E\\xc3\\x00\\x89\\xf5\\x83\\x00{h\\xa07cw\\x0ckC\\x16\\xe5k\\xb3\\xb6\\x92v', computed_icv=b'\\x03!\\xc6\\x8e\\xf3\\x8a@~u\\x80\\xe4,\\xf3\\x06\\xa3\\x1ao\\xa7D\\x87^\\x9c\\xbe\\xda4\\x12\\x10\\x1e\\x0c\\xda\\x9f\\xa2'") ###(083)=[passed] IPv4 / AH - Tunnel - HMAC-MD5-96 alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(084)=[passed] IPv4 / AH - Tunnel - HMAC-MD5-96 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-MD5-96', auth_key=b'secret key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xf9\\xfc\\x98\\xae.\\xbbFY\\x93~\\xd7\\x9e', computed_icv=b'O\\xa7~\\xa4\\x0fb\\xeb\\xa8=\\xbcK\\x91'") ###(085)=[passed] IPv4 / AH - Tunnel - AES-CMAC-96 alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(086)=[passed] IPv4 / AH - Tunnel - AES-CMAC-96 - altered packet simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xdd\\x91\\xcb\\xd9U\\xcb\\xe2\\x18\\x1cA\\x1d|', computed_icv=b'\\x1dT\\x1b\\x85\\xbb\\xfb\\x0bAya\\xf5S'") ###(087)=[passed] IPv4 / AH - Tunnel - AES-CMAC-96 -- ESN alter mutable fields in the packet integrity verification should pass after decryption the original packet should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'), ... esn_en=True, esn=0x200) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.ttl = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(088)=[passed] IPv4 / AH - Tunnel - AES-CMAC-96 - altered packet -- ESN simulate the alteration of the packet before verification integrity verification should fail >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='AES-CMAC-96', auth_key=b'sixteenbytes key', ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'), ... esn_en=True, esn=0x200) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.dst = '4.4.4.4' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'Z\\xb1\\xff\\x07p\\xb1:\\xa4\\x0fcnZ\', computed_icv=b"\'\\xe9\\xe8\\xe9\\xb6\\xae\\xe0<:C\\x9b\\xd0"') ###### ## IPv4 / UDP / ESP - NAT-Traversal ###### ###(089)=[passed] IPv4 / UDP / ESP - NAT-Traversal - Tunnel after encryption packet should be encapsulated with the given ip tunnel header the encrypted packet should have an UDP layer after decryption the original packet payload should be unaltered >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None, ... tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'), ... nat_t_header=UDP(dport=5000)) >>> >>> e = sa.encrypt(p) >>> e >> >>> >>> assert isinstance(e, IP) >>> assert e.src == '11.11.11.11' and e.dst == '22.22.22.22' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_UDP >>> assert e.haslayer(UDP) >>> assert e[UDP].sport == 4500 >>> assert e[UDP].dport == 5000 >>> assert e[UDP].chksum == 0 >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(090)=[passed] IPv4 / UDP / ESP - NAT-Traversal - Transport the encrypted packet should have an UDP layer after decryption the original packet payload should be unaltered >>> import socket >>> >>> p = IP(src='1.1.1.1', dst='2.2.2.2') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IP(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None, ... nat_t_header=UDP(dport=5000)) >>> >>> e = sa.encrypt(p) >>> e >> >>> >>> assert isinstance(e, IP) >>> assert e.src == '1.1.1.1' and e.dst == '2.2.2.2' >>> assert e.chksum != p.chksum >>> assert e.proto == socket.IPPROTO_UDP >>> assert e.haslayer(UDP) >>> assert e[UDP].sport == 4500 >>> assert e[UDP].dport == 5000 >>> assert e[UDP].chksum == 0 >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(091)=[passed] IPv6 / ESP - NAT-Traversal - Transport the encrypted packet should have an UDP layer after decryption the original packet payload should be unaltered >>> import socket >>> >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=3333, dport=55) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None, ... nat_t_header=UDP(dport=5000)) >>> >>> e = sa.encrypt(p) >>> e >> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.chksum != p.chksum >>> assert e.nh == socket.IPPROTO_UDP >>> assert e.haslayer(UDP) >>> assert e[UDP].sport == 4500 >>> assert e[UDP].dport == 5000 >>> assert e[UDP].chksum == 0 >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> >>> d = sa.decrypt(e) >>> d >> >>> >>> assert d[TCP] == p[TCP] >>> assert not d.haslayer(UDP) >>> assert d[Raw] == p[Raw] ###### ## IPv6 / ESP ###### ###(092)=[passed] IPv6 / ESP - Transport - NULL - NULL after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(093)=[passed] IPv6 / ESP - Transport - AES-CBC - NULL after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(094)=[passed] IPv6 / ESP - Transport - NULL - HMAC-SHA1-96 integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d[TCP] == p[TCP] ###(095)=[passed] IPv6 / ESP - Transport - NULL - HMAC-SHA1-96 - altered packet simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'\\x86\\xa5\\xc9)\\x87\\x89\\xd9\\xd3Xg$\\x87\', computed_icv=b\'"%\\xfa3=\\xec\\xff\\x11\\x98\\x10\\nG\'') ###(096)=[passed] IPv6 / ESP - Transport - AES-CBC - HMAC-SHA1-96 after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(097)=[passed] IPv6 / ESP - Transport - AES-CBC - HMAC-SHA1-96 - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'(]\\x15\\x0c\\xd4\\x0b\\xf5V\\x08\\x04^\\x93', computed_icv=b'\\xb7\\xa1\\xd1\\xff\\x94\\x14\\x8d\\xf7\\x85\\xd9\\xa6]'") ###(098)=[passed] IPv6 / ESP - Transport - AES-GCM - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(099)=[passed] IPv6 / ESP - Transport - AES-GCM - NULL - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(100)=[passed] IPv6 / ESP - Transport - AES-CCM - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(101)=[passed] IPv6 / ESP - Transport - AES-CCM - NULL - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(102)=[passed] IPv6 / ESP - Tunnel - NULL - NULL after encryption packet should be encapsulated with the given ip tunnel header after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(103)=[passed] IPv6 / ESP - Tunnel - AES-CBC - NULL after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(104)=[passed] IPv6 / ESP - Tunnel - NULL - HMAC-SHA1-96 after encryption packet should be encapsulated with the given ip tunnel header integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> d = sa.decrypt(e) >>> >>> assert d[TCP] == p[TCP] ###(105)=[passed] IPv6 / ESP - Tunnel - NULL - HMAC-SHA1-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='NULL', crypt_key=None, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' in e[ESP].data >>> >>> e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21') >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'=\\xe0&\\xe9\\r\\xfb\\xdb\\x91\\x81R\\xfe\\x91\', computed_icv=b\'\\x10\\xa3\\xb4W"\\x84\\xea\\x9e1*\\xda\\xf5\'') ###(106)=[passed] IPv6 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(107)=[passed] IPv6 / ESP - Tunnel - AES-CBC - HMAC-SHA1-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CBC', crypt_key=b'sixteenbytes key', ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'o\\xe5/\\xde\\xb5\\xc6k%vP\\x83\\xc9', computed_icv=b'>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(109)=[passed] IPv6 / ESP - Tunnel - AES-GCM - NULL - altered packet after encryption packet should be encapsulated with the given ip tunnel header after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-GCM', crypt_key=b'16bytekey+4bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###(110)=[passed] IPv6 / ESP - Tunnel - AES-CCM - NULL after encryption the original packet payload should NOT be readable after decryption original packet should be preserved >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(111)=[passed] IPv6 / ESP - Tunnel - AES-CCM - NULL - altered packet after encryption the original packet payload should NOT be readable simulate the alteration of the packet before decryption integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(ESP, spi=0x222, ... crypt_algo='AES-CCM', crypt_key=b'16bytekey3bytenonce', ... auth_algo='NULL', auth_key=None, ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e > >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_ESP >>> assert e.haslayer(ESP) >>> assert not e.haslayer(TCP) >>> assert e[ESP].spi == sa.spi >>> assert b'testdata' not in e[ESP].data >>> >>> e[ESP].seq += 1 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError(InvalidTag()) ###### ## IPv6 / AH ###### ###(112)=[passed] IPv6 / AH - Transport - HMAC-SHA1-96 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.hlim = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(113)=[passed] IPv6 / AH - Transport - HMAC-SHA1-96 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\x8e\\xed\\x8c8\\x05k\\xaa\\xb6\\xe4Z\\xfd\\x93', computed_icv=b'\\xdd;\\xfeR\\xcb\\xb0\\x9d+\\x0c\\xb3h\\xf6'") ###(114)=[passed] IPv6 / AH - Transport - SHA2-256-128 the encrypted packet should have an AH layer alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.hlim = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d[TCP] == p[TCP] ###(115)=[passed] IPv6 / AH - Transport - SHA2-256-128 - altered packet the encrypted packet should have an AH layer simulate the alteration of the packet before verification integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e >>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e[TCP].dport = 46 >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'j\\x18\\xc4\\xc3<\\x93\\x05\\xf3.D7\\x05\\x06\\xea3\\xfe', computed_icv=b'\\x1c\\x06\\xfdM\\xbc\\x01\\xcf\\x80:bb$\\x17\\x93J\\xfe'") ###(116)=[passed] IPv6 / AH - Tunnel - HMAC-SHA1-96 after encryption packet should be encapsulated with the given ip tunnel header alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.hlim = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(117)=[passed] IPv6 / AH - Tunnel - HMAC-SHA1-96 - altered packet after encryption packet should be encapsulated with the given ip tunnel header simulate the alteration of the packet before verification integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.src = 'cc::ee' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError('pkt_icv=b\'x*\\\\;\\xec\\xe5`\\xa8\\xf0\\x99o\\xd5\', computed_icv=b\'\\xad\\x01\\xe6Nz\\xfb\\x07\\xa8\\xf5\\xa2"~\'') ###(118)=[passed] IPv6 / AH - Tunnel - SHA2-256-128 after encryption packet should be encapsulated with the given ip tunnel header alter mutable fields in the packet integrity verification should pass after decryption the original packet payload should be unaltered >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.hlim = 2 >>> >>> d = sa.decrypt(e) >>> d >>> >>> >>> assert d == p ###(119)=[passed] IPv6 / AH - Tunnel - SHA2-256-128 - altered packet after encryption packet should be encapsulated with the given ip tunnel header simulate the alteration of the packet before verification integrity verification should fail >>> p = IPv6(src='11::22', dst='22::11') >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p >>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='SHA2-256-128', auth_key=b'secret key', ... tunnel_header=IPv6(src='aa::bb', dst='bb::aa')) >>> >>> e = sa.encrypt(p) >>> e >>>>> >>> >>> assert isinstance(e, IPv6) >>> assert e.src == 'aa::bb' and e.dst == 'bb::aa' >>> assert e.nh == socket.IPPROTO_AH >>> assert e.haslayer(AH) >>> assert e.haslayer(TCP) >>> assert e[AH].spi == sa.spi >>> >>> e.src = 'cc::ee' >>> >>> try: ... d = sa.decrypt(e) ... assert False ... except IPSecIntegrityError as err: ... err ... IPSecIntegrityError("pkt_icv=b'\\xe3\\xdfI5\\xb3W\\x82`\\x00\\x8d\\x08\\x1an\\xdb\\x1eP', computed_icv=b'\\xd4\\x83\\xaa\\x0e\\x18\\xbe\\xa83\\xda\\xae4b\\xd5N\\xe3\\x98'") ###### ## IPv6 + Extensions / AH ###### ###(120)=[passed] IPv6 + Extensions / AH - Transport AH header should be inserted between the routing header and the dest options header >>> p = IPv6(src='11::22', dst='22::11') >>> p /= IPv6ExtHdrHopByHop() >>> p /= IPv6ExtHdrDestOpt() >>> p /= IPv6ExtHdrRouting() >>> p /= IPv6ExtHdrDestOpt() >>> p /= IPv6ExtHdrFragment() >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p ] |] |] |>>>>>>>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e ] |] |] |>>>>>>>>> >>> >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert isinstance(e[AH].underlayer, IPv6ExtHdrRouting) >>> assert isinstance(e[AH].payload, IPv6ExtHdrDestOpt) ###(121)=[passed] IPv6 + Routing Header / AH - Transport AH header should be inserted between the routing header and TCP reorder the routing header as the receiver will get it integrity verification should pass >>> p = IPv6(src='11::22', dst='22::11') >>> p /= IPv6ExtHdrHopByHop() >>> p /= IPv6ExtHdrRouting(addresses=['aa::bb', 'cc::dd', 'ee::ff']) >>> p /= TCP(sport=45012, dport=80) >>> p /= Raw('testdata') >>> p = IPv6(raw(p)) >>> p ] |>>>>> >>> >>> sa = SecurityAssociation(AH, spi=0x222, ... auth_algo='HMAC-SHA1-96', auth_key=b'secret key') >>> >>> e = sa.encrypt(p) >>> e ] |>>>>>> >>> >>> assert e.src == '11::22' and e.dst == '22::11' >>> assert isinstance(e[AH].underlayer, IPv6ExtHdrRouting) >>> assert isinstance(e[AH].payload, TCP) >>> >>> final = e[IPv6ExtHdrRouting].addresses.pop() >>> e[IPv6ExtHdrRouting].addresses.insert(0, e.dst) >>> e.dst = final >>> e[IPv6ExtHdrRouting].segleft = 0 >>> >>> d = sa.decrypt(e) >>> d ] |>>>>> Scapy ISAKMP layer tests ━ Run at 04:11:50 from [test/scapy/layers/isakmp.uts] by UTscapy in 0.08781051635742188 └ Passed=8 └ Failed=0 ###### ## ISAKMP tests ###### ###(000)=[passed] ISAKMP - Phase 1 - Aggressive Security Association dissection >>> pkt = UDP(b'\x01\xf4\x01\xf4\x02\xf0\x01\xca/\xa8\xd0\xc9\x15zT\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x04\x00\x00\x00\x00\x00\x00\x00\x02\xe8\x04\x00\x008\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00,\x01\x01\x00\x01\x00\x00\x00$\x01\x01\x00\x00\x80\x01\x00\x07\x80\x0e\x00\x80\x80\x02\x00\x01\x80\x04\x00\x10\x80\x03\x00\x01\x80\x0b\x00\x01\x80\x0c\x00\x84\n\x00\x02\x04n[}p2s\xf3\x91H=\xea\xafhV\xb1\xec\x01\xf0\x1b\xdfG[\x1c\xbd\x07\xa6\xb7\xe9\xc6P2i\\\xbd\xdf\xefI\xe1\\\x04\xd8L\xdd\xbb7\xc8,\xd0G\x12x\x82t\x9f\x8c\xee\xcd\xad\x16P\x7f%\xc6|G\xf2\x8f\x14\xa7\xa0w\x1ax\x87\x8b\x80\xaa\xf2\x0b\x82\xb5k\xcc\xcb\xdb5\xc0j\xc0\xb1\xd2\x0e\xb3\x05\xd3\x9d\x0bY\xb4}[~\n,W;]\xe0|\x08\xed\xe6\xb4\x82QoDE\xa7\xd5\x91\x92j@\xa1vb\xdd\xc3\xc8%\x81\xaf\xcd\xc2$V\xd90d\xc4\x06$\xd1\xce\x92\xe0:\x0fQ\xa2\xdb\xd8\x11\xaf\xf5\xeb\xde\xbcih\xc1n\x80\xe4\x8a\t\xa2\xcd{\x7f\xa3\t)\x9b\xbc\xe2v3\xa6>9\x87D"\x1a9\xad\x9b\x16q\xbe\x02\xb0\x1f/\xe6\xd7\x81\xeb\x98j\x91\xdf\xabf\xa9M+1\xdc\xc5\xc5\xd71\xc7\x11\xc5\xdcU\xe9L\x10\x9f\x00\xc2\x97S\x90\'\xa8\xd6dNy})F\x99Z\x82\xa7\x1a\t\x03\xa4\xe5\xb5M\x9b$\x9a\x10fX\x10\xa6\xc6\xdf#\xe1\xc7E2\xdf\xc2\x1d}\xd7\x90820b\xcd`\xc7\x1f\xca\xde\xa0\xd7\xb6\x87\xe4\xad\xc4-\xe9\xce\xd9Rx\xc8\xab\xeaI+;\x07\x07-\xaa\xb4\xa2\xd1\xd7-\xe0\x85\x93\xbe\x1dqw\xff\x17\x97\xecku\xf3H%\x9e\x95,W\xa7\xbaU\xc7*\xcd!\xdb\x83\x8dNv~\x1cq\xc8~S\xd1"\xbf\x03(\xac\xf5\xec\xeb+*\xfd:\x9d.h\xcb\x15;\xf1_E\x02(:\xab\xa0}d\xb2\xce\x1d\xff4\xc7\x15{\x80Iy.\t7\x96\x95\x96\xda\x1f\xcf\xab\x03P=\xd0\t\x05!\x904\xaf\xdb\xfa\xcc6k"\xffB##\x8a\xacWx\xf3J\xe6[\xe0\x80\x0b\xc8\x9a\x9a\x87gS\xac\xd6<\r\x1f\x10%\x14\x90}\x94m\xd78$\x95\xf3>>i\x15\x1f\x9ax\x00\xbc\x14\xcf\xd0\xbe;XLl\xfa\xa1\x8f\x8c\xa6\xc5\x03\xcd\xc38\xf6\xb3V\xf0|5&\xf7\xb3\x99\x8f\x81\x9a\x93G\xf3\xf4S\xddl\x08-\xec\xa2\x87\xcf\x14x\xdc\xef\x0326\x82J\x05\x00\x00$\xb0G9\xbdI[@\xedT\x81\xa0\xe5\\]\xd2\x03}+\x1c\xfd\x1b\x88\xed\xa5\xb0y\xfd\x8d&\xe3\x08\x98\r\x00\x00\x0c\x01\x00\x00\x00\x02\x02\x02\x02\r\x00\x00\x0c\t\x00&\x89\xdf\xd6\xb7\x12\r\x00\x00\x14\xaf\xca\xd7\x13h\xa1\xf1\xc9k\x86\x96\xfcwW\x01\x00\r\x00\x00\x18@H\xb7\xd5n\xbc\xe8\x85%\xe7\xde\x7f\x00\xd6\xc2\xd3\x80\x00\x00\x00\r\x00\x00\x14J\x13\x1c\x81\x07\x03XE\\W(\xf2\x0e\x95E/\x00\x00\x00\x14\x90\xcb\x80\x91>\xbbin\x08c\x81\xb5\xecB{\x1f') >>> >>> assert pkt.prop.proto == 1 >>> assert pkt.prop.trans.transforms == [ ... ('Encryption', 'AES-CBC'), ... ('KeyLength', 128), ... ('Hash', 'MD5'), ... ('GroupDesc', '4096MODPgr'), ... ('Authentication', 'PSK'), ... ('LifeType', 'Seconds'), ... ('LifeDuration', 132) ... ] >>> assert ISAKMP_payload_KE in pkt >>> assert pkt[ISAKMP_payload_KE].length == 516 >>> assert len(pkt[ISAKMP_payload_KE].load) == 512 /builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/packet.py:446: DeprecationWarning: load has been deprecated in favor of ke since 2.6.2 ! warnings.warn( >>> assert ISAKMP_payload_ID in pkt >>> assert pkt[ISAKMP_payload_ID].IdentData == "2.2.2.2" >>> assert pkt.getlayer(ISAKMP_payload_VendorID, 5) ###(001)=[passed] ISAKMP - Over NAT-Transversal - dissection >>> pkt = UDP(b'\x11\x94\x11\x94\x01H4\xea\x00\x00\x00\x00/\xa8\xd0\xc9\x15zT\xc0\x95Y\x06\xaf\x97\x1fd\x8d\x08\x10 \x01\xa8!\x97U\x00\x00\x01<\xc8\xba\x8434r\xf8\xc5J\x84W:v4\x1e\x05\x10\xcc.\xd8\xb6\tC\x01~\xad\xd7l\x9c^\x06\tc\xadL\xc4\xc6\xd0P\x98\xb1~\x05\x07\xa0\x0b2&\x05\xa7\xa3\x8c*: \xbe\xa4F\x9d\xa5\xa9\xf7T\x88.\xa9\xe1K\xa29N3%\x19\x80\xd8!\x12^)\x1cJt\xfb\xe1\xca\xab\xb5\xf2\x01\xe83T\x0f\xd4\xfd\xb6\xc4\xe4z\x03`\xd0t\xbc3\xa9\x9b\x8d\xac\x89\x7f\xad\xc2|\x82\x8a\xe4`d\xe6I\xfcVS\x17c7\xce>> >>> assert NON_ESP in pkt >>> assert pkt[ISAKMP].exch_type == 32 >>> assert pkt[ISAKMP].version == 0x10 >>> assert pkt[ISAKMP].id == 2820773717 >>> assert pkt[ISAKMP].length == 316 >>> assert len(pkt[ISAKMP]) == 316 >>> assert len(pkt[ISAKMP].load) == 288 ###(002)=[passed] ISAKMP - Phase 2 - Security Association dissection >>> pkt = ISAKMP_payload_Hash(b'\x01\x00\x00\x14\xee\x80u\x92\xdbp\xd7\xbc\xa1f\x07\xcb@\xecg\x8b\n\x00\x004\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x04\x01\xcc=\xae\x0f\x00\x00\x00\x1c\x01\x03\x00\x00\x80\x05\x00\x02\x80\x03\x00\x02\x80\x04\x00\x01\x80\x01\x00\x01\x80\x02\x00!\x04\x00\x00$\t\x17\x8c\x89\xfb\x9aZ&Q\x16\xe3\x89&\xc4\x12|\x13\xe7\x99\x9e\x00f\xe9\xa8\xc7\xd0\xd4\x00>\x13\xd0\x1b\x05\x00\x00\x84\x80\x9cNz\x14\x93\xe7\xb1\x03\x97y\x16\x1f/\x08\x98uE}\xc0\xc3\xe3\x18c\x80w\x13\xad\x96\xe2N*+d%\x9d7\xff\xf1\xd4\xb21\xca\x19E\x98\x96Xil\xf0\x7fN\x80\xf8qc\x10\x96M}\xa5_\x06\xf4"A1\xd5%{\xab\x1ePc\xfa\xa0n\x1c\xd3R\xaeT\x87d\x86\xdf,?\x9e\x88\xb5l\xfaI\xc2v\xcb\xf6\xae1\\i\x07\xf5\xac]@9\xd3\xd7\x8a\xc0\xda\xde\xb2\x97\x8b\x7f\xe8\xfa\xa5V\x80\x0c\xf0o\x0b\x05\x00\x00\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert ISAKMP_payload_SA in pkt >>> assert pkt[ISAKMP_payload_SA].prop.proto == 3 >>> assert pkt[ISAKMP_payload_SA].prop.trans.transforms == [ ... ('AuthenticationAlgorithm', 'HMAC-SHA'), ... ('GroupDesc', '1024MODPgr'), ... ('EncapsulationMode', 'Tunnel'), ... ('LifeType', 'seconds'), ... ('LifeDuration', 33) ... ] >>> assert ISAKMP_payload_ID in pkt ###(003)=[passed] ISAKMP_payload_Transform >>> p=IP(src='192.168.8.14',dst='10.0.0.1')/UDP()/ISAKMP()/ISAKMP_payload_SA(doi=0, prop=ISAKMP_payload_Proposal(trans=ISAKMP_payload_Transform(transforms=[('Encryption', 'AES-CBC'), ('Hash', 'MD5'), ('Authentication', 'PSK'), ('GroupDesc', '1536MODPgr'), ('KeyLength', 256), ('LifeType', 'Seconds'), ('LifeDuration', 86400)])/ISAKMP_payload_Transform(res2=12345,transforms=[('Encryption', '3DES-CBC'), ('Hash', 'SHA'), ('Authentication', 'PSK'), ('GroupDesc', '1024MODPgr'), ('LifeType', 'Seconds'), ('LifeDuration', 86400)]))) >>> >>> r = p[ISAKMP_payload_Transform:2] >>> r >>> r.res2 == 12345 True ###(004)=[passed] ISAKMP_payload_Transform build >>> hexdump(p) 0000 45 00 00 96 00 01 00 00 40 11 A7 9F C0 A8 08 0E E.......@....... 0010 0A 00 00 01 01 F4 01 F4 00 82 BF 1F 00 00 00 00 ................ 0020 00 00 00 00 00 00 00 00 00 00 00 00 01 10 00 00 ................ 0030 00 00 00 00 00 00 00 7A 00 00 00 5E 00 00 00 00 .......z...^.... 0040 00 00 00 01 00 00 00 52 01 01 00 00 03 00 00 27 .......R.......' 0050 00 01 00 00 80 01 00 07 80 02 00 01 80 03 00 01 ................ 0060 80 04 00 05 80 0E 01 00 80 0B 00 01 00 0C 00 03 ................ 0070 01 51 80 00 00 00 23 00 01 30 39 80 01 00 05 80 .Q....#..09..... 0080 02 00 02 80 03 00 01 80 04 00 02 80 0B 00 01 00 ................ 0090 0C 00 03 01 51 80 ....Q. >>> assert raw(p) == b"E\x00\x00\x96\x00\x01\x00\x00@\x11\xa7\x9f\xc0\xa8\x08\x0e\n\x00\x00\x01\x01\xf4\x01\xf4\x00\x82\xbf\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00z\x00\x00\x00^\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00R\x01\x01\x00\x00\x03\x00\x00'\x00\x01\x00\x00\x80\x01\x00\x07\x80\x02\x00\x01\x80\x03\x00\x01\x80\x04\x00\x05\x80\x0e\x01\x00\x80\x0b\x00\x01\x00\x0c\x00\x03\x01Q\x80\x00\x00\x00#\x00\x0109\x80\x01\x00\x05\x80\x02\x00\x02\x80\x03\x00\x01\x80\x04\x00\x02\x80\x0b\x00\x01\x00\x0c\x00\x03\x01Q\x80" ###(005)=[passed] ISAKMP_payload_Transform dissection >>> q=IP(raw(p)) >>> q.show() ###[ IP ]### version = 4 ihl = 5 tos = 0x0 len = 150 id = 1 flags = frag = 0 ttl = 64 proto = udp chksum = 0xa79f src = 192.168.8.14 dst = 10.0.0.1 \options \ ###[ UDP ]### sport = isakmp dport = isakmp len = 130 chksum = 0xbf1f ###[ ISAKMP ]### init_cookie= 0000000000000000 resp_cookie= 0000000000000000 next_payload= SA version = 0x10 exch_type = None flags = id = 0 length = 122 ###[ ISAKMP SA ]### next_payload= None res = 0 length = 94 doi = ISAKMP situation = identity \prop \ |###[ IKE proposal ]### | next_payload= None | res = 0 | length = 82 | proposal = 1 | proto = ISAKMP | SPIsize = 0 | trans_nb = 0 | SPI = b'' | \trans \ | |###[ IKE Transform ]### | | next_payload= Transform | | res = 0 | | length = 39 | | transform_count= 0 | | transform_id= KEY_IKE | | res2 = 0 | | transforms= [('Encryption', 'AES-CBC'), ('Hash', 'MD5'), ('Authentication', 'PSK'), ('GroupDesc', '1536MODPgr'), ('KeyLength', 256), ('LifeType', 'Seconds'), ('LifeDuration', 86400)] | |###[ IKE Transform ]### | | next_payload= None | | res = 0 | | length = 35 | | transform_count= 0 | | transform_id= KEY_IKE | | res2 = 12345 | | transforms= [('Encryption', '3DES-CBC'), ('Hash', 'SHA'), ('Authentication', 'PSK'), ('GroupDesc', '1024MODPgr'), ('LifeType', 'Seconds'), ('LifeDuration', 86400)] >>> r = q[ISAKMP_payload_Transform:2] >>> r >>> r.res2 == 12345 True ###(006)=[passed] ISAKMP_payload_Notify >>> pkt = ISAKMP()/ISAKMP_payload_Notify( ... notify_msg_type="INVALID-FLAGS", ... notify_data="Erreur", ... )/ISAKMP_payload_Notify() >>> >>> assert bytes(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x0b\x00\x00\x12\x00\x00\x00\x00\x01\x00\x00\x08Erreur\x00\x00\x00\x0c\x00\x00\x00\x00\x01\x00\x00\x00' >>> >>> pkt = ISAKMP(bytes(pkt)) >>> assert pkt[ISAKMP_payload_Notify].notify_data == b"Erreur" >>> assert not pkt[ISAKMP_payload_Notify:2].next_payload ###(007)=[passed] ISAKMP_payload_delete >>> pkt = ISAKMP()/ISAKMP_payload_Delete() >>> pkt.SPIs = [b"A" * 16, b"B" * 16] >>> assert raw(pkt) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00,\x00\x00\x00\x00\x01\x10\x00\x02AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB' >>> pkt = ISAKMP(raw(pkt)) >>> assert pkt.SPIcount == 2 >>> assert pkt.SPIsize == 16 >>> assert pkt.length == 72 >>> assert pkt[ISAKMP_payload_Delete].length == 44 Same test ccache as kerberos.rst ━ Run at 04:12:28 from [test/scapy/layers/kerberos.uts] by UTscapy in 38.67697882652283 └ Passed=69 └ Failed=0 ###### ## Kerberos dissection tests ###### ###(000)=[passed] Parse AS-REQ >>> pkt = IP(b'E\x00\x00\xd9\xff\xff@\x00\xff\x11\x00\x00\x7f\x00\x00\x15\x00\x00\x00\x00;o\x00X\x00\xc5\x00\x00j\x81\xba0\x81\xb7\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\n\xa3\x0e0\x0c0\n\xa1\x04\x02\x02\x00\x95\xa2\x02\x04\x00\xa4\x81\x9a0\x81\x97\xa0\x07\x03\x05\x00\x00\x01\x00\x10\xa1\x150\x13\xa0\x03\x02\x01\x01\xa1\x0c0\n\x1b\x08LOCALDC$\xa2\x13\x1b\x11SAMBA.EXAMPLE.COM\xa3&0$\xa0\x03\x02\x01\x02\xa1\x1d0\x1b\x1b\x06krbtgt\x1b\x11SAMBA.EXAMPLE.COM\xa5\x11\x18\x0f20150130151703Z\xa7\x06\x02\x04\x14\xe1\x18\xa7\xa8\x1d0\x1b\x02\x01\x12\x02\x01\x11\x02\x01\x10\x02\x01\x17\x02\x01\x19\x02\x01\x1a\x02\x01\x01\x02\x01\x03\x02\x01\x02') >>> >>> assert isinstance(pkt.root, KRB_AS_REQ) >>> assert pkt.root.reqBody.cname.nameString[0] == b'LOCALDC$' >>> assert pkt.root.reqBody.realm == b'SAMBA.EXAMPLE.COM' >>> assert pkt.root.reqBody.sname.nameString[0] == b"krbtgt" >>> assert pkt.root.reqBody.nonce == 0x14e118a7 >>> assert pkt.root.reqBody.etype == [0x12, 0x11, 0x10, 0x17, 0x19, 0x1a, 0x1, 0x3, 0x2] ###(001)=[passed] Parse KRB-ERROR >>> pkt = IP(b'E\x00\x02c\xff\xff@\x00\xff\x11\x00\x00\x7f\x00\x00\x15\x7f\x00\x00\x15\x00X;o\x02O\x00\x00~\x82\x02C0\x82\x02?\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x1e\xa2\x11\x18\x0f19810206083031Z\xa4\x11\x18\x0f20150129151703Z\xa5\x05\x02\x03\t\xae\xc0\xa6\x03\x02\x01\x19\xa7\x13\x1b\x11SAMBA.EXAMPLE.COM\xa8\x150\x13\xa0\x03\x02\x01\x01\xa1\x0c0\n\x1b\x08LOCALDC$\xa9\x13\x1b\x11SAMBA.EXAMPLE.COM\xaa&0$\xa0\x03\x02\x01\x02\xa1\x1d0\x1b\x1b\x06krbtgt\x1b\x11SAMBA.EXAMPLE.COM\xab\x10\x1b\x0eNEEDED_PREAUTH\xac\x82\x01\x84\x04\x82\x01\x800\x82\x01|0\n\xa1\x04\x02\x02\x00\x88\xa2\x02\x04\x000\x82\x01R\xa1\x03\x02\x01\x13\xa2\x82\x01I\x04\x82\x01E0\x82\x01A07\xa0\x03\x02\x01\x12\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com07\xa0\x03\x02\x01\x11\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com07\xa0\x03\x02\x01\x03\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com07\xa0\x03\x02\x01\x01\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com07\xa0\x03\x02\x01\x01\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com0"\xa0\x03\x02\x01\x17\xa1\x1b\x1b\x19SAMBA.EXAMPLE.COMLOCALDC$0\t\xa1\x03\x02\x01\x02\xa2\x02\x04\x000\r\xa1\x04\x02\x02\x00\x85\xa2\x05\x04\x03MIT') >>> >>> assert isinstance(pkt.root, KRB_ERROR) >>> assert pkt.root.cname.nameString[0] == b"LOCALDC$" >>> assert pkt.root.realm == b"SAMBA.EXAMPLE.COM" >>> assert pkt.root.eText == b"NEEDED_PREAUTH" >>> assert len(pkt.root.eData.seq) == 4 >>> assert pkt.root.eData.seq[0].padataType == 0x88 >>> assert pkt.root.eData.seq[1].padataType == 0x13 >>> assert pkt.root.eData.seq[3].padataType == 0x85 >>> assert pkt.root.eData.seq[3].padataValue == b"MIT" >>> >>> etype_info2 = pkt.root.eData.seq[1] >>> assert etype_info2.padataValue.seq[0].salt == b'SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com' ###(002)=[passed] Parse AS-REP >>> pkt = IP(b'E\x00\x05\x95\xff\xff@\x00\xff\x11\x00\x00\x7f\x00\x00\x15\x7f\x00\x00\x15\x00X;p\x05\x81\x00\x00k\x82\x05u0\x82\x05q\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0b\xa2H0F0D\xa1\x03\x02\x01\x13\xa2=\x04;0907\xa0\x03\x02\x01\x12\xa10\x1b.SAMBA.EXAMPLE.COMhostlocaldc.samba.example.com\xa3\x13\x1b\x11SAMBA.EXAMPLE.COM\xa4\x150\x13\xa0\x03\x02\x01\x00\xa1\x0c0\n\x1b\x08LOCALDC$\xa5\x82\x03\xafa\x82\x03\xab0\x82\x03\xa7\xa0\x03\x02\x01\x05\xa1\x13\x1b\x11SAMBA.EXAMPLE.COM\xa2&0$\xa0\x03\x02\x01\x02\xa1\x1d0\x1b\x1b\x06krbtgt\x1b\x11SAMBA.EXAMPLE.COM\xa3\x82\x03a0\x82\x03]\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x01\xa2\x82\x03O\x04\x82\x03K\t\x05\xd7\x91\xdc\x14\xaa\xe2\xfb\xcc\x85\x1f*?\xbau\xbc0\x0f\x80\x8bc\x87\xe5z\x1a4i\xa3\x9bL[-\xb1\xb7\xaa\xd9-\x01\xc2\xf2\xdfs\x17<\xf3&\x99\'1\xfa\x80\xd9\x02\xae\xf5\xb3S\x14\xc2L\xc3e\xc9\x94\x03dH\xe2\xa9\xfd\x9a\xc6\xffs\x10\xf3er\xbd\xa0\xfep[~\x82+\xde0\x91%tc\xdcx\xfe\xd0\xd8\xc4\xb6u\x91\xe7\xe1C\x00y\xb8\x15\xd9\x91j\x0f\xe7\xa0\xe24m\xd94\xe5.I\xc51\x8f\x1do\t\xe9\x98\xb8\xad\xa6\x92\xf3\x15f\xc98o\x92\x0ch\x08\\\x8f\xab\xfau\xaf\x19v\xcc\xcb!v\xb5v2\xeb(h\x1c+o\xea\xc3\x0b\xcf\x81\xc8\x89\xe8i\xdd?\xd1\xaa\x0f3\xc9\xe9\xf2\xd7\x8a\x93`\x02\x9d\xb2 LV\xda\x0f&>,~\xb3\xecK\xe76v\x9a\xc3\x88\xe3\rj\\/\xd6\x9e_X\x14z\xc2w\x1d.|\xbf\x18\x01\xc8`].\xd2\xc2\x1e\xd0\x89\x8f\xd2\x18\xb9U\xaf\x98\xe9V\xe2\x19\xa1\xbb\xc45\xd9\x16\x08c\xaf$\xef\xf2\xf4S\xeco\xa1\xa1\xe5)\x99\xc9b#[\xd1:O\xbej\xb91\xb3i\xbepb\x06\xd8\x14\xc3\xdf\xbb\x18\xbf]\xf1\x82+\x18*\x85D\xecy\x0eu_\xe2\xfa\xbcd\x82A>\x88p\xa2\xc1\xf6\x9c\x89Qj\xfdM\x99\xd1\x84r\x0fp\x06$\xab\xc2\xb5\xae4\xe8\xf1\xbb}\x98\xedWX\xe2*uB\x93\x11\x1c\xc7f\x1c\xce\xc9\xff\t\x88\x94\xddN\xcf\xa68O\x0c^I\x9ew\x81\xba\xc3\xbc\xa8\x07\x8b\xd4\xdf\x7f(\xc2\x15gX\xd0oN\x00u\x1aU@\xbd\xb8\xa9)Ur\x94\xc1\xcf\xa1\xd8k\xc1F\x19\xd3rR\xaa\x93\xe2\x06D#\x12\x07M\xe3\x15\xd6\xd0\xb3\xa6\x89\x0c\xfeLO6\xe6\xf0w\x1a\x80\x0f\xffO\xf2N\xf4(\n\xdb-\x96`\xa4\xb7\xd3g\x16\xbfY\xff\xad\x95\x19\xd9\x9cS\xaa\xe3\x06W\xf3\xc2\x18it5\xda\x1c\x99\x8a\xaf\xfa"MT\xc7$#j,P\x9b\xf9\r\xbbA\xd0w\x15.\xc3PC\xc4\xe7vL/\xca0h7\x1c4z\x8bS@\x0ej\xb4q\xde\x19\xd8so\x9c\xea\x8f^w7\x1e\x92\x1c\xcc\xe2\xa60\xe8\xce}\xee\xb1\x87F!n\x80\xe4l"\xed\xc2fI \xb9\t\x14\t\x8d\xect\xa4\xb48\xe0\xfd\xf3\xe5\x8es\xd2\x08;\x9f\xb2\xb8q\x1bX\xadd\xbb\x07z\x16\tZ\xb0z1+h\x0e\xf7\x98w\x0bX\xf0W\t\xa6\x86.\x1e\x9c\xc2\x9d\xac+\xca\xdf&\xa9\xf3\xcb\xa7\xca\x1fn\xe8\x8a]h\xf6\xeb\xe9\xd4\xa0\x16\x1b\xb4\x8d\xc7\xaf\xe3\xf0.\x85\x1e\xc2\xa5\xf2DhhgQ\xe0\xb8y\xb8\xbd\x98\xf8\xa0\rW\x93/\x07>0\xf5\x92Y\x15Y\x0bD\xdb\xd6\xac#\xd8z\xbdeY\x87\xf2\x97\xfdZ\x0c\x1d\xbc\xefXONv\xc9\xfdp\xdd^\x16\x83\xc3\xeb\x9e\x96+\xe8\xed\x0c<$\x83A\xeb\xc6e\x94\x0c\x11\x19\xb4\x99\xcd\x17\xeb\xcb.\x0b}\x01i\x88\x03R\xde\x1a\xea\x03\x10\xa9Z\x8e\xf7\x87\r\xa6\x08@\xf7\x96\xc8\xa5g\xde\x8dE\xf8\xb0\xe8\xe6T\x80=\x0cm\xe0z\xa5\x03\xa2X\xed\'\x17\x001O\xee\xfb\x87\xbe\xf7\xbbS\xc1p\xaeZ\x17\x92}\xc2\x07\x01\x81\xaew\xd9\xc5\x9c\xe5k\x8d+\x13\xd2\x00Q\xd4\xe5M\x9d\x06\xc7)\xac\x06\xb2+\xd1\x83\xcb\xfe\xb9\xf9\x0bbRN\x04\xe7\xd8\xa0\xf9\xe3\xc3m\x18\xc4\x108\xfa\xa6\x82\x01:0\x82\x016\xa0\x03\x02\x01\x12\xa2\x82\x01-\x04\x82\x01)/pDi\x13\xee\x0b\x8ehN2\x01P\x19|\xda\x1a\xde\xec\xde\rt\xcbe7\x00-sG&\x8b\xfc\xa4\x92~~[,\xd5\rAj\xd6[\xbe\xeeB\xf8X\\x\xa6$Z\x83\xf6\x1bq\xc5\x8fm\\\x94\xd7l\xc5\x89#\xcb\xcd\xaf\xff\x15\x1b\x8f;7\xb0\xc8u\x19\xb1\xd0\xb0\x93\xa7z\x9cz\x14\x0b\x86q\x01\xb8<\xa7\xa4\xceb\x1f\x88\x14\xe3S0\xe3]\xa5\x9b\xa0\x0e\x97#\x87\x9a\xe0\x90a\xdfj.\x1e6x\x87GV\xc0/\xa4\xab}\xdbS\xd5\xff>> >>> assert isinstance(pkt.root, KRB_AS_REP) >>> assert pkt.root.padata[0].padataType == 0x13 >>> assert pkt.root.crealm == b"SAMBA.EXAMPLE.COM" >>> assert pkt.root.cname.nameString[0] == b"LOCALDC$" >>> assert isinstance(pkt.root.ticket, KRB_Ticket) >>> assert pkt.root.ticket.sname.nameType == 0x2 >>> assert pkt.root.ticket.sname.nameString == [b"krbtgt", b"SAMBA.EXAMPLE.COM"] >>> assert len(pkt.root.ticket.encPart.cipher.val) == 843 >>> assert len(pkt.root.encPart.cipher.val) == 297 ###(003)=[passed] Parse TGS-REQ >>> pkt = IP(b'E\x00\x06V\xff\xff@\x00\xff\x11\x00\x00\x7f\x00\x00\x1d\x00\x00\x00\x00;\x97\x00X\x06B\x00\x00l\x82\x0660\x82\x062\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\x0c\xa3\x82\x05\xac0\x82\x05\xa80\x82\x04\xc1\xa1\x03\x02\x01\x01\xa2\x82\x04\xb8\x04\x82\x04\xb4n\x82\x04\xb00\x82\x04\xac\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x07\x03\x05\x00\x00\x00\x00\x00\xa3\x82\x03\xcca\x82\x03\xc80\x82\x03\xc4\xa0\x03\x02\x01\x05\xa1\x13\x1b\x11SAMBA.EXAMPLE.COM\xa2&0$\xa0\x03\x02\x01\x02\xa1\x1d0\x1b\x1b\x06krbtgt\x1b\x11SAMBA.EXAMPLE.COM\xa3\x82\x03~0\x82\x03z\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x01\xa2\x82\x03l\x04\x82\x03hr\xb6;\xb7\x93\xfb4\xadU\x17A\x93\xf27\xc0\x88I\x1f\x0f\x8eG\xbfk\x13ZF\x1a|l\xc9\xbd\xfe\xc1\xe8\xd6\x9a\x18t\xc7\x04\x05\xfe\xa8\xcaN\xb7`\x14t\xdf\xf8\x82R`m\xac\xd6\x17\\b\xa5\xe3\x98\xca\x97\xb7\xaam\xbf\xd1\x19\x05\x16k\xbb\xf451,H\x88e\xed\xbc\x1a\x87\xe1\xfb\xad\xf0\xd1\xc0\xb5L=\x95\xca\xd7\xc6;\t7%QI\x98s!\xf9\xfe\xfe_\xe9\xae\xeaj\x1e\xb8\x0eN9\x8e_\xcd\x1d,\xfd\x16\x0c\xad\xfc@\xd9\x97\xa2n)\x17\x02\xffL\xff\xcd{\n\r\xb3\x07W7\xcb\x93\x0f\x1b\xc3\xae\xb7\xc9f{\x1c\xa7\xc6\xf3\xe8\x1cz\x16\x8a\x15\xf5H6k\xc2\r6L\xf1\x99\x80Z\xd2R\xce\xd5\xbc\x82c_p[JG\nu\x1a\xa5Xz\x96&\xec\xf8\xe8\xa2 8\xfaGD87\x11\xac\x87\xb5E\xf7\'x\x0b,\xa5,=\xd2;s\xf9\xbb\xc1\xc30|\xb2y\xa5\xd5\xee\xe3\\\xeam`\xa4\xd3\xd1\n\x11\xb5\xd3\xc8\xcats{\xa8\x07\x18\xdc\x12d\x0b\xab-eB\x1f\xd7&\xf2\x1e\xb7\r\xdf\xe6\xb7\xa3{_\xd0.xrFG\x03\xe0r\xcfu\xbd\x14>\xc1\x9f\xeb\xae\xcb\x04\x071\xf1x\xff\xe5M\xfc\xbct\xea^e!\xce!|\x893/\xa1\n.\xb7T\xc5Ph\t\xf1\xbak\xcd\xdb\xff+c\xab\xcfY\x8a;*/\xd8\xa5\xd0\xd7c\xc6\x02B\xed\x82\xcf\xa0\xe5\xdf@rq\x8cRG\x1a\xdey_#\x18\t\x9d\xac\xa4\xfe\xd0\xeb{\xcb(E\xb8\xac\xc9\xe3\x06\xe0\x15}\xb89\xb1L>\x060\x93\x1dtl\x1f\xa0\\s\xdb\x85\x82\xdf\xb3L\x80\xe7/\xae\x0e\x11V\xdeH:J K\xb1g\x95\n\xc2\xd2\xc2\x83k\\6\x0eg\xd0{v\'\xa4\x1c\xe2\x10-\xeb\'\xc7?F\xd8J\xe8\x90Z4V\x12\\\x9e\xc2\x05\xfc|\xb3\x01\xe5\x1b\x14\n\xaa\xff\xb9\xff\x07\x03L\x10\x1d\xc8\xa8\xed\x00A\xf3\xf2\x16\xa3\xd8":!\x04m\x10Uo\x11\xa5d5\xc1\x1es\xde=\xa6\xdd\x9b\'\x03(L(*\x92C\xca\xc8\x92\x1b\x08\x06z/\xb4=\xd8Mz\x816\x9f-\xc0\xe8\xcf\xd2A\xfeyk)WH\x11\xdf\'\xf4\xefG\xfc\xef\xd0\xb5\xec\x91\x87\xf4}b\xb2\x1e>\x1f\x9d4~h\xa0=\xfd(i0|\x03\x98k\x05#Y\xe35\x1c\x7fn\xac\xf2\x896\xa6p\x13\xc1\x94&Q\x8f\x1c\x07\x8cN\xb0\xb6=\x83R46\x04\xfa\x86\xbc\xc1UO\x03\xd8\x0e\x0c\x9f\xbd/\x02f\x90\xa8\x9e\xd3 \xb4\\\n!\xf9"\xc3\n\xe7\xe2\x92\x05t\x11\xa1\x9e<$i+U\\d1\t^\'\xb7\x12\xfd\xe5\xd7\xc4\xd4\xb2\xa9!`\xd8\x97\x8b\x9a\x0c:\xcc\x85\x90)_\x11\xefR\x00\xe5k\x12I\xe2\xf6\xf4h\xa4.\x97\xf2\xea?\x1e\xf9\xcf\xe6\xac\xc7\xdd\xd0\x8f\x0bml\xcb[\x801\xce\xae\xd28\xc0\xe9\xb1\xb0\x19\xc9r\xd2\xd4=\xdaw\xff\xc7\xbd\xe7\xf8\xa9\x8d\xc6\xda\xa9y\x9b\x98\x19\x05\xb1]\xbc\xe2\xe3\xaf\x8c8\xcd\x12\xf8\x90\xea\xd0\xe3\xc3\xba|\xe28(\x8f\x99\xba\xden\xefJ\xc4r\x9e\x17\xe8&\xd6\xe4\x83 \x92\x19d?\xa6\xcc\xbd\xff\xa5\x83@\x17\x13\xefY\xd7\xa7\x1e\xe4\r\xd2\x846\xf8~!L\xe5\xdd\xb3\xb4(\x14\x1e\x1a\xfcP\x8ezE\x1ffFJ.\x82\x1f\xd3\xc5l\x9e\x0b3u4b\x0c\x94\xd6R\xc0\xe5\x96\x83\x95\xa1\x12\xa2\x18;\x96\x9di\xca\xc8\xd9\x15\x81\n\xa9\xc3\xe8\x1eS \x93j\xeb\xa4\x81\xc60\x81\xc3\xa0\x03\x02\x01\x12\xa2\x81\xbb\x04\x81\xb8-Y=\xd3\xfc\xeb \xd8\x16\xd9\xb2O\xfc1\xc9\xd5\'zN\xd2\xb6\xf4\xc6Q7\xaa"B\xe7\xac3\x19\x86\xad\xd5@\xa6\x1f\xd8a#EN\n\xba\xc3\xd95\xe5\x93\x07,j\x97V [o\xe3\x91!d\xe6|\xa4\x94\x14\x9dj1J\x82as[\x83\x80\x99\xa3\xec\xc1\xda_\xe7\nLej\\\x9eW\x11\'7\xfeq=)\xef-\xf5K\x15\x8e\xbf\xb8]m\xb6\xc2\xce\xb4xN,\xdb\xbeaB\x86\'\x068\x05\\\xafF\x08DFpJtX\x0c\xc1\xdfw\x9b\xb1\xf8x\x93\xac\xf9\x14X;h\xe3E\xc0\xe4i\x19\xe5:\xe7\xe5\x86\xa7{\x96\t|\x9aG\xc0\x169\x08\x03A\xa6\xc4j\'-\x07\xf4\x9c\x88"\xc00\x81\xe0\xa1\x04\x02\x02\x00\x88\xa2\x81\xd7\x04\x81\xd4\xa0\x81\xd10\x81\xce\xa1\x170\x15\xa0\x03\x02\x01\x10\xa1\x0e\x04\x0cW\xb7\xdc~\x96.\'\x92\x1a\xdfh\xb9\xa2\x81\xb20\x81\xaf\xa0\x03\x02\x01\x12\xa2\x81\xa7\x04\x81\xa4\x9b\xfc\xb3\x8c\xc5\x1e\xa1q\x19"\xf0\\\xa7\xa6`\xc9:\xd6KA\xd5\xac\xa9$\x8a\x18z\x81\xce\xc9\x0f\xe0\xd5\xad\x848t\xb7\xe3\xf1\xffC\'\x16Z\xc6\xe1of5\xf2R\xb31\xbf\xfa\xaf$\xe5\x1d\xa8\xd3sf\xbb$\xc5%\x17\x0c\x98\x98\x08\x85\xd18\x91o\x8d\x83\x86P\x9e\t\xd9V\xd1\xe4\xeb\xa8\x11\xd6\xaa\xb7\x88\xde\xbe2\xbf7\xb8\xca\x1c\x90\x10GB\x06\x046\xc8\xff\n\x02$_\xce\xcfk\xc9xd\xe5\xbf!4q\x83*/B[\x8fJ\xfa\xf4\xad97\xd8\x8f,3b\xb7\xe0\x94\xca\n\x12]\xc9\xfc\x7f\xbb{2p\xa0\x8f1e6$\xa4v0t\xa0\x07\x03\x05\x00@\x81\x00\x00\xa2\x13\x1b\x11SAMBA.EXAMPLE.COM\xa3,0*\xa0\x03\x02\x01\x01\xa1#0!\x1b\x04ldap\x1b\x19localdc.samba.example.com\xa5\x11\x18\x0f20150130011709Z\xa7\x06\x02\x04T\xcaN\xf5\xa8\x0b0\t\x02\x01\x12\x02\x01\x11\x02\x01\x17') >>> >>> assert isinstance(pkt.root, KRB_TGS_REQ) >>> assert pkt.root.padata[0].padataType == 0x1 >>> assert len(pkt.root.padata[0].padataValue) == 1204 >>> assert pkt.root.padata[0].padataType == 0x1 >>> assert isinstance(pkt.root.padata[0].padataValue, KRB_AP_REQ) >>> assert pkt.root.padata[1].padataType == 0x88 >>> assert len(pkt.root.padata[1].padataValue) == 212 >>> assert pkt.root.padata[1].padataType == 0x88 >>> assert pkt.root.padata[1].padataValue.armoredData.encFastReq.etype == 0x12 >>> assert pkt.root.reqBody.kdcOptions.val == '01000000100000010000000000000000' >>> assert pkt.root.reqBody.sname.nameString == [b'ldap', b'localdc.samba.example.com'] >>> assert pkt.root.reqBody.till.val == '20150130011709Z' ###(004)=[passed] Parse TGS-REP >>> pkt = IP(b'E\x00\x06V\xff\xff@\x00\xff\x11\x00\x00\x7f\x00\x00\x15\x7f\x00\x00\x1d\x00X;\x97\x06B\x00\x00m\x82\x0660\x82\x062\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\r\xa2\x81\xe90\x81\xe60\x81\xe3\xa1\x04\x02\x02\x00\x88\xa2\x81\xda\x04\x81\xd7\xa0\x81\xd40\x81\xd1\xa0\x81\xce0\x81\xcb\xa0\x03\x02\x01\x12\xa2\x81\xc3\x04\x81\xc0\x8cqa\xdf\xfe\x13<7\xc1:\x8d\x0bshxOC\xd6\xcb\xbdz\x1a\xf5\xaa\x9c8\xce\x9f\xed\x99\xeb\xd8A\xba\xdcj\xffF4|\xc7\xab\x84~\xb9\x8f\x04\x0e<\xf1p#\xf7kK\x86\x05+%\\:\xcb^\xc8e\xeb\x0f\x81\x92\xa0\xf3"\xcd\xbb\xf3\xb9\x91\xc8\x94\xa27\x8c\xae\xc44\xa8\xd27\xd1J`K\x93M\xe3\xefUy\xda\xc6\xb7\xe6\xc8\xed\xa79\xd4\xd5\x9a\x12f\t\x1c\xb5\xa7A\x95\xaf\xa1\xac\x1d\xde\xfb\x1c\x0ec<5\t\xabYU\xd4\xd4\r\xf4]\xec\x00t^K\xed\xca\x81\xad\xbe\x99\xdc\x10g\x9c$\xfb\x82s?\xf4\xb9\xa5\x8eW\x02\x7f\x87A\xf7\xc4;2q \xd2\xbc\x10\x13\xc9\xa0w[\r\x01Pt\x7f\x95^\\\x8e\xbe\xee+\xa3\x13\x1b\x11SAMBA.EXAMPLE.COM\xa4\x1a0\x18\xa0\x03\x02\x01\x01\xa1\x110\x0f\x1b\rAdministrator\xa5\x82\x03\xe5a\x82\x03\xe10\x82\x03\xdd\xa0\x03\x02\x01\x05\xa1\x13\x1b\x11SAMBA.EXAMPLE.COM\xa2,0*\xa0\x03\x02\x01\x01\xa1#0!\x1b\x04ldap\x1b\x19localdc.samba.example.com\xa3\x82\x03\x910\x82\x03\x8d\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x01\xa2\x82\x03\x7f\x04\x82\x03{\x97\x9c\xac\xf1\n\xe6;\xd8\xe28m\xba\xb7\xea#\x19\xd3Zf\x1c@\x00H\xf9"\xe7\xb4\xf3&3\x02X\xb5\xc0{e\xffm\xc8\xcf\xe2\xf9p\xb57~\xd8\x91?/5\x7f\xde\xc4/\xaa\x1c\x08pQ(\xff@\x8e\xb7\xf0\x91N\xbcK&0\xbdWo_W\xf8\xbe\xd6(\xd1`\xba\x8f.\x86\xc29\x88\xe5:,\x16ui\x98y\x100Q\xf6k1\xe6\xe5-e\xdc\x80\xc0@\x87i9Z\x7f\x07\xeb\xf2\x8f\xb1\xc4\x83*z\xbbq\xbfZs\xd7\xefFAZ\x84w\xa2-\xc8\xca\xa3\x84\xa2\x0bm\xce7 pIX\xa1\x05\x83\x01t\x06\xabI\xa3dp\xe3\xaa\xd0\xd6\xb0!\xfd\xbea\x9buL\x0f\x99\xbfg\x11|J?\xfdl\xcd\xb6\xae\n\xdc\x06kS\xc60\xad\xf3\xacq\x0f\xd5lbX\x8d^\xf9\x83\x80ax\x1c\x12\xaa\xe3\x07Y\x1ef\xae\xd6\xc9\xd4y\x94\xb5\x93\x83\x03m\x03U\xf3\x9a}L3Xi \xf94\xffFf}\x99\xfd\x04I\xe3\xcd\x9f\r\xb7>r\x0e\xcf\xeb$\xc8\xdcO\x95\x88\x04\x1c\xf0\xf9\t2\x92\xc4\xe3\x10\xfa\xb0\x14\xb5\xfb\xf0.\xcc\xa3\xdc\xab\x0f\xd76\x8e\xbf\xd8\x7f@U-x\xc8 \xd42\xf8\xfd\xce8\xdbl\x16\xc1\xaa\xb3\xe32\x87\xd3\xecIc-\xcf\xab7\x0b\xd9b\x9f9\x06\x88|q\xca[\xb8\n\xfb\xf7\x0bl]:\xbc\xe1\xab:K;w6\xcf\x1c\xa6\x1a\xec\xc0\xe2\xea\x89\xe6u\xe4(\xec\xec\xda!\x06\xfd\x9c\xeeZb4\xeb\xff\x06j\xbc\xfe\x90\xb6\x93\x0b:t\xf1|\xa3`\xfb\xc5\x9a\xa5\x11w\xb2}oP\xccj\x10M\xf3\x98\xbdCj\xa9\xcd\x93\x83\xf9N"\xbc!z8\xf6\xca\xe3\xbc\x04\x92\x14\x16i\xa40\xbf~\xb5\x12\xbeC\x83\x9e\xbdH\x13\xcasxFM\\\xd7\xc9\xd3B\xacM\xe7\x1c\x8ej\x12\x197\x06\xae\xbd\x1c\x84J}\xab\x8b\x05F\x8a\x13\xbe@]\r\xc2-\x9fA\x19\x94Jl\x12\xba\n\xad\x16T\x94\xb85U\xc1o\t\x04\xb2F\xa1\x17M4\xc3\xb2N\x17\x8f\xfe\x190\xc2\x11q\xc3A\xd9\xafn\xc8\xc909\xc4\x05\x03\xf3\xb2\x8e\x97\xfcL>E`\x11`\xce\xe5n\x15\x84\x84~\xdfZ\x98S\x0f[\xc3\xaa\x8e\xcf\x9cU\x93\x94\x04>\x05\x90\x1c\x00\x1a7\xb7\xe9\xc9\xc9\xb6Eq\x13\x1e\xb5\x86\xc3}&\xe7\x1b\xe5(\xce\xe3b\xd5\t\x11\x1f\x1e\xe3;O\xd9J\x85\xc5\xfa\x82\xd2\xc9\x88\xc5\xa8\t\xf5\xdb\x85vi\x1d\x97\x12j\xe8\xabL\xf0J\xd3\xbe\x1c\x7f\x1a\xb7$k\x87\x9e\xc3\x9aH\x1e\x96>\x19\x0fE\xff\xe2\xc8\xc2|W4\x12\xe4\xc7G[\xdc\x93\x17E%ur\xcem\x169\xf2I\xab\xbb\x8d\xca\x0fM0n\x19\x06\xeb<\x03\xa7fw^\xdd(V:\xc0\x14+\x08L\x17\xbe\xc9\xa6\x82\x01\x1e0\x82\x01\x1a\xa0\x03\x02\x01\x12\xa2\x82\x01\x11\x04\x82\x01\r\xeeN\xd0\x1b\xa0\xc4\xb0C\x12,\xdd\xbd\x96\xe8\xbai"j\xbc[O\xff}Z\n5%\x98\xfc{`Q\x92\xe4\x95\x1azM\x15b\x98Ah\x02\xb2V\xd5\x0f9\xb3\xd5\xcf!\xdf\x1e\x9c\xd4\xc08\xc0|\x10\xc8\xb0ol\xcd\xa6?\x19\xfa\xb9\x0b\x9d\x96\xaa_,O\xe2 @4;\x1f!\x12\x8e\xf3h\xbc\x95\xa2\xcfE\xaey\\U\xdcc\xbe\xecN\x9e\xaa\x9d\x83\x1a\x9ad\x11\x15X\xdf)L\xd8Z\xe3\xa2&\x1c\x1b\xf8\xd1\x8e\xfb~\xdd\x16^\xfa\xf9\x15\x96s\x03\xf8T\x86\x12B\xdf\xf7m@\xfa\xf5L\xdd\xb6\xa8\x9af\x90\x90\xcd\xa9\xdf\x97`\xd3\x1c)\xc5n\xe8\xc1\xe0\xb4\xc7"\x16\x91<}\n\x94\xec\x8d\xc6.d\xe1\xf5/i\x89$\x9a\xebW\x0c\xf7\xfe\xc5\x12\x10\xb8\xa5\x193\x88hR\xa0\xf7t\xa9\xc6\xc2\x15E\xbd\xd6\xf09\x1d\x12\x83o\xb35>o\xa0\x98\xda\xf2\xad-1\xd0\x94\x12Be\xe0\x04\xe0\xf7\xcf\xbbAZ\xf5\x1c\x88\xf5\xef\xb2\x9bi\xdc\xd0\x07\x8f\xca\r^\x92\x02\x15\x87\xef\xd5\x90\xb5') >>> >>> assert isinstance(pkt.root, KRB_TGS_REP) >>> assert pkt.root.cname[0].nameString[0] == b'Administrator' >>> assert isinstance(pkt.root.ticket, KRB_Ticket) >>> assert pkt.root.ticket.sname.nameString == [b'ldap', b'localdc.samba.example.com'] >>> assert len(pkt.root.ticket.encPart.cipher.val) == 891 >>> assert pkt.root.encPart.etype == 0x12 ###### ## Kerberos dissection and decryption tests ###### ###(005)=[passed] Create Key (RC4_HMAC) >>> from scapy.libs.rfc3961 import EncryptionType, Key >>> key = Key.string_to_key(EncryptionType.RC4_HMAC, "Password1!", None) >>> assert key.key == b'\x7f\xac\xdcI\x8e\xd1h\x0cO\xd1D\x83\x19\xa8\xc0O' ###(006)=[passed] Parse AS-REQ (no preauth) >>> pkt = KerberosTCPHeader(b'\x00\x00\x00\xd4j\x81\xd10\x81\xce\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\n\xa3\x150\x130\x11\xa1\x04\x02\x02\x00\x80\xa2\t\x04\x070\x05\xa0\x03\x01\x01\xff\xa4\x81\xaa0\x81\xa7\xa0\x07\x03\x05\x00@\x81\x00\x00\xa1\x120\x10\xa0\x03\x02\x01\x01\xa1\t0\x07\x1b\x05User1\xa2\x0e\x1b\x0cDOMAIN.LOCAL\xa3!0\x1f\xa0\x03\x02\x01\x02\xa1\x180\x16\x1b\x06krbtgt\x1b\x0cDOMAIN.LOCAL\xa5\x11\x18\x0f20231213110146Z\xa6\x11\x18\x0f20231213110146Z\xa7\x06\x02\x048\xa6\xb8x\xa8\x080\x06\x02\x01\x03\x02\x01\x17\xa9\x1d0\x1b0\x19\xa0\x03\x02\x01\x14\xa1\x12\x04\x10WIN10 ') >>> >>> assert pkt.len == 212 >>> assert pkt.root.padata[0].padataValue.includePac >>> assert pkt.root.reqBody.etype == [0x3, 0x17] ###(007)=[passed] Parse and decrypt AS-REP (no preauth, RC4) >>> pkt = KerberosTCPHeader(b'\x00\x00\x06\x1dk\x82\x06\x190\x82\x06\x15\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0b\xa3\x0e\x1b\x0cDOMAIN.LOCAL\xa4\x120\x10\xa0\x03\x02\x01\x01\xa1\t0\x07\x1b\x05User1\xa5\x82\x04\xa0a\x82\x04\x9c0\x82\x04\x98\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2!0\x1f\xa0\x03\x02\x01\x02\xa1\x180\x16\x1b\x06krbtgt\x1b\x0cDOMAIN.LOCAL\xa3\x82\x04\\0\x82\x04X\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x03\xa2\x82\x04J\x04\x82\x04Fm[\x1a\xa0G\xd5 \xee\x9c\x0c\t\xfb\xc3\xee\xd8Ki\xca\xaa6~\x87\x0fu\xde\xfd\x8d9\trl\x9d\xe9\xf0\x10\x0b\x85SO\xc2\xae0\xb1\xc1\x9a\x8c\xa0\xcb/\xad\x94\xaa\xe0\xb1R\'C\xd0uqw\'\xa6zF\x9d7\xf7\x08\xd8[(\xd5\x11\xc6:\xf5\r:\xde\xf9\xdd\xd9/T\xaa\xe1Q/\x9eD\x91\x01\xa8X\xf0O\xde\x88\xcb\xc4\xc7\x87\xb1pv\xd4\xb0r\xc1\x10\x80W9\xf7\xe7+\xd9M:\xf2\x8f\xdf\xa4\xc1\xa5\x95lU\xc02A\rf\x0b\xef\xc8\xc9A\'\x87\xff\x92W\xd4\xed\xb9\xd0|{\\\xbd\xf2\xfb%h\xe3\xb8\xccs\xec_\xe7\xf9\x90\xae\xb8E\xab\xf6!\xe6z@\xf1-nO\xcf X\x1eh\x86L\xba\x0ef_\xde]\xe2_\x94\xb0\x13\xccN\r/\xd3\xf2\x81\x07\x1b\x14\xfd6\x00Y~\xc0?\xaeYb\x7f\x16\x139\xe5P:\x93\xe3N3\x08iB\xc5m\xa3\xb5\x10d\xd1~\x0eb~wk{u\xec\xbe_!w{\xb7Z\\\xcf\xf5\xd9\xc3\xea\xe5\xfd\xfd\x03\x18\x07\xab\xe3\x06\x07\x9a\xa1\x9c\xc2C.\x0e\xb7c\x14\xf6\\\xd2\x82\xf2\xfc\x01>\xed\xfb6&<\x8f\xab\xe0\xfe5\x86!e{\xadr\xa3\xab\x87\xbc;p\xbdh|\x04\xf5\xffJ6\x94\xca\xacLc\xeb\x91\x14\xb94\xe7\xf4k+_V\xefh\xd4G@\x16\xc7?\x92\x94\xa3\x87\x81#\xbc\xa6>\xefh\xdd\x91\xe2\xce\x06\xba+\x96\x83\xb5n\xb2\x0c\xc3\xf9\x1f\x15\xe8\xba\x10\xf7V\x8b\xf4\xc1Rg\x86S\xfa\x89\x90\xe4\xceJ\x8d4\xc1Bh\xb5S\xa8\']8z,j-z\x0c\xc28Z\x06d\xd9\x90\x19\xf4\xc2)\xc7\x86\x9dk\x17{\x12/\t\x8a.\xc4\xe7\xdb~t\x92\xadx\xb2\x91\xb5\x96@\xf6\xa8ftuM\xdf\x17\xc4V\xa0y\xd0\xdf\x1f\x1a\xc9y>\xc0\xd1\x85\xde\xf4\xee#\xc8\x82F\xc8H\xa6h\xe8\x02H\x9bE5U`o\x98\xc0P\x9c\xd9L\xb9D\xff\xd8G\xd0k\xc0\x07\xda\xd2#\xc3"\xb7\xb8\xf2)\x9c\x164\xaa\xe4\x18-i(\xabn\xb7\xeaB5\xe4\xb7\xdc$$\x9e|\xcdA\x03\xf3\xd7n\xd3\xc1\xd7\xe6e\xb6\\\xd3)\xfah\xb7\x88\x0e\xeby \xfe\xd2!.Q\xa0\x97\xa8\xe2O\x1d\x99\x02#9\xf4\x1c\x0e\x1fN\xc9;\xd5?\x0fm=\xee\x0efj\xc1\xcb\x14\xb5\xa9}\xe2:F\xd7\x1d\x07\xfd\xaf\x96D\xfc\x007q\x11\xe1\xf6\x12\xdc%\xf7\x92ML\xbfH$\x10\x8a\xb9\xfbp\x9b\xff\x07\\N\x83\xf5\x11\xaex\xf2\x171F\xe3\xfc\xf6\x89\xc3\xdf]\xaa:\x8f\x99\'\x16` P\xe6X\x04\xe9@\x89\x90\x8cP\xc5b\xf82\t+\x14+\xb7\xa3\xfa\xba\xa4*r\xb41i\x070!\xba\xc8\xb17\x06\x12\xf2\xce\xa0\t9P\xd9]\xe4p1i\xf3\xed\xc0oT\'\x99\xc0\x7f\xa8s\x0bW\xc7S\x90w\xe6\xa7\x91\xe1\x84\xd3V5$\x92\xa3\x81\x90\x02\xdfVu\xd7\xb7x\x13+p\x8djP\xfa\x0eL\xc5}=\x12t\xc3\xa6\xa5\x12\xd9H+w\xea\t\x92km\xf9$\x0c\xa0Y\xda\xea\x15\xd0\xa1\xbe\x85\xa3\xd3\x9fQ\x1a\xd8A\xabf\x9d\x9c \x19\xa5\x8e\t\xb4c\xac\xe3\x99\x00\xf4i\xc4\x14c\xd7h\xd3\xc6x\x11\xa5\xa0`\xe5\x8d"\xae\xa3\xa7\xba\xb8\xc4~\x87\xad\x1d\xa6\x19\xe3v\xdd^(-w7d\xd1\xb0D<\xeaW\x84\x90=\x9e\xee\xa3\xe3u\xa7\x074\xf3:6{\xbd-\x87\xfee\xd6b\x8a\xe5\xa9v\x0c\xe8N\x1c\x10\x12\x91\x1e~\x92\x02Uh)\xdd\xb5f\xf9\xcc\xadf\xf3:\xa7\x9f\xfd\xe1>\xd19\x10U1\xf0\xf8\xb1G\xe8H\xcb!h\xab\x14q\xe51d\xb2A\xf07\xda\x11\x81\xd9\xff') >>> >>> assert pkt.root.cname.nameString[0].val == b'User1' >>> >>> asrep = pkt.root.encPart.decrypt(key) >>> sessionkey = asrep.key.toKey() >>> assert asrep.encryptedPaData[0].padataValue.flags == 0x5001f ###(008)=[passed] Parse and decrypt TGS-REQ (DES-CBC-MD5) >>> pkt = KerberosTCPHeader(b'\x00\x00\x05\xd1l\x82\x05\xcd0\x82\x05\xc9\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\x0c\xa3\x82\x05=0\x82\x0590\x82\x055\xa1\x03\x02\x01\x01\xa2\x82\x05,\x04\x82\x05(n\x82\x05$0\x82\x05 \xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x03\x03\x01\x00\xa3\x82\x04\xa0a\x82\x04\x9c0\x82\x04\x98\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2!0\x1f\xa0\x03\x02\x01\x02\xa1\x180\x16\x1b\x06krbtgt\x1b\x0cDOMAIN.LOCAL\xa3\x82\x04\\0\x82\x04X\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x03\xa2\x82\x04J\x04\x82\x04Fm[\x1a\xa0G\xd5 \xee\x9c\x0c\t\xfb\xc3\xee\xd8Ki\xca\xaa6~\x87\x0fu\xde\xfd\x8d9\trl\x9d\xe9\xf0\x10\x0b\x85SO\xc2\xae0\xb1\xc1\x9a\x8c\xa0\xcb/\xad\x94\xaa\xe0\xb1R\'C\xd0uqw\'\xa6zF\x9d7\xf7\x08\xd8[(\xd5\x11\xc6:\xf5\r:\xde\xf9\xdd\xd9/T\xaa\xe1Q/\x9eD\x91\x01\xa8X\xf0O\xde\x88\xcb\xc4\xc7\x87\xb1pv\xd4\xb0r\xc1\x10\x80W9\xf7\xe7+\xd9M:\xf2\x8f\xdf\xa4\xc1\xa5\x95lU\xc02A\rf\x0b\xef\xc8\xc9A\'\x87\xff\x92W\xd4\xed\xb9\xd0|{\\\xbd\xf2\xfb%h\xe3\xb8\xccs\xec_\xe7\xf9\x90\xae\xb8E\xab\xf6!\xe6z@\xf1-nO\xcf X\x1eh\x86L\xba\x0ef_\xde]\xe2_\x94\xb0\x13\xccN\r/\xd3\xf2\x81\x07\x1b\x14\xfd6\x00Y~\xc0?\xaeYb\x7f\x16\x139\xe5P:\x93\xe3N3\x08iB\xc5m\xa3\xb5\x10d\xd1~\x0eb~wk{u\xec\xbe_!w{\xb7Z\\\xcf\xf5\xd9\xc3\xea\xe5\xfd\xfd\x03\x18\x07\xab\xe3\x06\x07\x9a\xa1\x9c\xc2C.\x0e\xb7c\x14\xf6\\\xd2\x82\xf2\xfc\x01>\xed\xfb6&<\x8f\xab\xe0\xfe5\x86!e{\xadr\xa3\xab\x87\xbc;p\xbdh|\x04\xf5\xffJ6\x94\xca\xacLc\xeb\x91\x14\xb94\xe7\xf4k+_V\xefh\xd4G@\x16\xc7?\x92\x94\xa3\x87\x81#\xbc\xa6>\xefh\xdd\x91\xe2\xce\x06\xba+\x96\x83\xb5n\xb2\x0c\xc3\xf9\x1f\x15\xe8\xba\x10\xf7V\x8b\xf4\xc1Rg\x86S\xfa\x89\x90\xe4\xceJ\x8d4\xc1Bh\xb5S\xa8\']8z,j-z\x0c\xc28Z\x06d\xd9\x90\x19\xf4\xc2)\xc7\x86\x9dk\x17{\x12/\t\x8a.\xc4\xe7\xdb~t\x92\xadx\xb2\x91\xb5\x96@\xf6\xa8ftuM\xdf\x17\xc4V\xa0y\xd0\xdf\x1f\x1a\xc9y>\xc0\xd1\x85\xde\xf4\xee#\xc8\x82F\xc8H\xa6h\xe8\x02H\x9bE5U`o\x98\xc0P\x9c\xd9L\xb9D\xff\xd8G\xd0k\xc0\x07\xda\xd2#\xc3"\xb7\xb8\xf2)\x9c\x164\xaa\xe4\x18-i(\xabn\xb7\xeaB5\xe4\xb7\xdc$$\x9e|\xcdA\x03\xf3\xd7n\xd3\xc1\xd7\xe6e\xb6\\\xd3)\xfah\xb7\x88\x0e\xeby \xfe\xd2!.Q\xa0\x97\xa8\xe2O\x1d\x99\x02#9\xf4\x1c\x0e\x1fN\xc9;\xd5?\x0fm=\xee\x0efj\xc1\xcb\x14\xb5\xa9}\xe2:F\xd7\x1d\x07\xfd\xaf\x96D\xfc\x007q\x11\xe1\xf6\x12\xdc%\xf7\x92ML\xbfH$\x10\x8a\xb9\xfbp\x9b\xff\x07\\N\x83\xf5\x11\xaex\xf2\x171F\xe3\xfc\xf6\x89\xc3\xdf]\xaa:\x8f\x99\'\x16` P\xe6X\x04\xe9@\x89\x90\x8cP\xc5b\xf82\t+\x14+\xb7\xa3\xfa\xba\xa4*r\xb41i\x070!\xba\xc8\xb17\x06\x12\xf2\xce\xa0\t9P\xd9]\xe4p1i\xf3\xed\xc0oT\'\x99\xc0\x7f\xa8s\x0bW\xc7S\x90w\xe6\xa7\x91\xe1\x84\xd3V5$\x92\xa3\x81\x90\x02\xdfVu\xd7\xb7x\x13+p\x8djP\xfa\x0eL\xc5}=\x12t\xc3\xa6\xa5\x12\xd9H+w\xea\t\x92km\xf9$\x0c\xa0Y\xda\xea\x15\xd0\xa1\xbe\x85\xa3\xd3\x9fQ\x1a\xd8A\xabf\x9d\x9c \x19\xa5\x8e\t\xb4>> >>> assert pkt.root.reqBody.kdcOptions == '01000000100000010000000000000000' >>> assert pkt.root.reqBody.etype == [0x3, 0x17] >>> >>> apreq = pkt.root.padata[0].padataValue >>> auth = apreq.authenticator.decrypt(sessionkey) >>> assert auth.ctime == '20231213010146Z' >>> assert auth.crealm == b'DOMAIN.LOCAL' ###(009)=[passed] Parse and decrypt TGS-REP (DES-CBC-MD5) >>> pkt = KerberosTCPHeader(b'\x00\x00\x05\xdfm\x82\x05\xdb0\x82\x05\xd7\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\r\xa3\x0e\x1b\x0cDOMAIN.LOCAL\xa4\x120\x10\xa0\x03\x02\x01\x01\xa1\t0\x07\x1b\x05User1\xa5\x82\x04\x9aa\x82\x04\x960\x82\x04\x92\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2#0!\xa0\x03\x02\x01\x03\xa1\x1a0\x18\x1b\x04cifs\x1b\x10dc1.domain.local\xa3\x82\x04T0\x82\x04P\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x0b\xa2\x82\x04B\x04\x82\x04>\xcc@\xf6_\xdd\x85\xb9\\\x9f\xf5P\'\x9ae\xf0\x925\x884W\xde\x9fn\xb3q.\x08e\xd4\t\xf2;\xb5\xd0\xcb\xe8\x1b\x9e\x15\x83~ q]\xdaw\xd2X\xac\t=aV\xa7\x9c\xfb\xee\xe2n\xf7\x9a\xf1\'t[\xe2\xcc\xaeL\xb9\xe1\xbc\x87C\xddG-\xdeJ\x9d\x8d\xa4\xb4W\x83\xb8\xf0(\xa4\x92\xf9\xa9OJ\xb2s\x07\xfa*\x0f\xf9\xbf\x17Z\x15\xd5\x867\xe3\xfd\xa6r\xb3\x9f\xca\xb5\x9dth\n\xc4\xe3\xc4P\x08\xfe\xd6Fd=R\xde\xe6\x80CC,\xe9l=\x89,\x82\xed\xc5<\xec \x8b\x19\xe1\x88\xaf\xf2\x8b\xbby\x8f\xf1\x88\x84?\xcc\xa4\xb5\x7f\x84\x99\x9d\x85\xedEs\xfc\xc6f\xfc\xb8\x04=\xa5\xcf\x0f3\xb3\xed\'\x01\xa2(\xb5\xec\x1d9\xcd\x88%\x86\xf4u\x91\x11\xe6O\xfc:I7\x1b\xd4\xc0\x11u\x80\x1dt\xc1\x81\xd5#\x10\xff4\x03Fs;O^\x0c\xfb9v\xcb\rt\xd2\xfb\xa3-\x01\\\xa4\xd2\x07\xcdm\xe4*\x85)A\xf6[\xf7\xbbOarb\x0f\xd8\xbaq2LL%0\x1c\xc5\xfa\x94L-M\xab\x90<\xb1\x0e`\x81%\xc3\x1b\xe9\x80\n\xf2\x89}t\x07\xe6\x9e\x02\x80\x998@\xd6G>\x88\x18\x0e\xdb\xc329\x7fD~\xbe\xac\xc1\xd9\x05z\x8aP\x175\xad\xf90\x13\xaa\x13/=|\xf6T\xb9\xf5f\x95\xe1?\xaf\xca\xbfq\\^\xa2\t\xe9G\x81\xbd\x01\'\x9a\xed\xe4\x87\xee\xee\xd1\xaa\xd4\x1b\xd45\xa9\xb1\x14\xc4\x98)0\xde9/\xfe{~/\xd3\x05:|\xd4\x9d~\xde\xce\x8a\xd8\x80\xad\xc6\x19\xddzk\\\xb8$\xafY/\x90\xd3*L\xf7\xf5V\xd3\xa7E\x86\xf1Y=\x81\xfd\xcd\xa6n\xd3\xe4\xa362\xb6\xed\xa5\x8e\xa4\xb3\x0eC\xee^i^_\xaa\xf8\xc1\x93f\x7f\xb1\xdcr\xd8\xcc\x9bV\x17\xec\x14W\x0e\xbcUPw\x02"/L\xbc\x1b\xdb\x8c\x91G\xae\xfaI\xfbY\x8f\x9d\xa1\xab\xf0)\xb0J\x9b#\xc4a\xccw\xc9\xc3\x89A3\x9b\xcc\x87\xccx\xb2\x8c\xa4\xb4\xe6c\xc9\xd3Y:\x1d\xc8=\xd8K\x8bn\xe7\xf6\xa3\xf2\xc7\xe1\xffm\x14\xf1m\x80\xb91\x81`&\xc5\xab#Q+r\x14\xb4\xa6!tI\x8aNS\x179r9\x8b\x95\xbe\xf8\r\xd0P\x1f\x06\xe7\xd7V\xe3\x06\x98\xec\xa1\xeby\xe6cm\x88\xd3\xd6<\x1c\xea\x12%\xb5\x1b\x9b\r\xe6\xb4\xfba\x04\x81\xa2\xd1W-x\xe9\xb9\xc5e`\xf1\xcd\x9e\x83Z\x10\xeb-[\xa0\x95\xe1]\xf2)\x0f+{fW6C\x19$\xddd\x8a\n\xa4^\xbe\xf6\n\xe9\x1eI\x1fD\xf5\xdc9O\xe95!\xd9p\x87\x06\xbbgCh\x10\xebjI\xc9\x13n\x8e\xa0\x1bU\xf3./\xb1xU\xab\x1e\xe1\r\xcd\x8d\xa4Od\x14~R\x83\xe4F5r\xbb\xd8-{=\xb5\x9f<\x1er\xe7v\xf7&8\xdfD\x9f\xab/B\xcf\x0e\x87\xf4\xc9G\x8c\x1e\xf77Bem\x96D)!t\x1af\xbe\x84\x91\xe2\x10\x0bmb\xee\xa7%3\x95\xf6\xdc\xcd\xfc\xfd\x00S\xe3\xa13\xbc\xa33m\xfe\xa4\x91\xc7\xaeG%\\\x87)\xdc\xd2=\xef$\xb5\x8ew\x13\xba\xa2\xc0\xfc\xaal,!>\x17>\xd0D\xf7un\x8cI\x98D\x056@\x88y@"\x05T\xec\xd5a\xe66\x1d)\xf2\x80 \xf5&o\xa5\xda\xcd\xde_\x86-\x00\xcb\x02\xfa\xc7\t\x05\xfcX"\x9d\xb8\xbbSe=\xdey\x0e\xbb@\x00\xba\x9bpb\xbd\x98\xe1\x9az\xa9\xdd\xdd\xd5\x00B\xecu\xb0\x08\xf8\xbb\x0f\xf7z\xfb\xd8j\x14\xe9i]\xced\x00\xf7\xdb\x01\xe2\x03\xda\xf2\xbf)-\xad*,\x05\xd7\x11\xbc\xfc,[\x0f\xcb\x8b#\xfdt\x04A\x11\xfb\x95\xe5\xd1\x1e\xbf\x81\x16t\xa4\x81,\r\xb6\x02\x17\xcd\xa1t\xb4MX.\xbd\xcabFn\x0c\xa6\xb8g@\x0f\x14g~_"\xb9\xe9\x8cu\x94\xcc\x8dX~V\xacv\x86v\x98\t\x8d\xbc\xfe\x80\xee\x1c%\xcdJMj\x18\x90\xcf\t\xb4\x8d\rw\x1eK\xfd\xb3n\x0f\xf8|9/\x04\xd2\tIC\x8f\xfe%\xef;\x86\xb2Sm\x7f\x8f\x87\xb2\xa79(\x1a\x15\xb6\x80G\x81)\x9cg\xe0\x19# \xdd\x11Z)\x8f\x87\xc2s$.\xa89\xeb\xd8\x14\xbb#\x8a\xf0\xbc\xd5\xa9\x00\x10\xf9W[M\xf9\xc37B-.\xd9\x8e]\xfa \xf9\x01\x9b\x1fb\x13h~\x12\x11\x86\xf1\xd0\xcb\x8c>B\xf2\xfe\x82!\x8f\xb2\xa1vi\xf5i\\\xcfD\xcc\xb3\xfe\xda\xdcpin}\xa4t\xc9\x02\xa5\xe4\x1c\x17\xf9\x05H\xdf\x02\xf2\xa3n\xac(*\x9f\xb2\xec\xf0`\xbe\r\xb8\x04\xfd\x0f\x19\xd7&v\xd4\x9dA\xa5l\x01\xc7\xa7\xd8\x97B\x83\xe1\x9bD`v\xb4\xad\xe9\xcc+\xc1J\xa6\xb8\xe0\xc1\xf6\x9e\x8e@\xb3\x00\rc\x9e\x08\xbe\xedq%~"\xa0\x19J\x90\x96a\xb8\xc5\x8c\x012$M\x97K\x14e\x068\xda\x03D\x13On\xff\xd9\x1f\x88\xb6`\xe4K\xda\xed\x9b-\x02w,t\xc8\xd8\x18\xe9f\xfd\xa9\xc4\x82\xc9p\x04\xf9CJ\x18\x9e\x13\x07\xce>(') >>> >>> tgsrep = pkt.root.encPart.decrypt(sessionkey) >>> assert tgsrep.nonce == 0x7a33e06a >>> assert tgsrep.flags == '01000000100001010000000000000000' >>> assert tgsrep.renewTill == '20231213110146Z' >>> assert tgsrep.encryptedPaData[0].padataValue.flags == 0x1f ###### ## Kerberos FAST tests ###### ###(010)=[passed] FAST - Parse FAST AS-Req >>> pkt = Ether(bytes.fromhex('52540013d0835254003ea3be08004502089636a1400080063ad3c0a87fd2c0a87fc8fecc0058eea93069573b278e50180402897400000000086a6a82086630820862a103020105a20302010aa38207a23082079e3082079aa10402020088a28207900482078ca082078830820784a082064a30820646a003020101a182063d048206396e82063530820631a003020105a10302010ea20703050000000000a38205796182057530820571a003020105a10c1b0a444f4d312e4c4f43414ca21f301da003020102a11630141b066b72627467741b0a444f4d312e4c4f43414ca382053930820535a003020112a103020102a282052704820523acc8b7671c0d50522f1a8d8452ce450aceb40fff0229e8ee546bccf1512e4877ef93dde465595260a6a5a8e85ea38600ce8dff7d510f3c744e2c43eb9d3187d638f716c29b6e7aa9eb407de28d0161f49013966eda0a161ff174dad42e7aa500cfe298541215448013ffe4883b6b1166f908f50de129487fe77fff874fd4102cdcce8db8dbeb8da02f08cc88b3790cdad5ec499959c7e79d6fef107d1e17ce80cc3df050b7e7a1c31f278e4fd4ea9523c950876f174be363234f8495b9550de1560ba17daeafbf133f78991053d929ad3fd668327d42288e6581671daaef908682ee282e17c31d8f8bb55d27fce155ee2e84a2ff8bc9600891be15e6ede3e1bbd2742a7af8b0a32c48973c9e3776a69647bab11592756c5a15b9101c392efa35d000abb3dabccd97e64426e3fd8d47e0e369c83b5391f38947d536d351c061081d654eef1a3861cdb2ea2bc48222b450d1b7d09c0670493bccc60dfcaa5cfe46fd50adf8e388204a4691dc5f0c3dbae0b4da6ac2dd781f149a444840aaa3a3c3befb5a5c04ee0405baed66afcf9b988d10ea14a955f43df79465e6fc02a12bce3870988950f1ab48e1a4f876f351671c5061e6399a63cb0479f7bd017dfd9bc5be192faf6d4f11e6ee6003933eeaf632f0056c4c1ccd183d7977cfca85419fe5b039674419d802068e792c9576ae2a88bfbeb1f59273226782c6efb288717d8f7a4bc3bf4c697fcac1adc1829f0a914f2559b278ccadd108eb87a11dacc88e4302e9af627474e57171192b94c6b358f8f98e308596215d2fb9d9c2b49c4cbedcb43fc231b86f0493d56b82962cf3383a84f8922c2b99f8fa8fdd85797b09a6e60f72007c0379988be2ff1cfc16f21300c1b4b784174005a9185f760e68ef94b9384eb24decee31b63d1b92278cd75b85d4d80c4e83306533a9d95aa6207cbfbeb0970a41c44aba59839f007923ecd8ff0de8314990a435dbea4dedbee16faf5ab2be9f96d691cfa983a6c843bd183f84c1b4998a3eaa907cae6b82b0ae8363f3edd8cb03d3c9c60ff55a84d8a292ea20555fbd6ce5ad4ad7a6b4bc5bff2e02c477a7a8a98d5a387d389caa172c400b151d95871b2aa16a040dc71a9be5f0774b06a5ca87674ccb4109a2c41db9e3160704218ad495d0751194fbef4becae4d7be24b9d968da592256a2b22cf724e989e71a60d0603b59bebd475285f793794b7a18af49a2b68670e3a6247c453274e35c863a16b5023c6c94659e25abb27c760f989ac0bbf9a5b125d0ea34fb03225cc93d5b8b6829e906883ee76cf8ee61dfacc488e8dc5cbc8ba9705a9e915a68f838232394f97fb1aac4a2a90fe17d46f9c51946a2bf9598df7f5b5e7ee692a78860eea3cef748a5be36529228e40b4aec83ebc8bb14176a4c565b06500e9517229b8340c55812101dbbc6bee693c35873082a5a1a53b35cf3509193d4dc5175c9360a00da71692ba205b3264aecc9ecc8bca31fec43efc8701423bb484f6f21699439dd30f71228f16eaab96b7de3547721d1635bbfe50678900ac378a4958b6c34964f3e0dc843880dbde57fb4a76ab85eba2b190bfdaefc7ba17e109f839493b0f2d6fc7ea17403bebe06f2809314ca514606f54668082364ed6752019f27e1df74f93fcf1c25630a29713a89d4a998c444bc91279c6fc66e0aa5dec72be316e1160cf9f90d5915c464b6bfec5216e901be4726db596a15745511c63736a69ac9ecb9e86601c631b4992653c320e6983562fa613134560cb606621e9661ac5961313ee70868ab48d6010173d8a96fffdb2baf4afe18c846d3fed6f30b9a809d72e647735fc536edec543abc232480d28660395a4819e30819ba003020112a281930481901273d5af61ad426d51d0757e897917caeb6fc1b6950554e8d750f95d27f444e3aaf7ae0bf4595b5e906d9682dbdeedcf6eb42a84ab8092997b783f57710127228165deeb2ce5e09e2ddc71555dc31970a8312d888b8ae766382098276d62b4bd76f34cbc889e24ad5405ec037ceb724fdb71fe247fe2a414a037ed33c796f4475fcfb5993eed147b6d63d740d58da5b0a1173015a003020110a10e040c75f02d8d2954e0ae1a9e0653a282011930820115a003020112a282010c04820108ae9bbc4629c80f4a383a69c4583824295c75f34b000b3fdbdaab073a042935e32c29e0ee2b2b446e4a6a2592362d0d593cddd74dacc24f16353776e1b5d192ad1cf5e63f66f40a134ecb87c077c30922bc0cab00ae23d187d56090d9098f843c54fabe7c012ff87e317dfe339c40911264609d489b041a4e9b52c0eb03ee88a393d17da92786bd1716b92eb0d7a5a24a64ade0870dea8a7e138acdf209ee277cb3fadeedab173fd64cc10a1004010774658b94852639bda10a5e8aff29174e3d2c7032c32631b074afdac0e6832bae74de9be19e522f63bc8499753a209291fee1861c29096cc8ee3cfda5be235b0aa95635916edcfcdaf90b896e2eaa5a57d5e4da0b00408f4201a481af3081aca00703050040810010a11a3018a003020101a111300f1b0d61646d2d302d66617374656e62a2061b04444f4d31a3193017a003020102a110300e1b066b72627467741b04444f4d31a511180f32303337303931333032343830355aa611180f32303337303931333032343830355aa70602043f58a7a0a81530130201120201110201170201180202ff79020103a91d301b3019a003020114a112041053525620202020202020202020202020')) >>> >>> fastreq = pkt.root.padata[0].padataValue >>> >>> assert isinstance(fastreq, PA_FX_FAST_REQUEST) ###(011)=[passed] FAST - Decrypt fast ticket in AS-REQ >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> krbtgt_hex = "ac67a63d7155791fe31dace230ab516e818c453dfdbd44cbe691b240725c4907" >>> krbtgt = Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex(krbtgt_hex)) >>> >>> enc = fastreq.armoredData.armor.armorValue.ticket.encPart >>> encticketpart = enc.decrypt(krbtgt) >>> assert encticketpart.authtime == '20220712230225Z' >>> assert encticketpart.cname.nameString[0] == b"SRV$" ###(012)=[passed] FAST - Decrypt authenticator in AS-REQ >>> ticket_session_key = encticketpart.key.toKey() >>> assert ticket_session_key.key == b'\xe3\xa2\x0f\x8e\xb2\xe1*\xe0\x7f\x86\xcc\x88\xe6,\x08>B\xd8)m/G\x82B;\x9f+\x86\xcd\xcd\xf4\x05' >>> >>> enc = fastreq.armoredData.armor.armorValue.authenticator >>> authenticator = enc.decrypt(ticket_session_key) >>> >>> assert authenticator.crealm == b"DOM1.LOCAL" >>> assert authenticator.seqNumber == 0 >>> assert authenticator.ctime == "20220712235437Z" ###(013)=[passed] FAST - Compute the armor key >>> subkey = authenticator.subkey.toKey() >>> assert subkey.key == b'%\xa4n\xe1\xd0\xf5\x8d\xc4\x8d\xecv\xe8\x9c\xd3\xc9\xee\x1bu\xc9\xa5\xa6\xf8\x83f\x98\xa1\xd9\xe7*I\x9b\xf8' >>> >>> from scapy.libs.rfc3961 import KRB_FX_CF2 >>> armorkey = KRB_FX_CF2(subkey, ticket_session_key, b"subkeyarmor", b"ticketarmor") >>> assert armorkey.key == b'\x9f\x18L]I\x16\xd0\xe5\xa6\xd9\x92+\xbf\xbc\xe0\n\xd1\xcb6\xf3\xd1.C\xc2\xdcp\xf0H(\x99\x14\x80' ###(014)=[passed] FAST - Decrypt KDC REQ BODY from AS-REQ >>> enc = fastreq.armoredData.encFastReq >>> krbfastreq = enc.decrypt(armorkey) >>> >>> assert krbfastreq.padata[0].padataType == 0x80 >>> assert krbfastreq.padata[0].padataValue.includePac >>> assert krbfastreq.padata[1].padataValue.options == "10000000000000000000000000000000" >>> assert krbfastreq.reqBody.cname.nameString[0] == b"adm-0-fastenb" >>> assert krbfastreq.reqBody.etype == [0x12, 0x11, 0x17, 0x18, -0x87, 0x3] >>> assert krbfastreq.reqBody.addresses[0].address == b'SRV ' ###(015)=[passed] FAST - Check Fast Armor checksum >>> data = bytes(pkt.root.reqBody) >>> fastreq.armoredData.reqChecksum.verify(armorkey, data) ###### ## Advanced Kerberos tests ###### ###(016)=[passed] Test Kerberos InnerToken wrapping (ancient RFC1964) >>> pkt = GSSAPI_BLOB(b'`\x82\n\xc2\x06\x06+\x06\x01\x05\x05\x02\xa0\x82\n\xb60\x82\n\xb2\xa0\r0\x0b\x06\t*\x86H\x82\xf7\x12\x01\x02\x02\xa2\x82\n\x9f\x04\x82\n\x9b`\x82\n\x97\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\x01\x00n\x82\n\x860\x82\n\x82\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x07\x03\x05\x00 \x00\x00\x00\xa3\x82\x03\xf9a\x82\x03\xf50\x82\x03\xf1\xa0\x03\x02\x01\x05\xa1\x13\x1b\x11SAMBA.EXAMPLE.COM\xa2\x1a0\x18\xa0\x03\x02\x01\x01\xa1\x110\x0f\x1b\x04cifs\x1b\x07localdc\xa3\x82\x03\xb70\x82\x03\xb3\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\x01\xa2\x82\x03\xa5\x04\x82\x03\xa1\x8eA^\xd1\xa6!\x0f\x82\xb9\xbe\x82\xd0\xe8\x8c\xd7\x1bs\xb7\xb4&h\xec\xd6]\x0f\xdc\xc30n\x9f\xc2\xbb\xf03\x93\x027\x88_\xd7\x85I\x81\xf1\xba7\xcf \xa4\xf4\xa3\xc5C\x1d\xe8z\x1f\xb7\x97\xb1\x1e\x93\xcc\x1e\xc2\'\x94\xee\xf3v\xael\x95\x9d5x\xde\xcf\xad\x16\x1c=\x0eDbb\x9e\xbaE\xfc\x9d\xddnu\x19\x1c\xa4x\xf0#\xc8\x1fTI:\xfb\x94\xd7#,\x9f\xf8\xca\t\xf5\xdd\xcf\xd4\'qLy\x85\xac#\xcb\xde\xe1\xc1\x02+\xf8\xf4{.\xe6\xd7`)\x9d[\xfd\xb8\xc3+\xcaF\t\xa1\x97\xd4\x8c\xe3.\xa4\x80\xd1v2\xf8\xff\xb7\x89y\x98\x13&\x94\xe4\x95\\\x12l\xd8j)\xa7\xa4^\xed\xa9\xee\x92\xaf\x99a\x18\x08\x96M\x8d\xe2\xed\xf4J\xf9\xa8\xb9L0b6\xfc\xa6\x82\x84\xa5`Z\\\xe3\x8e\xaaW\xffj\x94\x05\x88(D$\x84\x11\xe3f1\xfb@\x05g\x00\xad\xf9\x92\x9a\x92^/\xe5\xd4J\xbd\x1bH\x98\xe4#\xb2\x87S^p\xb30\xe6hdK\x1fpp\xde\xf3\xf8\x1b1C\x9c\x9f^e\xfa\x1e\r%\xf6@\xe1=#\xd6\xbf\x82\x8c\'\xca\xcf\xf1\xda\xaa\xdch\x7f\x99\x8e\xa8{4_\xb6\xc1\x1a\xb2\xd0\x16Pfb"\x0b\xde\x02\xb8)=\xbbF\xdfg\xd3\xa4CGb\xfd\xe3\xc0\xff\x96\x8a)\xd9\xd4d\x15\xaa\x01\xa7\xa6\x8f\x81\xf3\xedl\xeb\x8a@\x86\xf6dv\x17\xc4\xda\x14a\xbb5\x80\x08\xa4BPR\xe3);\xb7I\xd3\x90\xaa\xb5\x02\xcb ?\xd2\xb5T\x9d\xd0Ho`\xb0r\xd9R\x9fI\x05\xf9b\xd9\xa6\xa8\xae2Q\xed\x1f/@\x1b=bC\xc8\x1d\xbb1\t\xc7\xabBNK\xf4\x0f0Q\x13\x8e\'\xf9\x91\n\x90\xa4\x97\x81S\xda7u\x92<\xa7@\xa0LO\xb7\xa5\x88\x0b\xa8\xd8p\xbbs\x97f\x17\x16\x87\xbe\xff\x84\xcf\xbf\xba=n\xd0w\xeb\x99x\x03\n\xb5\'\x0ewQ\x90;\xed~}}\x1a\xaf\xe5\x9d\xc4r\xe8\xa6\x97\x07AYl\xec\x8b\xc8\xf5I#\x0f\x04#\xf1\xf9\xec\xdf=\xd7\xc25\tC\xa2\x00\x0cr\xa7N\xfa\x1d\x18\x0es\x05\xef\x11\x84\xc2}\xee\xecKW\xc3\xaeo\x8eS\xa3\xa2n\xb3\xd3\xf1\xb0\xfc\xd8\xe8\xd7jp\xf7$\x11\xd2\xafZ\x83\';*\x87\xa6\xc2\n\xd9:\x8cy9d8\x1a\xf7B\n\nr\xa9M\xcf\xf5?\xe1\xa0\xdca\xd3\xc9\xdc\xc6\x04KyQ\x7f)g;\xc8s?0\xab\xf7\xd7\xd7\x85\xdd1]\xd2\x12\xb5\x1c\x87\x05/\xf4\xe4\x8ci\xe3+\xdeH"\xc2\xe7Z\x17\xaa \xd2\xbaKr\xcc\xd0\xa9\x1d\xe2u\xab\xcc\xd9\xc0\x05\xc5\xf2\t\xf5\xb1M\xa4\x84\x1fS\xfe\xb1\x18r\x81\xba\xc9\xfe\x8f\x01\x8c\x12\xd2\xa6Jy\n\x98\xe9\xd1\xfa\x89\x9c\x84\xf8\xd5\x7f3\x92\'\xed\xa9\xc3\xc1\xcd\xcd\xb9\x19\xec\xb2\x08\xa2\xd0\xc1@\x80\xf1\xc1\x1b(\\\xd3\x17\x04\xf8\xbf\x1a\xb4>.\xcbzP>R\xe9\x84V\x04\x92\xf3\r\x9a\xd2\x99\xf0q>K\\\xb5f\x8e\x9c\xc2\xb3\x1f\xebL\x19~\xda^\x1dY\n\x9d\xd11B;n\xcc\xd3\x1e\x1d\xe0\xe2o\x14\xd8_\xaf\'f\r\xe1 \xfaD\xaa\xad7\xac\x81\xd2\xfd\xf1-D\xba\xa8*\x07J\xbb4\x1b\x19ny\x81\x113\x0e]\xfa|T\x91ayS\xe8\xf6y\x9d\x8b1\xf5\xbb\\\xfb8JD\x17Fq\xd4\x8aF\x16\x9ed\x1cJ\x864p\x94k\xe2\xdd\xdc\x15\xb7\x0f*\xae\xa3@\xc2\x92\xcd\x17>|\xc8\xb7\xd7\x1ay \x8b\xbdZ\xef3*~S\x81D\x12}$\x0c\xce\xa7`\xcam\x9a4q\xdfK\x0eE\xbe\xbf,\xfe\x8a\xe6\xd0Q\x03\xe2\x19\xefx\xb6`%\xcb/\xfa&\\\x15\xc8\xa3\x83V\x18N\xad\xce|6r\x01tW\xa4\x82\x06n0\x82\x06j\xa0\x03\x02\x01\x12\xa2\x82\x06a\x04\x82\x06]\xbe\x88N^mh#\x18\xc2\xf0\x8e\xda\xe5E\xab\xe8\x811\xd2\x0e\xd2q\x96\xf3\xb6\r\xa2s\xcf\xe70s\x0eF\x1b\x01~\x9ev\xcc\xb0h`5\x11\x8d\xb4f}\xad\xc9\xbeGG\xe4\x1f,\x08\x8f\xde}\xad\x0f\xee\x00\n`j\xb2\x9fy]>\xd3)w)8\xc4\x88\xf3]2ea\xce\xf5.R1\xe5G\x87\xeb\xa8\x0f4\xcf\x13\xe7\x1d\xcd\x16\x00\xe8\xf5\xc4_1\x95\xb6\x16\xa0b*\xf6\x8e\xd2\xd5\x19s\x1b\xce\x86\xd4)R\xa9\x13i"\xe7}\xda\x8d_\x961\xb3\x8b=\xd3R\xa9\xb8c,\xb3\xb7#\xdbt*\x04\x15\xa5\xa8f\x80m\xe8m\x1b\xb2\xe9\x1f\x1f\\\x1a\xbb\x90x{&@\xc3v\xa5#>\xd2\xb7\xd1y\x1f\xf6&wz\x88\xe2\xdd\xdb\xc0\xbfP\xec\xbf\x9a\xff\xf0"\xdf\x9e\xdd\x87\xb4\x06)2\x12\xd7\xad\x99\xf0\x98\xfdB6<\x8d\x1e\xf5\x0c0\x9e+\x19\xa4\x91E\xcet5\xbbz@M\xd8\x18\t\xdd\xaa\x16V\x87Ii\x0f\xe5)P\x0e\xd32\xbfK\x06j\x14\xcc\x8e&TZ\xfa\x89\x87\xe6\xd0\xe5\xe5[`\x97\x13|0s\x1c\x841Y\xbcT\x19\xa1\x8b\xef\x16k\xde\xf6\x0e\x9fPA^\xfe\xa3S\xd9-\xab\xf2{Y#b(\xcb\x13\x1b\xae\xb0h\x91wy\xfd\xff\x01\x13\x92O\xcc<\xf1\x88\xb7\x07\xc5\xe8,\xa3\x8et\xe7\x186FP\xe9?\x862\x881\xd3E\x91\xea\xf0\xa3I\xba\xc1^\xa1\x1b\xce\xeftZn\xb1m\x1ah\xfa\xe8\xf2z\xb8\x11\xa19Z\x13Y{1\x8a\xa4\xc5LRl(\x91\xf7\xcaI7\x13\xf6\xe4\x1c\xb1\xf6!\xe9;/U~\r\x17\xcd5}J\xcd\x18\xe0\xae\x1a\xca\xdb\x99\x02\x13\xbc\x93\xff\xfe\x82\x90&|\xf4\xf2fI\xbb\xfc\x81m\xc0\x94\xcb\x9a\x0f{\xd3\xa2<\x86g N2\xd8\x8f]NA\x0c?\x8d\x80 S\r\xde\xa6\x87\xd4"W\x9c\xa1\x18p\xbf\xc5e(\x06Bc\x1c\x8e<\xf8D\xb8\xd8\x8b\x88_Q\nh\xb6xW\xd7\xc1l\x08t\xce\xc2\n\x06\xb1\x1b\xe1\x16x\xe6\xb9Q \xba\xdfa\x97\xa9\x9c\xf1\xf3N\x97w\xf8\xfd:!\x93\xa6\xc7\xfc\xcd\xf3\x12\x14\xe5\x8dB\x9d\xe2uY{3\xc8bukA\xfa\x95\xa5\xa3\xcc(-\xf6\\\x9f\x14OD\xef\x0f\x8c\xde\xd0B\'<\xd36hT\xbd\xa0\'\x89\x1f\'\x15`\xbb[\xf8Zx\xdc\xcdx0)\xc2\x8dD-\xa9m\xe3\xd7\x91w\x10\x8aD\xd37+\x8b\xf7\xa7\xa2\x8d{\x0c\xd8\x80\xe1<)lg\xb9\xbfr\x95^)^\x0e\xe5*\xbfGk!5/$01z\xf7\xcf\x86\x1aF\xf2V\x12\xa8w\xad\x070\xf3\x10\x86\xd6\x19\r\xdd\x88\xbe\xc4\xef\xbb\xd2\t,\xa2\xcd9\xbd\x11\x03\xed\xc9X\x98_\x00\xf5\xfa\t<\x9d\xfco/\x84\xca:\x1e\xc6A\xb0\x1f\x8d\x07\x18\x11\\WC\r\x7f\\\xa0\xea\'\xcc\x96\xc7\xd8\x9a\xb4-\r\x88\xc8\x12\x1f\x8b`\n#\x9a\x92\xa9\x86\x85z\x0ctB\xff:\xaf\xbc\xd4F\xcf$R\x8a\x81\xbd\x84\xe03F\x95\xa0\xbb\xdc\xd9\x7f\xc9\x91/\xc3\x9c~m\x9d\xbb\xfd\x8a\x80\xa8\x81\xb1VC\xf5y\x13N\xa6\x1dq\x1bn\xa0\x83\xeaQ\xe4-\xe3m\x99\xcf\xe6\xb2n\xe7\x0e\xea*\x01\xb5\xdb\xf5P\x03\x96\x82\x91\xe9\xa7\x9bm\x9c\x98\xe3j\x85UG\xd9\x0f\xb5\xb47\xd18d\x9f~VL\xa6\x98\xf2.\xf3\x821\xc8\x03\\fP\'\xee\x85\xbf\xdbd\xc1\x023\xf9\xb5D\xda\xe6Y\x0b[\x86\x9b\xbd\x96z\xe67\x05\xba\x1f\xfd\x1f\xb2F\xf2P\xbd<\xd7\xbdUj\xb1@O\xa2}\x02C\xc4\x01eu\x7f%b\xb4\xfc\xe1D\x02\x8f\xbfj\xd7~E\xd5^h\xc8\xc3\xf9\xb3\x1e\xf0\xbb\x02\xfb\x8c\xc4\xc2\xa8&xn)\x08^\xc0H\xbc\x19\xb7-a?N=?\x93\x97\xb2Q\xe0\x04`T\x1bS2\xd8\xbc3d\xef?\x1e\xab\xc2\x82\xcc\xa4\xe7\xd9\xe6\xe2\xd3\xe9Q\x83\x11\xf4\xfb\x82\xa4y\x176\xaf\xf4_\xbf\xa196\xb4\x05B\xc7\xb3\xd2\x0c\x8c\x18\x95\xe1\xba\x97=Y|\x19k\x0c\xf2\xb3\x0fAV\xd1\x04\xeffX\xcd*?\x03S\x92\x0b\x85\x00\x99x+sh\x07\xd2zl\xbbUS\xf0A\x1aS\xa1\x1fFRf\xc6\x9b\x8dV\x85\x14kE\xae\xef\x05\x18Nx\t\xc8K\xd2\xfd1\xc2\xb9H\xde:L\xd5h%c\xa5,$b\xf9\xa2\xce\xa6\xe5X\x11\xb9\x12\xe7\xd6\x1d\x1f\x03\x8e\xba\xc8>=\x8f\xca\xdf\x80U\xce\x16\xb50w\xaes\xa9)\xdd\x863f\xad2\xc6t`\xc1>\x9d;7o\xa6\xef\x08}1S\xb3\xf7\xdf\xa6\xa0@\xae=\xa3\xb8H\x89\x0f\xdd\x7f\xed\xa4\x19\xf5\x94\xc91\xb9B\xca"\x93\xc1\x05&\xbd\x8c\x82\xdf;C\xcb\xd4R\xc8>\xde\xd8j@\x81\xb6\xa7r\xe9\xb5\xb2\xe0\r:\x8d+\x89\xe1\xee\xf5Aj\x8d\xfb\xa0\xd8?\x06\x10D\xcc\xa6?@\'\xc06^\xfa^s\xe6\r\x8d\x1e\x9cv\xd6\xce\xda)Q\x7f\x83\xba\xe0\xc7R\x82\xe9\xbf\xb8\x88\x12\xe7\x13\xc4\xc4/\x8f\x1d\xde\x197\xe8\x9aFe:\xc33\x02\xbc\x85q7\xbc\xde#\x1e\xdb\x7f\xf2#\xda\x80IT,\xc5\xe7\xe7)\x1a\xb0\x0e-\xbe\xf8\x14\xee\xa1\x82\x1c\x99j\xe4}\x84\xb4\xcc\x10\x84\xean\xc8\x9f\xe7=a2\xa7\x84\xa1\x87\x00n\xd7\x9b\xd2\xe8c\xc7\x9f\xca\xbd=\xdch*\x1b\x0f\xceH\x81\xf7\xdc\x1a\x93A\xdbJ\xe3\x936\xe3\xff\xfb!\'\xe3\x1b"\xff\xc6\x1b4\x98\xde\xc1%A3\x16\x7f&\xafM\xdfX\xfb\\\x1d\x91Vp\x19\xcd\xd8\xe3$\x13J\x9c\x89\xbc~\x07O\xac?\x0c\xa6\x80yZ\xef0\xef}\x89BA\xe9k\xfa\xf9P\x97\xe5\x14\xd4+/_\xa6\xba\xf9\x04Ph\xe1\x1a\xb5=\xd6nq\xd8\x13L\x03\xd5\x19V\xd9e&\xdfJ\x99\x90\xca\xc7\x84\xfb\x08H\xa6Y\xc0T[\x87\xbeok\xb4\xeb\xca\xdb\x9d\xcf|\xbdn\x9f\xde\xb10\xecnWc\x80\x18\x07\xfb\x1eYb{Q\x0e\x0f\xfc\xcbE\xcct\xfe\xd7\x8a\xb6\x1a\x17\xba\xeb\xfdG\xdbz\xa8\xe89\xb5[\x0e\x83kO\xdc|\x14\x92\xdc3\nc\x05~e1') >>> >>> assert isinstance(pkt.innerToken.token.mechToken.value.root, GSSAPI_BLOB) >>> assert pkt.innerToken.token.mechToken.value.root.innerToken.TOK_ID == b'\x01\x00' >>> krb = pkt.innerToken.token.mechToken.value.root.innerToken.root >>> assert isinstance(krb, KRB_AP_REQ) >>> assert krb.ticket.sname.nameString == [b"cifs", b"localdc"] ###(017)=[passed] MSPAC - Parse WIN2K-PAC (real life) >>> from scapy.layers.msrpce.mspac import * >>> >>> >>> data = b'\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xd0\x01\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x12\x00\x00\x00X\x02\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00x\x00\x00\x00p\x02\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\xf0\x00\x00\x00\xe8\x02\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x08\x00\x00\x00\xd8\x03\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x1c\x00\x00\x00\xe0\x03\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x10\x04\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x1f\x1cssC\x96\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff\xff\xff\xff\x7fT=pE\xcav\xd8\x01T\xfd\xd9o\x93w\xd8\x01\xff\xff\xff\xff\xff\xff\xff\x7f\x08\x00\x08\x00\x04\x00\x02\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00\x0c\x00\x02\x00\x00\x00\x00\x00\x10\x00\x02\x00\x00\x00\x00\x00\x14\x00\x02\x00\x00\x00\x00\x00\x18\x00\x02\x00F\x00\x00\x00P\x04\x00\x00\x03\x02\x00\x00\x01\x00\x00\x00\x1c\x00\x02\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x08\x00 \x00\x02\x00\x08\x00\n\x00$\x00\x02\x00(\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00,\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00S\x00R\x00V\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x02\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00D\x00C\x001\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00D\x00O\x00M\x001\x00\x04\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\xfa*@1\xb2f\xa6\x1c\x11dp\\\x02\x00\x00\x000\x00\x02\x00\x07\x00\x00\x004\x00\x02\x00\x07\x00\x00\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\x00\x00\x01\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x12\x01\x00\x00\x00\x80\xd6^sC\x96\xd8\x01\x08\x00S\x00R\x00V\x00$\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x18\x00\x14\x008\x00\x03\x00\x00\x00\x08\x00P\x00\x1c\x00X\x00\x00\x00\x00\x00S\x00R\x00V\x00$\x00@\x00d\x00o\x00m\x001\x00.\x00l\x00o\x00c\x00a\x00l\x00\x00\x00D\x00O\x00M\x001\x00.\x00L\x00O\x00C\x00A\x00L\x00\x00\x00\x00\x00S\x00R\x00V\x00$\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\xfa*@1\xb2f\xa6\x1c\x11dp\\P\x04\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb8\x00\x00\x00\x04\x00\x02\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x04\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x08\x00\x02\x00\x01\x00\x00\x00\x0c\x00\x02\x00\x03\x00\x03\x00\x01\x00\x00\x00\x10\x00\x02\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00a\x00d\x00:\x00/\x00/\x00e\x00x\x00t\x00/\x00A\x00u\x00t\x00h\x00e\x00n\x00t\x00i\x00c\x00a\x00t\x00i\x00o\x00n\x00S\x00i\x00l\x00o\x00\x00\x00\x01\x00\x00\x00\x14\x00\x02\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00T\x000\x00-\x00s\x00i\x00l\x00o\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\xfa*@1\xb2f\xa6\x1c\x11dp\\P\x04\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00d\xb0qv\xf8\xd3X\x0b\x7f4\xfe\xda\x10\x00\x00\x00\x835J\xa7\x80\xb1S\xcez\x8b\xd2\xc2' >>> >>> pkt = PACTYPE(data) >>> assert len(pkt.Buffers) == 8 >>> assert len(pkt.Payloads) == 8 >>> assert [type(x) for x in pkt.Payloads] == [ ... NDRSerialization1Header, ... PAC_CLIENT_INFO, ... UPN_DNS_INFO, ... NDRSerialization1Header, ... PAC_ATTRIBUTES_INFO, ... PAC_REQUESTOR, ... PAC_SIGNATURE_DATA, ... PAC_SIGNATURE_DATA, ... ] >>> >>> assert pkt.Payloads[2].Upn == 'SRV$@dom1.local' >>> assert pkt.Payloads[2].DnsDomainName == 'DOM1.LOCAL' >>> assert pkt.Payloads[2].SamName == 'SRV$' >>> assert pkt.Payloads[2].Sid.summary() == 'S-1-5-21-826288890-480667314-1550869521-1104' >>> >>> assert pkt.Payloads[3].value.Claims.ClaimsSet.value.value[0].value.ClaimsArrays.value.value[0].usClaimsSourceType == 1 >>> claimentry = pkt.Payloads[3].value.Claims.ClaimsSet.value.value[0].value.ClaimsArrays.value.value[0].ClaimEntries.value.value[0] >>> assert claimentry.Id.value.value[0].value == b'ad://ext/AuthenticationSilo' >>> assert claimentry.Values.value.StringValues.value.value[0].value.value[0].value == b'T0-silo' >>> >>> assert pkt.Payloads[4].Flags[0].PAC_WAS_REQUESTED >>> >>> assert pkt.Payloads[5].Sid.summary() == 'S-1-5-21-826288890-480667314-1550869521-1104' >>> >>> assert pkt.Payloads[6].SignatureType == 16 >>> assert pkt.Payloads[6].Signature == b'd\xb0qv\xf8\xd3X\x0b\x7f4\xfe\xda' >>> >>> assert pkt.Payloads[7].SignatureType == 16 >>> assert pkt.Payloads[7].Signature == b'\x835J\xa7\x80\xb1S\xcez\x8b\xd2\xc2' ###(018)=[passed] MSPAC - Parse WIN2K-PAC (MS-PAC sect 3) >>> data = b'0\x82\x05R0\x82\x05N\xa0\x04\x02\x02\x00\x80\xa1\x82\x05D\x04\x82\x05@\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb0\x04\x00\x00H\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x12\x00\x00\x00\xf8\x04\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00\x10\x05\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00(\x05\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xcc\xcc\xcc\xcc\xa0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xd1\x86f\x0fej\xc6\x01\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff\xff\xff\xff\x7f\x17\xd49\xfexJ\xc6\x01\x17\x94\xa3(BK\xc6\x01\x17T$\x97z\x81\xc6\x01\x08\x00\x08\x00\x04\x00\x02\x00$\x00$\x00\x08\x00\x02\x00\x12\x00\x12\x00\x0c\x00\x02\x00\x00\x00\x00\x00\x10\x00\x02\x00\x00\x00\x00\x00\x14\x00\x02\x00\x00\x00\x00\x00\x18\x00\x02\x00T\x10\x00\x00\x97y,\x00\x01\x02\x00\x00\x1a\x00\x00\x00\x1c\x00\x02\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x18\x00 \x00\x02\x00\n\x00\x0c\x00$\x00\x02\x00(\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00,\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00l\x00z\x00h\x00u\x00\x12\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00L\x00i\x00q\x00i\x00a\x00n\x00g\x00(\x00L\x00a\x00r\x00r\x00y\x00)\x00 \x00Z\x00h\x00u\x00\t\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00n\x00t\x00d\x00s\x002\x00.\x00b\x00a\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00a\xc43\x00\x07\x00\x00\x00\t\xc3-\x00\x07\x00\x00\x00^\xb42\x00\x07\x00\x00\x00\x01\x02\x00\x00\x07\x00\x00\x00\x97\xb9,\x00\x07\x00\x00\x00+\xf12\x00\x07\x00\x00\x00\xce03\x00\x07\x00\x00\x00\xa7..\x00\x07\x00\x00\x00*\xf12\x00\x07\x00\x00\x00\x98\xb9,\x00\x07\x00\x00\x00b\xc43\x00\x07\x00\x00\x00\x94\x013\x00\x07\x00\x00\x00v\xc43\x00\x07\x00\x00\x00\xae\xfe-\x00\x07\x00\x00\x002\xd2,\x00\x07\x00\x00\x00\x16\x082\x00\x07\x00\x00\x00B[.\x00\x07\x00\x00\x00_\xb42\x00\x07\x00\x00\x00\xca\x9c5\x00\x07\x00\x00\x00\x85D-\x00\x07\x00\x00\x00\xc2\xf02\x00\x07\x00\x00\x00\xe9\xea1\x00\x07\x00\x00\x00\xed\x8e.\x00\x07\x00\x00\x00\xb6\xeb1\x00\x07\x00\x00\x00\xab..\x00\x07\x00\x00\x00r\x0e.\x00\x07\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00N\x00T\x00D\x00E\x00V\x00-\x00D\x00C\x00-\x000\x005\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00N\x00T\x00D\x00E\x00V\x00\x00\x00\x04\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\r\x00\x00\x000\x00\x02\x00\x07\x00\x00\x004\x00\x02\x00\x07\x00\x00 8\x00\x02\x00\x07\x00\x00 <\x00\x02\x00\x07\x00\x00 @\x00\x02\x00\x07\x00\x00 D\x00\x02\x00\x07\x00\x00 H\x00\x02\x00\x07\x00\x00 L\x00\x02\x00\x07\x00\x00 P\x00\x02\x00\x07\x00\x00 T\x00\x02\x00\x07\x00\x00 X\x00\x02\x00\x07\x00\x00 \\\x00\x02\x00\x07\x00\x00 `\x00\x02\x00\x07\x00\x00 \x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\xb90\x1b.\xb7ALl\x8c;5\x15\x01\x02\x00\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0btT/\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\xe882\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\xcd82\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b]\xb42\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0bA\x165\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\xe8\xea1\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\xc1\x192\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b)\xf12\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\x0f_.\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b/[.\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\xef\x8f1\x00\x05\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00YQ\xb8\x17fr]%dc;\x0b\x07_.\x00\x00\x00\x00\x00\x00I\xd9\x0eej\xc6\x01\x08\x00l\x00z\x00h\x00u\x00\x00\x00\x00\x00\x00\x00v\xff\xff\xffA\xed\xce\x9a4\x81]:\xef{\xc9\x88t\x80]%\x00\x00\x00\x00v\xff\xff\xff\xf7\xa54\xda\xb2\xc0)\x86\xef\xe0\xfb\xe5\x11\nO2\x00\x00\x00\x00' >>> >>> pkt = AuthorizationData(data) >>> >>> assert isinstance(pkt.seq[0].adData.Payloads[0], NDRSerialization1Header) >>> k = pkt.seq[0].adData.Payloads[0].value >>> assert isinstance(k, KERB_VALIDATION_INFO) >>> assert k.EffectiveName.Buffer.value.value[0].value == b'lzhu' >>> assert k.LogonDomainName.Buffer.value.value[0].value == b"NTDEV" >>> assert "S%s" % "-".join(str(x) for x in k.LogonDomainId.value.SubAuthority) == 'S21-397955417-626881126-188441444' >>> assert len(k.ExtraSids.value.value) == 13 >>> assert [x.RelativeId for x in k.GroupIds.value.value] == [3392609, 2999049, 3322974, 513, 2931095, 3338539, 3354830, 3026599, 3338538, 2931096, 3392610, 3342740, 3392630, 3014318, 2937394, 3278870, 3038018, 3322975, 3513546, 2966661, 3338434, 3271401, 3051245, 3271606, 3026603, 3018354] >>> >>> >>> assert isinstance(pkt.seq[0].adData.Payloads[1], PAC_CLIENT_INFO) >>> assert pkt.seq[0].adData.Payloads[1].Name == 'lzhu' >>> >>> assert isinstance(pkt.seq[0].adData.Payloads[2], PAC_SIGNATURE_DATA) >>> assert len(pkt.seq[0].adData.Payloads[2].Signature) == 16 >>> >>> assert isinstance(pkt.seq[0].adData.Payloads[3], PAC_SIGNATURE_DATA) >>> assert pkt.seq[0].adData.Payloads[3].Signature == b'\xf7\xa54\xda\xb2\xc0)\x86\xef\xe0\xfb\xe5\x11\nO2' ###(019)=[passed] MSPAC - Build WIN2K-PAC (MS-PAC sect 3) >>> pkt = PACTYPE( ... Buffers=[ ... PAC_INFO_BUFFER(ulType=1, cbBufferSize=1200, Offset=72), ... PAC_INFO_BUFFER(ulType=10, cbBufferSize=18, Offset=1272), ... PAC_INFO_BUFFER(ulType=6, cbBufferSize=20, Offset=1296), ... PAC_INFO_BUFFER(ulType=7, cbBufferSize=20, Offset=1320), ... ], ... Payloads=[ ... NDRSerialization1Header( ... Version=1, ... Endianness=16, ... CommonHeaderLength=8, ... Filler=3435973836, ... ) ... / NDRSerialization1PrivateHeader(ObjectBufferLength=1184, Filler=0) ... / NDRPointer( ... referent_id=131072, ... value=KERB_VALIDATION_INFO( ... LogonTime=FILETIME(dwLowDateTime=258377425, dwHighDateTime=29780581), ... LogoffTime=FILETIME( ... dwLowDateTime=4294967295, dwHighDateTime=2147483647 ... ), ... KickOffTime=FILETIME( ... dwLowDateTime=4294967295, dwHighDateTime=2147483647 ... ), ... PasswordLastSet=FILETIME( ... dwLowDateTime=4265202711, dwHighDateTime=29772408 ... ), ... PasswordCanChange=FILETIME( ... dwLowDateTime=681808919, dwHighDateTime=29772610 ... ), ... PasswordMustChange=FILETIME( ... dwLowDateTime=2535740439, dwHighDateTime=29786490 ... ), ... EffectiveName=RPC_UNICODE_STRING( ... Length=8, ... MaximumLength=8, ... Buffer=NDRPointer( ... referent_id=131076, ... value=NDRConformantArray( ... max_count=4, ... value=[ ... NDRVaryingArray(offset=0, actual_count=4, value=b"lzhu") ... ], ... ), ... ), ... ), ... FullName=RPC_UNICODE_STRING( ... Length=36, ... MaximumLength=36, ... Buffer=NDRPointer( ... referent_id=131080, ... value=NDRConformantArray( ... max_count=18, ... value=[ ... NDRVaryingArray( ... offset=0, ... actual_count=18, ... value=b"Liqiang(Larry) Zhu", ... ) ... ], ... ), ... ), ... ), ... LogonScript=RPC_UNICODE_STRING( ... Length=18, ... MaximumLength=18, ... Buffer=NDRPointer( ... referent_id=131084, ... value=NDRConformantArray( ... max_count=9, ... value=[ ... NDRVaryingArray( ... offset=0, ... actual_count=9, ... value=b"ntds2.bat", ... ) ... ], ... ), ... ), ... ), ... ProfilePath=RPC_UNICODE_STRING( ... Length=0, ... MaximumLength=0, ... Buffer=NDRPointer( ... referent_id=131088, ... value=NDRConformantArray( ... max_count=0, ... value=[ ... NDRVaryingArray(offset=0, actual_count=0, value=b"") ... ], ... ), ... ), ... ), ... HomeDirectory=RPC_UNICODE_STRING( ... Length=0, ... MaximumLength=0, ... Buffer=NDRPointer( ... referent_id=131092, ... value=NDRConformantArray( ... max_count=0, ... value=[ ... NDRVaryingArray(offset=0, actual_count=0, value=b"") ... ], ... ), ... ), ... ), ... HomeDirectoryDrive=RPC_UNICODE_STRING( ... Length=0, ... MaximumLength=0, ... Buffer=NDRPointer( ... referent_id=131096, ... value=NDRConformantArray( ... max_count=0, ... value=[ ... NDRVaryingArray(offset=0, actual_count=0, value=b"") ... ], ... ), ... ), ... ), ... UserSessionKey=USER_SESSION_KEY( ... data=[ ... CYPHER_BLOCK(data=b"\x00\x00\x00\x00\x00\x00\x00\x00"), ... CYPHER_BLOCK(data=b"\x00\x00\x00\x00\x00\x00\x00\x00"), ... ] ... ), ... LogonServer=RPC_UNICODE_STRING( ... Length=22, ... MaximumLength=24, ... Buffer=NDRPointer( ... referent_id=131104, ... value=NDRConformantArray( ... max_count=12, ... value=[ ... NDRVaryingArray( ... offset=0, ... actual_count=11, ... value=b"NTDEV-DC-05", ... ) ... ], ... ), ... ), ... ), ... LogonDomainName=RPC_UNICODE_STRING( ... Length=10, ... MaximumLength=12, ... Buffer=NDRPointer( ... referent_id=131108, ... value=NDRConformantArray( ... max_count=6, ... value=[ ... NDRVaryingArray( ... offset=0, actual_count=5, value=b"NTDEV" ... ) ... ], ... ), ... ), ... ), ... Reserved1=[0, 0], ... Reserved3=[0, 0, 0, 0, 0, 0, 0], ... LogonCount=4180, ... BadPasswordCount=0, ... UserId=2914711, ... PrimaryGroupId=513, ... GroupCount=26, ... GroupIds=NDRPointer( ... referent_id=131100, ... value=NDRConformantArray( ... max_count=26, ... value=[ ... GROUP_MEMBERSHIP(RelativeId=3392609, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=2999049, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3322974, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=513, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=2931095, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3338539, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3354830, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3026599, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3338538, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=2931096, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3392610, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3342740, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3392630, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3014318, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=2937394, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3278870, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3038018, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3322975, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3513546, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=2966661, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3338434, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3271401, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3051245, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3271606, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3026603, Attributes=7), ... GROUP_MEMBERSHIP(RelativeId=3018354, Attributes=7), ... ], ... ), ... ), ... UserFlags=32, ... LogonDomainId=NDRPointer( ... referent_id=131112, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[21, 397955417, 626881126, 188441444], ... max_count=4, ... Revision=1, ... SubAuthorityCount=4, ... ), ... ), ... UserAccountControl=16, ... SidCount=13, ... ExtraSids=NDRPointer( ... referent_id=131116, ... value=NDRConformantArray( ... max_count=13, ... value=[ ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131120, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 773533881, ... 1816936887, ... 355810188, ... 513, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=7, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131124, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3101812, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131128, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3291368, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131132, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3291341, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131136, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3322973, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131140, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3479105, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131144, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3271400, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131148, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3283393, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131152, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3338537, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131156, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3038991, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131160, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3037999, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131164, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3248111, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... KERB_SID_AND_ATTRIBUTES( ... Sid=NDRPointer( ... referent_id=131168, ... value=SID( ... IdentifierAuthority=RPC_SID_IDENTIFIER_AUTHORITY( ... Value=b"\x00\x00\x00\x00\x00\x05" ... ), ... SubAuthority=[ ... 21, ... 397955417, ... 626881126, ... 188441444, ... 3038983, ... ], ... max_count=5, ... Revision=1, ... SubAuthorityCount=5, ... ), ... ), ... Attributes=536870919, ... ), ... ], ... ), ... ), ... ResourceGroupDomainSid=None, ... ResourceGroupCount=0, ... ResourceGroupIds=None, ... ), ... ) ... / Padding(), ... PAC_CLIENT_INFO(ClientId=127906621700000000, NameLength=8, Name="lzhu"), ... PAC_SIGNATURE_DATA( ... SignatureType=4294967158, ... Signature=b"A\xed\xce\x9a4\x81]:\xef{\xc9\x88t\x80]%", ... RODCIdentifier=b"", ... ), ... PAC_SIGNATURE_DATA( ... SignatureType=4294967158, ... Signature=b"\xf7\xa54\xda\xb2\xc0)\x86\xef\xe0\xfb\xe5\x11\nO2", ... RODCIdentifier=b"", ... ), ... ], ... cBuffers=4, ... Version=0, ... ) >>> >>> assert raw(pkt) == data[22:] ###(020)=[passed] MSPAC - Dissect and rebuild UPN_DNS_INFO >>> from scapy.layers.msrpce.mspac import UPN_DNS_INFO >>> >>> data = b'4\x00\x18\x00\x18\x00P\x00\x03\x00\x00\x00\x1a\x00h\x00\x1c\x00\x88\x00\x00\x00\x00\x00A\x00d\x00m\x00i\x00n\x00i\x00s\x00t\x00r\x00a\x00t\x00o\x00r\x00@\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x00\x00\x00\x00D\x00O\x00M\x00A\x00I\x00N\x00.\x00L\x00O\x00C\x00A\x00L\x00A\x00d\x00m\x00i\x00n\x00i\x00s\x00t\x00r\x00a\x00t\x00o\x00r\x00\x00\x00\x00\x00\x00\x00\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\xfe\x00\xb0r\x02\n\xa6\xdd\xa9\xa4e\x02\xf4\x01\x00\x00\x00\x00\x00\x00' >>> >>> pkt = UPN_DNS_INFO(data) >>> >>> assert pkt.Upn == 'Administrator@domain.local' >>> assert pkt.DnsDomainName == 'DOMAIN.LOCAL' >>> assert pkt.SamName == 'Administrator' >>> assert pkt.Sid.summary() == 'S-1-5-21-1924137214-3718646274-40215721-500' >>> assert isinstance(pkt.payload, Raw) and pkt.load == b"\x00\x00\x00\x00" >>> >>> pkt.clear_cache() >>> assert bytes(pkt) == data ###### ## Build a CLAIMS_SET to test size_of ###### ###(021)=[passed] MSPAC - Construct a CLAIMS_SET object >>> from scapy.layers.msrpce.mspac import * >>> >>> claimSet = CLAIMS_SET( ... ClaimsArrays=[ ... CLAIMS_ARRAY( ... usClaimsSourceType=1, ... ClaimEntries=[ ... CLAIM_ENTRY( ... Id="ad://ext/AuthenticationSilo", ... Type=3, ... Values=NDRUnion( ... tag=3, ... value=CLAIM_ENTRY_sub2( ... StringValues=["T0-silo"], ... ), ... ), ... ) ... ], ... ) ... ], ... usReservedType=0, ... ulReservedFieldSize=0, ... ReservedField=None, ... ) ###(022)=[passed] MSPAC - Check that Pointers, Arrays, etc. were inferred >>> assert isinstance(claimSet.ClaimsArrays, NDRPointer) >>> assert isinstance(claimSet.ClaimsArrays.value, NDRConformantArray) >>> assert isinstance(claimSet.ClaimsArrays.value.value[0].ClaimEntries, NDRPointer) >>> assert isinstance(claimSet.ClaimsArrays.value.value[0].ClaimEntries.value, NDRConformantArray) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values, NDRUnion) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values.value.StringValues, NDRPointer) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values.value.StringValues.value, NDRConformantArray) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values.value.StringValues.value.value[0], NDRPointer) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values.value.StringValues.value.value[0].value, NDRConformantArray) >>> assert isinstance(claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].Values.value.StringValues.value.value[0].value.value[0], NDRVaryingArray) >>> assert claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].valueof("Values").valueof("StringValues")[0] == b'T0-silo' ###(023)=[passed] MSPAC - Build the packet >>> assert bytes(claimSet) == b'\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x02\x00\x03\x00\x03\x00\x01\x00\x00\x00\x00\x00\x02\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00a\x00d\x00:\x00/\x00/\x00e\x00x\x00t\x00/\x00A\x00u\x00t\x00h\x00e\x00n\x00t\x00i\x00c\x00a\x00t\x00i\x00o\x00n\x00S\x00i\x00l\x00o\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00T\x000\x00-\x00s\x00i\x00l\x00o\x00\x00\x00' ###(024)=[passed] MSPAC - Dissect the packet >>> claimSet = CLAIMS_SET(bytes(claimSet), ndr64=False) >>> >>> assert claimSet.ClaimsArrays.value.value[0].ClaimEntries.value.value[0].Id.value.value[0].value == b'ad://ext/AuthenticationSilo' >>> assert claimSet.ClaimsArrays.value.value[0].ClaimEntries.value.value[0].Type == 3 >>> assert claimSet.ClaimsArrays.value.value[0].ClaimEntries.value.value[0].Values.value.ValueCount == 1 >>> assert claimSet.valueof("ClaimsArrays")[0].valueof("ClaimEntries")[0].valueof("Values").valueof("StringValues")[0] == b'T0-silo' ###### ## Ticketer++ tests ###### ###(025)=[passed] Ticketer++ - Load ticketer module >>> from scapy.modules.ticketer import * ###(026)=[passed] Ticketer++ - Write ccache to disk >>> from scapy.utils import get_temp_file >>> >>> CCACHE_DATA = bytes.fromhex("0504000c00010008ffffffff0000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000002000000020000000c444f4d41494e2e4c4f43414c000000066b72627467740000000c444f4d41494e2e4c4f43414c0012000000208b4226a190866cbe345ae5e668823edd5359cb00bd479a6428bc8feb1ba55752633332fa633332fa6333bf9a633484770050e100000000000000000000000004486182044430820440a003020105a10e1b0c444f4d41494e2e4c4f43414ca221301fa003020102a11830161b066b72627467741b0c444f4d41494e2e4c4f43414ca382040430820400a003020112a103020102a28203f2048203ee662c2aefcca3f8c78de38e1af1d63b18de011d864d9bec12f3c11e20b0bbdc46e6f5c8311b331b1cc27b23193e90fa47ba7aa6a67fba5826a1f4754ea5050eeab2e07d07a3ec1029b2a11e058ce31e48f4de2bce017e9c2915ee40ffa0f7109597088286fa290fe6ca777465162c5757a67cc53a8e3204846a4ca9cff30c8073d1e9e735b5eb22717f9777c2f38fb13d204952db15e4f160e26535f596f3ce64f9a8d96011718d0405650d7f7c728f87dd2d0e220e4610347faa8a45099b63a351f5adcfccf669d9b6112e31881af869561294a21eb6e2b164b8ce6c6c7b0327ec6c71c23784b06c19030a3f81119f377cb6f0395b5477bffbc5c1a2264ec4af76f4b39a4e2f7030d48c8ebbcaf212036ea0a5abdd5da91fcdc3fb9700d5379f03fbc9fe3a47078dae30b05a418f46ee9ea25f520eb7e67b53d96f7f486e5878b22ea8f4215137a7dcf7f4b6f50463715d9d3c544f294420ed0f7426955fa0a527efce86264f7c29bdfc2cee2c3eb227eb4b7651eb8008e0eb269446a45488296b0427f82b959ad070146cd8a9aed9ef236815bd2149f3f86d73227584f294dc86cf4a77e4eeabf98f4f342dbfc4beb46d834b0c3103d8c5964cad4852eed365ca8e50937e21976122d5cde18c5ab6dd5528c3a680c0a219711766dd5b6a3c103ae65ad5f573a31543a0ebcefde1749062951030f63907cde092010c22c90763248c9f6cd03a6f0a7cb9a7b7441bc7de4c40c1d749373afee597a52c9dbe7533d7ba24a3a26df29474b93643eed97f6b8ffd13976869844841bdd364f2454d6e3ce1ae677ec01c592c25b50e120303240ddaac82dfa9d63b1c42c239b78a6c4ebba2b6458b924931c52b223b9c9cfd6cf0f083e6239e30747f1302de8bde94fe8756b5e0118f5ed61dccc3862ddbc93f103c3160ac15858cbe330420d6e07e2c9f242c2caf8f04d83f3cd71f404c1d56814c9e2aa787763abc295334299487f454e4b4eb5f0e7c3cf5e377374acf827c9fe255e1c7cdb13129ef07c731164ee4eed503f735829a8b7cc2e3718db23d85838fbf7a43861a1c8f890e4c33437b65749946b46f6cff1767158f5684b035f2ea086f7b564f6a57050714b4cad5165b72be6f7a6820b2e9f8936506147e64a77a2f9cf9c13fe4fd59b83191898101068a003e6f7f918006616204ff4b18a9bf495497ba0df0dfcbb89a5e643c60637667357fcf1d97b424240ea75fcf0d26bb159055107f80d1bc682c9057f22a3ef5fb0f50adb30ba975b25069d393bf7eb2522f230912ac1e64bba93c91aa760abb1209bb1313e38dddebcac325d27bef99d66045c09799b71020a44f64bbb59c405449304fd95b8d6bdc6d17e476cba188f30ad04bb6c91d91b028b0953986929a9fb42b21f73028c8ba1f416c70630000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000000000000030000000c582d4341434845434f4e463a000000156b7262355f6363616368655f636f6e665f646174610000000770615f74797065000000206b72627467742f444f4d41494e2e4c4f43414c40444f4d41494e2e4c4f43414c0000000000000000000000000000000000000000000000000000000000000000000000000000013200000000") >>> KRBTGT = bytes.fromhex("6df5a9a90cb076f4d232a123d9c24f46ae11590a5430710bc1881dca337989ce") >>> >>> TICKETER_TEMPFILE = get_temp_file() >>> >>> with open(TICKETER_TEMPFILE, "wb") as fd: ... fd.write(CCACHE_DATA) ... 1500 ###(027)=[passed] Ticketer++ - Create and load Ticketer object >>> t = Ticketer() >>> t.open_ccache(TICKETER_TEMPFILE) ###(028)=[passed] Ticketer++ - Get ticket 0, change it, resign it and set it back >>> from unittest import mock >>> >>> def fake_random(x): ... # wow, impressive entropy ... return b"0" * x ... >>> with mock.patch('scapy.libs.rfc3961.os.urandom', side_effect=fake_random): ... tkt = t.dec_ticket(0, hash=KRBTGT) ... assert tkt.renewTill.val == '20220928172927Z' ... tkt.renewTill.val = '20220930172927Z' ... t.update_ticket(0, tkt, resign=True, hash=KRBTGT, kdc_hash=KRBTGT) ... ###(029)=[passed] Ticketer++ - Call show() with ccache >>> with ContextManagerCaptureOutput() as cmco: ... t.show(utc=True) ... outp = cmco.get_output().strip() ... >>> print(outp) CCache tickets: 0. Administrator@DOMAIN.LOCAL -> krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL canonicalize+pre-authent+initial+renewable+proxiable+forwardable Start time End time Renew until Auth time 27/09/22 17:29:30 28/09/22 03:29:30 30/09/22 17:29:27 27/09/22 17:29:30 >>> >>> assert outp == """ ... CCache tickets: ... 0. Administrator@DOMAIN.LOCAL -> krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL ... canonicalize+pre-authent+initial+renewable+proxiable+forwardable ... Start time End time Renew until Auth time ... 27/09/22 17:29:30 28/09/22 03:29:30 30/09/22 17:29:27 27/09/22 17:29:30 ... """.strip() ###(030)=[passed] Ticketer++ - Save to disk >>> t.save_ccache() 1500 ###(031)=[passed] Ticketer++ - Read and check written ccache >>> EXPECTED_CCACHE_DATA = bytes.fromhex("0504000c00010008ffffffff0000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000002000000020000000c444f4d41494e2e4c4f43414c000000066b72627467740000000c444f4d41494e2e4c4f43414c0012000000208b4226a190866cbe345ae5e668823edd5359cb00bd479a6428bc8feb1ba55752633332fa633332fa6333bf9a633727770050e100000000000000000000000004486182044430820440a003020105a10e1b0c444f4d41494e2e4c4f43414ca221301fa003020102a11830161b066b72627467741b0c444f4d41494e2e4c4f43414ca382040430820400a003020112a103020102a28203f2048203eed3d1adb3a09042173463eb0ef195beb666adbaa83193905697db7340daa9fc6cd3450280651effddc129b3761d49569f3c384e450db9ef094b4619d2036126a0b1b44c983e46664ee28cdb8fc33b52d14d2a8357f6c37b31bec5074ee6ee5ab74a896460c767411d0532c6cb69e0da698054ef8f8bf87fb9e8d2d289ec1b22d1ec602ce71c80b98a14aff448374054d4987c0bd13127914a0191d93c3440b5209c4f2190c80d21e064e6f71ab269ab9c0dbf6533e8e29068a3c686b6377d3c79c902818f12a400eabd8f8bb35bce837e9cb0a4413db223bf22e13bee81eb6a4170ae863fd7082db8dac81b70f96c7880c6d5f8350209aa090b75f6343635ba01e9fafdc7700ee84bd9ae0497517ce69b89e44b3933ea3b1a6c36bd38699eba195bb22f0e694b9e952fc187cf7ee5e02b05ec2397e76c217da3c328eeccf5d4ffbe77a765127fc2828e5c8edc1987cb7fbfcfecbb308f4858f711c52ada9c3622dd43d47c29b30630ecf51b9e88cefcf06cb7862922c36a81ae09ec9f62f406f6d4a269cec849a2fe872a16026dce242c775870d827450700c9defdd204342ea1e7d72c5b1c8d92b0318f298898b19a2c705722837c2ff569fc796d55b779950be0db9955d57d349c7d7688b81b9219e376098a2902e23cd01d7bf7734089ab08bc30a7fd2d138aea4454084e3e14d76119e2ef4da6fff3b5758c58efe2904491f6dd57a7eb777aa847783b6ef905c8c796889e6d7e89952a2cef7f99d09405a07b6897291d13eb3a0c4280601b4f4d5cbd00a0125fb87eeb522cd90a8b046163c076a61115e1affe3e362700d984747f1372c92beeb3e1ce4b97ceac032ac8988c536a9594f9032463750f78ca30161e4910d8ff3810d7d4da60d90fded2fcda92a4d6a7b776ba82370130807a30ab0b648f50537453de6c575cc6c98847ae1aa342c3b324005c3988e6cfb161b5b39153cdbd7a305c4cc0949e47197673cd72c29f41f383a7c2b241bd0e70d736f6e342b88128cc38f964588aa32b860dd788a43fb91d4d934401434d6d9e6c622e58a9d99e02331ca642cd9c435305ddbf949751b8c2617489a4cefe376920b7803d493e61d4fdc41f2f6fe50bf5919ede1295eaab25db71aa6e98bbc80a32d7acc24f9cc9b651cb72d22b17031a1d03fd9166c5f488924689aa4859094b42b72c4bf467a1fdb826289bde90035aff2322c68a34b350b0b3b2818c656701b359cbfdb7eb5665439a4deb2cc95bacc358a693f2d0e31975653665fdc468d627c6eee589bbc46bd019a70e394c90529abe646105623c43956c86bf366e4be1f3560b2e4ca01f1e25432618573a9f257890a435e899724eebd9fd271abefeae2f0a55f3abb4619b9ded206bf70ac3b77622d114309e49bb42d01e8c8678765ab4b80000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000000000000030000000c582d4341434845434f4e463a000000156b7262355f6363616368655f636f6e665f646174610000000770615f74797065000000206b72627467742f444f4d41494e2e4c4f43414c40444f4d41494e2e4c4f43414c0000000000000000000000000000000000000000000000000000000000000000000000000000013200000000") >>> >>> with open(TICKETER_TEMPFILE, "rb") as fd: ... RESULT = fd.read() ... >>> print(RESULT.hex()) 0504000c00010008ffffffff0000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000002000000020000000c444f4d41494e2e4c4f43414c000000066b72627467740000000c444f4d41494e2e4c4f43414c0012000000208b4226a190866cbe345ae5e668823edd5359cb00bd479a6428bc8feb1ba55752633332fa633332fa6333bf9a633727770050e100000000000000000000000004486182044430820440a003020105a10e1b0c444f4d41494e2e4c4f43414ca221301fa003020102a11830161b066b72627467741b0c444f4d41494e2e4c4f43414ca382040430820400a003020112a103020102a28203f2048203eed3d1adb3a09042173463eb0ef195beb666adbaa83193905697db7340daa9fc6cd3450280651effddc129b3761d49569f3c384e450db9ef094b4619d2036126a0b1b44c983e46664ee28cdb8fc33b52d14d2a8357f6c37b31bec5074ee6ee5ab74a896460c767411d0532c6cb69e0da698054ef8f8bf87fb9e8d2d289ec1b22d1ec602ce71c80b98a14aff448374054d4987c0bd13127914a0191d93c3440b5209c4f2190c80d21e064e6f71ab269ab9c0dbf6533e8e29068a3c686b6377d3c79c902818f12a400eabd8f8bb35bce837e9cb0a4413db223bf22e13bee81eb6a4170ae863fd7082db8dac81b70f96c7880c6d5f8350209aa090b75f6343635ba01e9fafdc7700ee84bd9ae0497517ce69b89e44b3933ea3b1a6c36bd38699eba195bb22f0e694b9e952fc187cf7ee5e02b05ec2397e76c217da3c328eeccf5d4ffbe77a765127fc2828e5c8edc1987cb7fbfcfecbb308f4858f711c52ada9c3622dd43d47c29b30630ecf51b9e88cefcf06cb7862922c36a81ae09ec9f62f406f6d4a269cec849a2fe872a16026dce242c775870d827450700c9defdd204342ea1e7d72c5b1c8d92b0318f298898b19a2c705722837c2ff569fc796d55b779950be0db9955d57d349c7d7688b81b9219e376098a2902e23cd01d7bf7734089ab08bc30a7fd2d138aea4454084e3e14d76119e2ef4da6fff3b5758c58efe2904491f6dd57a7eb777aa847783b6ef905c8c796889e6d7e89952a2cef7f99d09405a07b6897291d13eb3a0c4280601b4f4d5cbd00a0125fb87eeb522cd90a8b046163c076a61115e1affe3e362700d984747f1372c92beeb3e1ce4b97ceac032ac8988c536a9594f9032463750f78ca30161e4910d8ff3810d7d4da60d90fded2fcda92a4d6a7b776ba82370130807a30ab0b648f50537453de6c575cc6c98847ae1aa342c3b324005c3988e6cfb161b5b39153cdbd7a305c4cc0949e47197673cd72c29f41f383a7c2b241bd0e70d736f6e342b88128cc38f964588aa32b860dd788a43fb91d4d934401434d6d9e6c622e58a9d99e02331ca642cd9c435305ddbf949751b8c2617489a4cefe376920b7803d493e61d4fdc41f2f6fe50bf5919ede1295eaab25db71aa6e98bbc80a32d7acc24f9cc9b651cb72d22b17031a1d03fd9166c5f488924689aa4859094b42b72c4bf467a1fdb826289bde90035aff2322c68a34b350b0b3b2818c656701b359cbfdb7eb5665439a4deb2cc95bacc358a693f2d0e31975653665fdc468d627c6eee589bbc46bd019a70e394c90529abe646105623c43956c86bf366e4be1f3560b2e4ca01f1e25432618573a9f257890a435e899724eebd9fd271abefeae2f0a55f3abb4619b9ded206bf70ac3b77622d114309e49bb42d01e8c8678765ab4b80000000000000001000000010000000c444f4d41494e2e4c4f43414c0000000d41646d696e6973747261746f7200000000000000030000000c582d4341434845434f4e463a000000156b7262355f6363616368655f636f6e665f646174610000000770615f74797065000000206b72627467742f444f4d41494e2e4c4f43414c40444f4d41494e2e4c4f43414c0000000000000000000000000000000000000000000000000000000000000000000000000000013200000000 >>> >>> assert RESULT == EXPECTED_CCACHE_DATA ###(032)=[passed] Ticketer++ - Import ticket >>> TKT = KRB_Ticket(bytes.fromhex("618204b3308204afa003020105a10e1b0c444f4d41494e2e4c4f43414ca221301fa003020102a11830161b066b72627467741b0c444f4d41494e2e4c4f43414ca38204733082046fa003020112a103020103a28204610482045dbd10c11e1def682dc3607c98db0806acf2809a1f8c73fda44f86c14bd039c4c95a41ed400ac4e558970c51316ffdf34bd695a636bcb1e5074419d083e918085ec56ff77af9f6a410faff3b9859a635184486c83521b5390ec724185057e3e62843a92d9ba500dd24d9ebeff0654fe459cf35d9607b11f7c35bf6ba4dd378fd5c99554650296abcc374c3ff2fcf807038848f351e9134f69726b5e92aec99e4aa99613c35609b0094b533811513e9ba48b9113f0f2b4dbcf9e05a6668c998c09f65ae48c8ea1b7fbc62b5cbbec7decc0a4832df93aec08c138a63621f8c584a8530a380b54b37fdb8dda6924e4260710cf8b66c71479dcb6916790c5c582b9953cab7085178e280d182a74f93fcd3bc83a0dc26284551a4d230a50a8b341de132fdf0f97bb7abdec48021e04c3deda89897c684d5603636bd66842ed4b2586f8e09fbb5e0228bcce3e5ffc82e5674f16a65a4f1b7b17b3854a5465734a5fec573c54526f27b9ea8a64646f01268b040d09f2acda82a37fb195cb24f8c1092919574999fd61d859aed2af5a9457a20a72e6188c0d813cb12713779f84f7bed298e2cd793b06e639d859b4fb3a5f746e2023bcf0627a8a87425899aa3a9b63f558965eccabc35330562b055426e2fc6808c456ee8f047d09a7021b6a4f2547cde6552224b294750efd492ea0745035f76a394d5b6e26442e5542b4d557722ee21b70c05567241ed97dffb31502d950c50462f478fccd8454ec38424688e87c4428c3763b369f1b51509ef36548dcf7a5c842475aa65bec10d6f86cecd90e4694f36d68052b55a2715c00e269c215071311482118ed0168fabb3053ad59dcdf42a42502685cdfcc679d2272dd12ab658ff8588b34cb48b3aef4a1961694ab2b31a812a683015ed343a8c21498997b0ded3767f73e069c9633845b582d6f1a987d6b09d31b330a3cbf2c430fb6f5d6fa27f83d9624b7bb8cebc248933b68dbe1b6b2822b96621159d9249ded893cbedcf1fc5ee77cb69695852170b24ea2f36aa898a24212b2edf84459a4381bd243797b9a3281d7e1b280f6add79dbb1cc5d887178d0813549a168a38be441bb387764098c4e7bed81f7973ee19e733767a4dd05212a18b12c838c674c18b0d6304a28be3de7928ffdd1449d297884c6a6a574b13a0d289425c1ebf37c5af56d04753fcc0c02fdcc98427fb9aa33510905ba2b6746a8b59742e4243f6fba814585b122794a54aecba3ea956a0c85fded2582cb4809ee7be471253f0256503636e81f35df38b177c3c071677e1dd9efa6b10c6a122ab0522f2b10e8b625355f5c1e7996c7055237182691ede31a5e602966f90c2a66bdf997872dbdc97155d723bc1fb187bd0f42cbcdedbe2c5717d13e27e2134ac6cd9d3a53cd215344a8278065da4eea7544860eda5fdb41f849ff7c1db775f7a0a62d2875b43b55bc091e8056666507dfcaded40a83211db7a5856d4c9b5e2ef862830cef8a4c36ce034e9a9e11f558f008cdbe4152081c30dae53b6de44e1703236490cfc87be9e96fa0679f87255069994a262d61d57be0382fe9e570")) >>> >>> t = Ticketer() >>> t.import_krb(TKT, hash=bytes.fromhex("dd4e16dbcfe19d82cb6fc9b593bb7449c1d8a46687dc20c295ed0e51cc4c3d0d")) >>> >>> tkt, _, upn, spn = t.export_krb(0) >>> hexdiff(tkt, TKT) Complexity is a bit high. hexdiff will take a few seconds. 0000 0000 61 82 04 B3 30 82 04 AF A0 03 02 01 05 A1 0E 1B a...0........... 0010 0010 0C 44 4F 4D 41 49 4E 2E 4C 4F 43 41 4C A2 21 30 .DOMAIN.LOCAL.!0 0020 0020 1F A0 03 02 01 02 A1 18 30 16 1B 06 6B 72 62 74 ........0...krbt 0030 0030 67 74 1B 0C 44 4F 4D 41 49 4E 2E 4C 4F 43 41 4C gt..DOMAIN.LOCAL 0040 0040 A3 82 04 73 30 82 04 6F A0 03 02 01 12 A1 03 02 ...s0..o........ 0050 0050 01 03 A2 82 04 61 04 82 04 5D BD 10 C1 1E 1D EF .....a...]...... 0060 0060 68 2D C3 60 7C 98 DB 08 06 AC F2 80 9A 1F 8C 73 h-.`|..........s 0070 0070 FD A4 4F 86 C1 4B D0 39 C4 C9 5A 41 ED 40 0A C4 ..O..K.9..ZA.@.. 0080 0080 E5 58 97 0C 51 31 6F FD F3 4B D6 95 A6 36 BC B1 .X..Q1o..K...6.. 0090 0090 E5 07 44 19 D0 83 E9 18 08 5E C5 6F F7 7A F9 F6 ..D......^.o.z.. 00a0 00a0 A4 10 FA FF 3B 98 59 A6 35 18 44 86 C8 35 21 B5 ....;.Y.5.D..5!. 00b0 00b0 39 0E C7 24 18 50 57 E3 E6 28 43 A9 2D 9B A5 00 9..$.PW..(C.-... 00c0 00c0 DD 24 D9 EB EF F0 65 4F E4 59 CF 35 D9 60 7B 11 .$....eO.Y.5.`{. 00d0 00d0 F7 C3 5B F6 BA 4D D3 78 FD 5C 99 55 46 50 29 6A ..[..M.x.\.UFP)j 00e0 00e0 BC C3 74 C3 FF 2F CF 80 70 38 84 8F 35 1E 91 34 ..t../..p8..5..4 00f0 00f0 F6 97 26 B5 E9 2A EC 99 E4 AA 99 61 3C 35 60 9B ..&..*.....a<5`. 0100 0100 00 94 B5 33 81 15 13 E9 BA 48 B9 11 3F 0F 2B 4D ...3.....H..?.+M 0110 0110 BC F9 E0 5A 66 68 C9 98 C0 9F 65 AE 48 C8 EA 1B ...Zfh....e.H... 0120 0120 7F BC 62 B5 CB BE C7 DE CC 0A 48 32 DF 93 AE C0 ..b.......H2.... 0130 0130 8C 13 8A 63 62 1F 8C 58 4A 85 30 A3 80 B5 4B 37 ...cb..XJ.0...K7 0140 0140 FD B8 DD A6 92 4E 42 60 71 0C F8 B6 6C 71 47 9D .....NB`q...lqG. 0150 0150 CB 69 16 79 0C 5C 58 2B 99 53 CA B7 08 51 78 E2 .i.y.\X+.S...Qx. 0160 0160 80 D1 82 A7 4F 93 FC D3 BC 83 A0 DC 26 28 45 51 ....O.......&(EQ 0170 0170 A4 D2 30 A5 0A 8B 34 1D E1 32 FD F0 F9 7B B7 AB ..0...4..2...{.. 0180 0180 DE C4 80 21 E0 4C 3D ED A8 98 97 C6 84 D5 60 36 ...!.L=.......`6 0190 0190 36 BD 66 84 2E D4 B2 58 6F 8E 09 FB B5 E0 22 8B 6.f....Xo.....". 01a0 01a0 CC E3 E5 FF C8 2E 56 74 F1 6A 65 A4 F1 B7 B1 7B ......Vt.je....{ 01b0 01b0 38 54 A5 46 57 34 A5 FE C5 73 C5 45 26 F2 7B 9E 8T.FW4...s.E&.{. 01c0 01c0 A8 A6 46 46 F0 12 68 B0 40 D0 9F 2A CD A8 2A 37 ..FF..h.@..*..*7 01d0 01d0 FB 19 5C B2 4F 8C 10 92 91 95 74 99 9F D6 1D 85 ..\.O.....t..... 01e0 01e0 9A ED 2A F5 A9 45 7A 20 A7 2E 61 88 C0 D8 13 CB ..*..Ez ..a..... 01f0 01f0 12 71 37 79 F8 4F 7B ED 29 8E 2C D7 93 B0 6E 63 .q7y.O{.).,...nc 0200 0200 9D 85 9B 4F B3 A5 F7 46 E2 02 3B CF 06 27 A8 A8 ...O...F..;..'.. 0210 0210 74 25 89 9A A3 A9 B6 3F 55 89 65 EC CA BC 35 33 t%.....?U.e...53 0220 0220 05 62 B0 55 42 6E 2F C6 80 8C 45 6E E8 F0 47 D0 .b.UBn/...En..G. 0230 0230 9A 70 21 B6 A4 F2 54 7C DE 65 52 22 4B 29 47 50 .p!...T|.eR"K)GP 0240 0240 EF D4 92 EA 07 45 03 5F 76 A3 94 D5 B6 E2 64 42 .....E._v.....dB 0250 0250 E5 54 2B 4D 55 77 22 EE 21 B7 0C 05 56 72 41 ED .T+MUw".!...VrA. 0260 0260 97 DF FB 31 50 2D 95 0C 50 46 2F 47 8F CC D8 45 ...1P-..PF/G...E 0270 0270 4E C3 84 24 68 8E 87 C4 42 8C 37 63 B3 69 F1 B5 N..$h...B.7c.i.. 0280 0280 15 09 EF 36 54 8D CF 7A 5C 84 24 75 AA 65 BE C1 ...6T..z\.$u.e.. 0290 0290 0D 6F 86 CE CD 90 E4 69 4F 36 D6 80 52 B5 5A 27 .o.....iO6..R.Z' 02a0 02a0 15 C0 0E 26 9C 21 50 71 31 14 82 11 8E D0 16 8F ...&.!Pq1....... 02b0 02b0 AB B3 05 3A D5 9D CD F4 2A 42 50 26 85 CD FC C6 ...:....*BP&.... 02c0 02c0 79 D2 27 2D D1 2A B6 58 FF 85 88 B3 4C B4 8B 3A y.'-.*.X....L..: 02d0 02d0 EF 4A 19 61 69 4A B2 B3 1A 81 2A 68 30 15 ED 34 .J.aiJ....*h0..4 02e0 02e0 3A 8C 21 49 89 97 B0 DE D3 76 7F 73 E0 69 C9 63 :.!I.....v.s.i.c 02f0 02f0 38 45 B5 82 D6 F1 A9 87 D6 B0 9D 31 B3 30 A3 CB 8E.........1.0.. 0300 0300 F2 C4 30 FB 6F 5D 6F A2 7F 83 D9 62 4B 7B B8 CE ..0.o]o....bK{.. 0310 0310 BC 24 89 33 B6 8D BE 1B 6B 28 22 B9 66 21 15 9D .$.3....k(".f!.. 0320 0320 92 49 DE D8 93 CB ED CF 1F C5 EE 77 CB 69 69 58 .I.........w.iiX 0330 0330 52 17 0B 24 EA 2F 36 AA 89 8A 24 21 2B 2E DF 84 R..$./6...$!+... 0340 0340 45 9A 43 81 BD 24 37 97 B9 A3 28 1D 7E 1B 28 0F E.C..$7...(.~.(. 0350 0350 6A DD 79 DB B1 CC 5D 88 71 78 D0 81 35 49 A1 68 j.y...].qx..5I.h 0360 0360 A3 8B E4 41 BB 38 77 64 09 8C 4E 7B ED 81 F7 97 ...A.8wd..N{.... 0370 0370 3E E1 9E 73 37 67 A4 DD 05 21 2A 18 B1 2C 83 8C >..s7g...!*..,.. 0380 0380 67 4C 18 B0 D6 30 4A 28 BE 3D E7 92 8F FD D1 44 gL...0J(.=.....D 0390 0390 9D 29 78 84 C6 A6 A5 74 B1 3A 0D 28 94 25 C1 EB .)x....t.:.(.%.. 03a0 03a0 F3 7C 5A F5 6D 04 75 3F CC 0C 02 FD CC 98 42 7F .|Z.m.u?......B. 03b0 03b0 B9 AA 33 51 09 05 BA 2B 67 46 A8 B5 97 42 E4 24 ..3Q...+gF...B.$ 03c0 03c0 3F 6F BA 81 45 85 B1 22 79 4A 54 AE CB A3 EA 95 ?o..E.."yJT..... 03d0 03d0 6A 0C 85 FD ED 25 82 CB 48 09 EE 7B E4 71 25 3F j....%..H..{.q%? 03e0 03e0 02 56 50 36 36 E8 1F 35 DF 38 B1 77 C3 C0 71 67 .VP66..5.8.w..qg 03f0 03f0 7E 1D D9 EF A6 B1 0C 6A 12 2A B0 52 2F 2B 10 E8 ~......j.*.R/+.. 0400 0400 B6 25 35 5F 5C 1E 79 96 C7 05 52 37 18 26 91 ED .%5_\.y...R7.&.. 0410 0410 E3 1A 5E 60 29 66 F9 0C 2A 66 BD F9 97 87 2D BD ..^`)f..*f....-. 0420 0420 C9 71 55 D7 23 BC 1F B1 87 BD 0F 42 CB CD ED BE .qU.#......B.... 0430 0430 2C 57 17 D1 3E 27 E2 13 4A C6 CD 9D 3A 53 CD 21 ,W..>'..J...:S.! 0440 0440 53 44 A8 27 80 65 DA 4E EA 75 44 86 0E DA 5F DB SD.'.e.N.uD..._. 0450 0450 41 F8 49 FF 7C 1D B7 75 F7 A0 A6 2D 28 75 B4 3B A.I.|..u...-(u.; 0460 0460 55 BC 09 1E 80 56 66 65 07 DF CA DE D4 0A 83 21 U....Vfe.......! 0470 0470 1D B7 A5 85 6D 4C 9B 5E 2E F8 62 83 0C EF 8A 4C ....mL.^..b....L 0480 0480 36 CE 03 4E 9A 9E 11 F5 58 F0 08 CD BE 41 52 08 6..N....X....AR. 0490 0490 1C 30 DA E5 3B 6D E4 4E 17 03 23 64 90 CF C8 7B .0..;m.N..#d...{ 04a0 04a0 E9 E9 6F A0 67 9F 87 25 50 69 99 4A 26 2D 61 D5 ..o.g..%Pi.J&-a. 04b0 04b0 7B E0 38 2F E9 E5 70 {.8/..p >>> assert bytes(tkt) == bytes(TKT) >>> assert upn == 'DC1$@DOMAIN.LOCAL' >>> assert spn == 'krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL' ###(033)=[passed] Ticketer++ - Create keytab >>> t = Ticketer() >>> t.add_cred("host/dc.domain.local", password="Scapy1", salt=b"salt") >>> >>> assert t.get_cred("host/dc.domain.local").key == bytes.fromhex("811f44006ad73972ffec42cc89ce6e79749e6effd8db4db5fb0f38c0f3fa6f4f") ###(034)=[passed] Ticketer++ - Get SPN ssp >>> ssp = t.ssp("host/dc.domain.local") ###(035)=[passed] Ticketer++ - Load keytab >>> from scapy.utils import get_temp_file >>> TICKETER_TEMPFILE = get_temp_file() >>> >>> KEYTAB_DATA = bytes.fromhex("0502000000440001000c646f6d61696e2e6c6f63616c000d41646d696e6973747261746f720000000067fd666f0100110010de93a48926de94c2feff6abd8e0e763b00000000000000540001000c646f6d61696e2e6c6f63616c000d41646d696e6973747261746f720000000067fd666f0200120020dcd8ce2bb77dfb6cab0e1afb69a9a5713a8818ed502c3625edc7772e6b4c442a00000000000000440001000c646f6d61696e2e6c6f63616c000d41646d696e6973747261746f720000000067fd666f03001700102b576acbe6bcfda7294d6bd18041b8fe00000000") >>> >>> with open(TICKETER_TEMPFILE, "wb") as fd: ... fd.write(KEYTAB_DATA) ... 222 >>> t = Ticketer() >>> t.open_keytab(TICKETER_TEMPFILE) >>> >>> assert t.get_cred("Administrator@domain.local", EncryptionType.RC4_HMAC).key == b'+Wj\xcb\xe6\xbc\xfd\xa7)Mk\xd1\x80A\xb8\xfe' >>> assert t.get_cred("Administrator@domain.local", EncryptionType.AES128_CTS_HMAC_SHA1_96).key == b'\xde\x93\xa4\x89&\xde\x94\xc2\xfe\xffj\xbd\x8e\x0ev;' ###(036)=[passed] Ticketer++ - Call show() with keytab >>> with ContextManagerCaptureOutput() as cmco: ... t.show(utc=True) ... outp = cmco.get_output().strip() ... >>> outp = outp.split("\n", 1)[1] >>> >>> print(repr(outp)) 'Principal Timestamp KVNO Keytype \nAdministrator@domain.local 14/04/25 19:47:59 0 AES128-CTS-HMAC-SHA1-96\nAdministrator@domain.local 14/04/25 19:47:59 0 AES256-CTS-HMAC-SHA1-96\nAdministrator@domain.local 14/04/25 19:47:59 0 RC4-HMAC \n\nNo tickets in CCache.' >>> >>> assert outp == """ ... Principal Timestamp KVNO Keytype ... Administrator@domain.local 14/04/25 19:47:59 0 AES128-CTS-HMAC-SHA1-96 ... Administrator@domain.local 14/04/25 19:47:59 0 AES256-CTS-HMAC-SHA1-96 ... Administrator@domain.local 14/04/25 19:47:59 0 RC4-HMAC ... ... No tickets in CCache. ... """.strip() ###(037)=[passed] Ticketer++ - Get UPN ssp >>> ssp = t.ssp("Administrator@domain.local") ###(038)=[passed] Ticketer++ - Save keytab >>> from scapy.utils import get_temp_file >>> TICKETER_TEMPFILE = get_temp_file() >>> >>> t.save_keytab(TICKETER_TEMPFILE) 222 ###### ## Crypto tests ###### ###(039)=[passed] RFC3691 - Test vectors for KRB-FX-CF2 >>> from scapy.libs.rfc3961 import Key, EncryptionType, KRB_FX_CF2 >>> >>> def test_krb_fx_cf2(etype): ... k1 = Key.string_to_key(etype, b"key1", b"key1") ... k2 = Key.string_to_key(etype, b"key2", b"key2") ... return KRB_FX_CF2(k1, k2, b"a", b"b").key.hex() ... >>> assert test_krb_fx_cf2(EncryptionType.AES128_CTS_HMAC_SHA1_96) == "97df97e4b798b29eb31ed7280287a92a" >>> assert test_krb_fx_cf2(EncryptionType.AES256_CTS_HMAC_SHA1_96) == "4d6ca4e629785c1f01baf55e2e548566b9617ae3a96868c337cb93b5e72b1c7b" >>> assert test_krb_fx_cf2(EncryptionType.RC4_HMAC) == '24d7f6b6bae4e5c00d2082c5ebab3672' ###(040)=[passed] RFC3691 - Test vectors for _n_fold >>> from scapy.libs.rfc3961 import _n_fold >>> >>> >>> assert _n_fold(b"012345", 8).hex() == "be072631276b1955" >>> assert _n_fold(b"password", 7).hex() == "78a07b6caf85fa" >>> assert _n_fold(b"Rough Consensus, and Running Code", 8).hex() == "bb6ed30870b7f0e0" >>> assert _n_fold(b"password", 21).hex() == "59e4a8ca7c0385c3c37b3f6d2000247cb6e6bd5b3e" >>> assert _n_fold(b"MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 24).hex() == "db3b0d8f0b061e603282b308a50841229ad798fab9540c1b" >>> assert _n_fold(b"Q", 21).hex() == "518a54a215a8452a518a54a215a8452a518a54a215" >>> assert _n_fold(b"ba", 21).hex() == "fb25d531ae8974499f52fd92ea9857c4ba24cf297e" ###(041)=[passed] RFC3691 - Test vectors for mit_des_string_to_key >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> def _mit_des_string_to_key(text, salt): ... k = Key.string_to_key(EncryptionType.DES_CBC_MD5, text, salt) ... return k.key.hex() ... >>> assert _mit_des_string_to_key(b"password", b"ATHENA.MIT.EDUraeburn") == "cbc22fae235298e3" >>> assert _mit_des_string_to_key(b"potatoe", b"WHITEHOUSE.GOVdanny") == "df3d32a74fd92a01" >>> assert _mit_des_string_to_key((u"\U0001d11e").encode(), b"EXAMPLE.COMpianist") == "4ffb26bab0cd9413" >>> assert _mit_des_string_to_key((u"\xdf").encode(), (u"ATHENA.MIT.EDUJuri\u0161i\u0107").encode()) == "62c81a5232b5e69d" >>> assert _mit_des_string_to_key(b"11119999", b"AAAAAAAA") == "984054d0f1a73e31" >>> assert _mit_des_string_to_key(b"NNNN6666", b"FFFFAAAA") == "c4bf6b25adf7a4f8" ###(042)=[passed] RFC3691 - Test vectors for DES3 >>> def _des3_string_to_key(text, salt): ... k = Key.string_to_key(EncryptionType.DES3_CBC_SHA1_KD, text, salt) ... return k.key.hex() ... >>> assert _des3_string_to_key(b"password", b"ATHENA.MIT.EDUraeburn") == "850bb51358548cd05e86768c313e3bfef7511937dcf72c3e" >>> assert _des3_string_to_key(b"potatoe", b"WHITEHOUSE.GOVdanny") == "dfcd233dd0a43204ea6dc437fb15e061b02979c1f74f377a" >>> assert _des3_string_to_key(b"penny", b"EXAMPLE.COMbuckaroo") == "6d2fcdf2d6fbbc3ddcadb5da5710a23489b0d3b69d5d9d4a" >>> assert _des3_string_to_key((u"\xdf").encode(), (u"ATHENA.MIT.EDUJuri\u0161i\u0107").encode()) == "16d5a40e1ce3bacb61b9dce00470324c831973a7b952feb0" >>> assert _des3_string_to_key((u"\U0001d11e").encode(), b"EXAMPLE.COMpianist") == "85763726585dbc1cce6ec43e1f751f07f1c4cbb098f40b19" ###(043)=[passed] RFC3692 - Test vectors for AES >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> >>> >>> k = Key.string_to_key(EncryptionType.AES128_CTS_HMAC_SHA1_96, b"password", b"ATHENA.MIT.EDUraeburn", struct.pack(">L", 1200)) >>> assert k.key.hex() == "4c01cd46d632d01e6dbe230a01ed642a" >>> >>> >>> k = Key.string_to_key(EncryptionType.AES256_CTS_HMAC_SHA1_96, b"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", b"pass phrase exceeds block size", struct.pack(">L", 1200)) >>> assert k.key.hex() == "d78c5c9cb872a8c9dad4697f0bb5b2d21496c82beb2caeda2112fceea057401b" ###(044)=[passed] RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample results for string-to-key conversion >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> >>> >>> k = Key.string_to_key(EncryptionType.AES128_CTS_HMAC_SHA256_128, b"password", b"\x10\xdf\x9d\xd7\x83\xe5\xbc\x8a\xce\xa1s\x0et5_aATHENA.MIT.EDUraeburn") >>> assert k.key.hex() == '089bca48b105ea6ea77ca5d2f39dc5e7' >>> >>> >>> k = Key.string_to_key(EncryptionType.AES256_CTS_HMAC_SHA384_192, b"password", b"\x10\xdf\x9d\xd7\x83\xe5\xbc\x8a\xce\xa1s\x0et5_aATHENA.MIT.EDUraeburn") >>> assert k.key.hex() == '45bd806dbf6a833a9cffc1c94589a222367a79bc21c413718906e9f578a78467' ###(045)=[passed] RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample results for key derivation >>> from scapy.libs.rfc3961 import _AES128CTS_SHA256_128 >>> >>> k = Key(EncryptionType.AES128_CTS_HMAC_SHA256_128, key=bytes.fromhex("3705D96080C17728A0E800EAB6E0D23C")) >>> >>> kc = _AES128CTS_SHA256_128.derive(k, struct.pack(">IB", 2, 0x99), 128) >>> assert kc.hex() == 'b31a018a48f54776f403e9a396325dc3' >>> >>> ke = _AES128CTS_SHA256_128.derive(k, struct.pack(">IB", 2, 0xAA), 128) >>> assert ke.hex() == '9b197dd1e8c5609d6e67c3e37c62c72e' >>> >>> ki = _AES128CTS_SHA256_128.derive(k, struct.pack(">IB", 2, 0x55), 128) >>> assert ki.hex() == '9fda0e56ab2d85e1569a688696c26a6c' >>> >>> >>> from scapy.libs.rfc3961 import _AES256CTS_SHA384_192 >>> >>> k = Key(EncryptionType.AES256_CTS_HMAC_SHA384_192, key=bytes.fromhex("6D404D37FAF79F9DF0D33568D320669800EB4836472EA8A026D16B7182460C52")) >>> >>> kc = _AES256CTS_SHA384_192.derive(k, struct.pack(">IB", 2, 0x99), 192) >>> assert kc.hex() == 'ef5718be86cc84963d8bbb5031e9f5c4ba41f28faf69e73d' >>> >>> ke = _AES256CTS_SHA384_192.derive(k, struct.pack(">IB", 2, 0xAA), 256) >>> assert ke.hex() == '56ab22bee63d82d7bc5227f6773f8ea7a5eb1c825160c38312980c442e5c7e49' >>> >>> ki = _AES256CTS_SHA384_192.derive(k, struct.pack(">IB", 2, 0x55), 192) >>> assert ki.hex() == '69b16514e3cd8e56b82010d5c73012b622c4d00ffc23ed1f' ###(046)=[passed] RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample encryptions and decryptions >>> k = Key(EncryptionType.AES128_CTS_HMAC_SHA256_128, key=bytes.fromhex("3705D96080C17728A0E800EAB6E0D23C")) >>> >>> >>> c = k.encrypt(2, b"", confounder=bytes.fromhex("7E5895EAF2672435BAD817F545A37148")) >>> assert c.hex() == "ef85fb890bb8472f4dab20394dca781dad877eda39d50c870c0d5a0a8e48c718" >>> assert k.decrypt(2, c) == b"" >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405"), confounder=bytes.fromhex("7BCA285E2FD4130FB55B1A5C83BC5B24")) >>> assert c.hex() == "84d7f30754ed987bab0bf3506beb09cfb55402cef7e6877ce99e247e52d16ed4421dfdf8976c" >>> assert k.decrypt(2, c).hex() == "000102030405".lower() >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F"), confounder=bytes.fromhex("56AB21713FF62C0A1457200F6FA9948F")) >>> assert c.hex() == "3517d640f50ddc8ad3628722b3569d2ae07493fa8263254080ea65c1008e8fc295fb4852e7d83e1e7c48c37eebe6b0d3" >>> assert k.decrypt(2, c).hex() == "000102030405060708090A0B0C0D0E0F".lower() >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F1011121314"), confounder=bytes.fromhex("A7A4E29A4728CE10664FB64E49AD3FAC")) >>> assert c.hex() == "720f73b18d9859cd6ccb4346115cd336c70f58edc0c4437c5573544c31c813bce1e6d072c186b39a413c2f92ca9b8334a287ffcbfc" >>> assert k.decrypt(2, c).hex() == "000102030405060708090A0B0C0D0E0F1011121314".lower() >>> >>> >>> k = Key(EncryptionType.AES256_CTS_HMAC_SHA384_192, key=bytes.fromhex("6D404D37FAF79F9DF0D33568D320669800EB4836472EA8A026D16B7182460C52")) >>> >>> >>> c = k.encrypt(2, b"", confounder=bytes.fromhex("F764E9FA15C276478B2C7D0C4E5F58E4")) >>> assert c.hex() == "41f53fa5bfe7026d91faf9be959195a058707273a96a40f0a01960621ac612748b9bbfbe7eb4ce3c" >>> assert k.decrypt(2, c) == b"" >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405"), confounder=bytes.fromhex("B80D3251C1F6471494256FFE712D0B9A")) >>> assert c.hex() == "4ed7b37c2bcac8f74f23c1cf07e62bc7b75fb3f637b9f559c7f664f69eab7b6092237526ea0d1f61cb20d69d10f2" >>> assert k.decrypt(2, c).hex() == "000102030405".lower() >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F"), confounder=bytes.fromhex("53BF8A0D105265D4E276428624CE5E63")) >>> assert c.hex() == "bc47ffec7998eb91e8115cf8d19dac4bbbe2e163e87dd37f49beca92027764f68cf51f14d798c2273f35df574d1f932e40c4ff255b36a266" >>> assert k.decrypt(2, c).hex() == "000102030405060708090A0B0C0D0E0F".lower() >>> >>> >>> c = k.encrypt(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F1011121314"), confounder=bytes.fromhex("763E65367E864F02F55153C7E3B58AF1")) >>> assert c.hex() == "40013e2df58e8751957d2878bcd2d6fe101ccfd556cb1eae79db3c3ee86429f2b2a602ac86fef6ecb647d6295fae077a1feb517508d2c16b4192e01f62" >>> assert k.decrypt(2, c).hex() == "000102030405060708090A0B0C0D0E0F1011121314".lower() ###(047)=[passed] RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample checksums >>> k = Key(EncryptionType.AES128_CTS_HMAC_SHA256_128, key=bytes.fromhex("3705D96080C17728A0E800EAB6E0D23C")) >>> cksum = k.make_checksum(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F1011121314")) >>> assert cksum.hex() == "d78367186643d67b411cba9139fc1dee" >>> >>> >>> k = Key(EncryptionType.AES256_CTS_HMAC_SHA384_192, key=bytes.fromhex("6D404D37FAF79F9DF0D33568D320669800EB4836472EA8A026D16B7182460C52")) >>> cksum = k.make_checksum(2, bytes.fromhex("000102030405060708090A0B0C0D0E0F1011121314")) >>> assert cksum.hex() == "45ee791567eefca37f4ac1e0222de80d43c3bfa06699672a" ###(048)=[passed] RFC8009 - Test vectors for AES-CTS HMAC-SHA2 - Sample pseudorandom function (PRF) invocations >>> k = Key(EncryptionType.AES128_CTS_HMAC_SHA256_128, key=bytes.fromhex("3705D96080C17728A0E800EAB6E0D23C")) >>> out = k.prf(b"test") >>> assert out.hex() == "9d188616f63852fe86915bb840b4a886ff3e6bb0f819b49b893393d393854295" >>> >>> >>> k = Key(EncryptionType.AES256_CTS_HMAC_SHA384_192, key=bytes.fromhex("6D404D37FAF79F9DF0D33568D320669800EB4836472EA8A026D16B7182460C52")) >>> out = k.prf(b"test") >>> assert out.hex() == "9801f69a368c2bf675e59521e177d9a07f67efe1cfde8d3c8d6f6a0256e3b17db3c1b62ad1b8553360d17367eb1514d2" ###(049)=[passed] Decrypt PA-ENC-TIMESTAMP >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> pkt = Ether(b"RT\x00iX\x13RT\x00!l+\x08\x00E\x00\x01]\xa7\x18@\x00\x80\x06\xdc\x83\xc0\xa8z\x9c\xc0\xa8z\x11\xc2\t\x00XT\xf6\xab#\x92\xc2[\xd6P\x18 \x14\xb6\xe0\x00\x00\x00\x00\x011j\x82\x01-0\x82\x01)\xa1\x03\x02\x01\x05\xa2\x03\x02\x01\n\xa3c0a0L\xa1\x03\x02\x01\x02\xa2E\x04C0A\xa0\x03\x02\x01\x12\xa2:\x048HHM\xec\xb0\x1c\x9bb\xa1\xca\xbf\xbc?-\x1e\xd8Z\xa5\xe0\x93\xba\x83X\xa8\xce\xa3MC\x93\xaf\x93\xbf!\x1e'O\xa5\x8e\x81Hx\xdb\x9f\rz(\xd9Ns'f\r\xb4\xf3pK0\x11\xa1\x04\x02\x02\x00\x80\xa2\t\x04\x070\x05\xa0\x03\x01\x01\xff\xa4\x81\xb70\x81\xb4\xa0\x07\x03\x05\x00@\x81\x00\x10\xa1\x120\x10\xa0\x03\x02\x01\x01\xa1\t0\x07\x1b\x05win1$\xa2\x0e\x1b\x0cDOMAIN.LOCAL\xa3!0\x1f\xa0\x03\x02\x01\x02\xa1\x180\x16\x1b\x06krbtgt\x1b\x0cDOMAIN.LOCAL\xa5\x11\x18\x0f20370913024805Z\xa6\x11\x18\x0f20370913024805Z\xa7\x06\x02\x04p\x1c\xc5\xd1\xa8\x150\x13\x02\x01\x12\x02\x01\x11\x02\x01\x17\x02\x01\x18\x02\x02\xffy\x02\x01\x03\xa9\x1d0\x1b0\x19\xa0\x03\x02\x01\x14\xa1\x12\x04\x10WIN1 ") >>> enc = pkt[Kerberos].root.padata[0].padataValue >>> k = Key(enc.etype.val, key=bytes.fromhex("7fada4e566ae4fb270e2800a23ae87127a819d42e69b5e22de0ddc63da80096d")) >>> ts = enc.decrypt(k) >>> >>> assert ts.patimestamp == "20220715171847Z" >>> ts.pausec == 0x9a4db True ###### ## [MS-KILE] test vectors ###### ###(050)=[passed] [MS-KILE] RC4 GSS_WrapEx (RFC4757) test vectors (sect 4.5) >>> from unittest import mock >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> ssp = KerberosSSP() >>> ctx = KerberosSSP.CONTEXT(IsAcceptor=False, req_flags=GSS_C_FLAGS.GSS_C_CONF_FLAG) >>> >>> ctx.KrbSessionKey = Key(EncryptionType.RC4_HMAC, key=bytes.fromhex("81a2cb90af7fc2d19554a150d8185359")) >>> ctx.SendSeqNum = 0x60cbacd3 >>> Confounder = bytes.fromhex("5256f3fb630cf12a") >>> >>> with mock.patch('scapy.layers.kerberos.os.urandom', side_effect=lambda x: Confounder): ... _msgs, sig = ssp.GSS_WrapEx( ... ctx, ... [ ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=bytes.fromhex("112233445566778899aabbccddeeff")), ... ], ... ) ... >>> assert isinstance(sig, KRB_GSSAPI_Token) >>> assert sig.innerToken.TOK_ID == b"\x02\x01" >>> assert sig.innerToken.root.SGN_ALG == 0x11 >>> assert sig.innerToken.root.SEAL_ALG == 0x10 >>> >>> assert bytes(sig) == b'`+\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\x02\x01\x11\x00\x10\x00\xff\xff\xe2\x9e\x8b\xbccH\xe7@\xeb\xaaa\x92D\xa1V\xa1;\\\xf6^>> _msgs = ssp.GSS_UnwrapEx( ... ctx, ... _msgs, ... signature=sig, ... ) >>> >>> assert _msgs[0].data.hex() == "112233445566778899aabbccddeeff" ###### ## GSS-API KerberosSSP tests ###### ###(052)=[passed] Create randomness-mock context manager >>> from unittest import mock >>> from datetime import datetime >>> >>> def fake_urandom(x): ... # wow, impressive entropy ... return b"0" * x ... >>> def fake_randrange(a, b): ... return (a + b) // 2 ... >>> def fake_choice(x): ... return x[0] ... >>> date_mock = mock.MagicMock() >>> date_mock.now.side_effect = lambda tz=None: datetime(2024, 3, 5, 16, 52, 55, 424801, tz) >>> >>> _patches = [ ... # Patch all the random ... mock.patch('scapy.layers.kerberos.os.urandom', side_effect=fake_urandom), ... mock.patch('scapy.libs.rfc3961.os.urandom', side_effect=fake_urandom), ... mock.patch('scapy.volatile.random.randrange', side_effect=fake_randrange), ... mock.patch('scapy.volatile.random.choice', side_effect=fake_choice), ... # Patch date ... mock.patch('scapy.layers.kerberos.datetime', date_mock), ... ] >>> >>> class KrbRandomPatcher: ... def __enter__(self): ... for p in _patches: ... p.start() ... def __exit__(self, *args, **kwargs): ... for p in _patches: ... p.stop() ... ###(053)=[passed] Create client and server SPNEGOSSP[KerberosSSP] >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> from scapy.layers.kerberos import KRB_Ticket, KRB_GSSAPI_Token, KRB_AP_REQ, KRB_AP_REP >>> from scapy.layers.spnego import SPNEGOSSP >>> >>> client = SPNEGOSSP([ ... KerberosSSP( ... UPN="User1@DOMAIN.LOCAL", ... SPN="cifs/dc1", ... ST=KRB_Ticket(bytes.fromhex("618204a13082049da003020105a10e1b0c444f4d41494e2e4c4f43414ca2163014a003020103a10d300b1b04636966731b03646331a382046c30820468a003020112a10302010da282045a04820456671f6131b38ee6e682d62cb937b8b79c589753182f8dbcb14a91b031052a3c20f7b4c89bf9a41fe9960d112acc73f6bd6527dfe70700a3d3c2e72b4ba6705dfc040fd56f9d7cd60b580ebecec2bfb240baac619690dbd9301ed98cac037cfdff8ff96ac98358969f3532f9c6adc076d136a0ef96ebddef293df879bb42adfbf7670434f340ad673e0303ae186e1a510d7f50dbfee9ebab323c715d6b27a67ffec60dba9f7475e5dbf88eee1fcc95b7d467ab2b4ecef893a92a25c80b8480ac8c12bc10741523a2738a3d7c3d2c438235111188968486cab2934b32cad1b6b4b2cbf343b25d41ad463c0513cf21cf9f77f072f4a49d8042947064e3375a1ae76c355fd48d5fc163cf7f865af91bcb788cffe2e9e1a30a7e3f91be8fb55b0a8b8c0b600ef3e0e88feaad4fbf4fffe76c9302ee2acfa3b64ca28cd006fd4af9c27d2eb45e47e582b87e632aa23475caeb0e3e9d777339f5cb94abc19ebd080ffc78181bf81ff227182de422937675546633bd6ab688258a94d132fb590f8152d3f19bd55a1f336fb7c382140987ac2389134d8033882f923d3d5324a3e9f5437bd70f095e6bb00ee68d8f21912b19b27924c61b4e3bfe68411f9f220de8dace00e767b662313706730d4dc8539b309fc75e6ca4cae470cdf12cc3cfb191486e3e5eb8c80723b2b0473b07e4ea4d385487dd303df2db8d31f8c90d53c4adcf39ad78cf6c85fbb87b4c4ee531a42c2133df2b0362132374df995420e4b2a6d1e19d7879d518652d5101a316962b27b3884cb67d07572f96b9668ca42cca7311a7152ac7c6d492009192fa4a707989e43b2a10f19e535e7cf8afdaf63ce9a2a85ce1bd17d81cfe76d2ce5759a7fdbeff6fb279b8620bc2c5183b24be831c7ee157114f2700da210b36edb7bda7d91a32f7940bef431c76571cd44499f779cc4ebe829fb34eeaa1e442240d5962bdbcbc16c962974b546e9cee380dda49f651acc5c58acae4ad06d57e4b91d8c5557365e8ddda7ee9550963d70d4f56b44fc5a26e29b36cb21d11221825b5a2217cb1f1454d34d94a855cb860f2fe43681e3d302e7e124273dd18b04fddf660b8858e1e78d022cc03f467f3cf1a6e5df53bb831794542b1d08e38d3bfb0bf2e5ba6f75a0f77d56bf2924b144fff3c87ec7a57bff345ee8a4496676d38c9453c38e64521db2de6d6452aa8f3da1675134e8d90cbb0d274ce6189563fd9a56e56a800661e787b083950623035ddeeb2fb84f6fb2507f2c157e74e81a81970e11475ce926e393a55b06b77c444dbd23688e8a77c7f30337874fef787a187fcafd73a5a4837c8e3e60712308597ff72ea2edae69c9402ad7ae81abb3e9100f0c87b99b2564246bd56af8e6d0ecf2928e5151218f7e627c565e15540666f4f7c0e937c2d0e84782fcb1b535e596f6c4e0aed7c1d350e169d045f2eaaa4bb2f94cd149576f835e5eecb4418677d0444e51fafcbed2afac50b1d320bc223d2623601aee6df6a363a24294bfb3b00f2668dfc404e9fa17fe936e6620756a6918f7de2de343f380fab83fde911124be508")), ... KEY=Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("4aad1c4c7b5bf02bfd061cfaebf0188d6c4f4642d569ca4ab536cb68adcb0e68")), ... ), ... ]) >>> server = SPNEGOSSP([ ... KerberosSSP( ... SPN="cifs/dc1", ... PASSWORD="Password1", ... KEY=Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("133614b285c1d76d4ec78d642e9c6f7451d7652cf6c5fe635af6e89050d42517")), ... ), ... ]) ###(054)=[passed] GSS_Init_sec_context (negTokenInit: KRB_AP_REQ) >>> with KrbRandomPatcher(): ... clicontext, tok, negResult = client.GSS_Init_sec_context( ... None, ... req_flags=( ... GSS_C_FLAGS.GSS_C_MUTUAL_FLAG | ... GSS_C_FLAGS.GSS_C_INTEG_FLAG | ... GSS_C_FLAGS.GSS_C_CONF_FLAG ... ) ... ) ... >>> assert negResult == 1 >>> assert isinstance(tok, GSSAPI_BLOB) >>> tok = GSSAPI_BLOB(bytes(tok)) >>> assert tok.MechType.val == '1.3.6.1.5.5.2' >>> assert isinstance(tok.innerToken.token, SPNEGO_negTokenInit) >>> assert len(tok.innerToken.token.mechTypes) == 2 >>> assert tok.innerToken.token.mechTypes[0].oid == '1.2.840.48018.1.2.2' >>> assert tok.innerToken.token.mechTypes[1].oid == '1.2.840.113554.1.2.2' >>> assert tok.innerToken.token.reqFlags is None >>> assert tok.innerToken.token.negHints is None >>> assert tok.innerToken.token.mechListMIC is None >>> assert tok.innerToken.token._mechListMIC is None >>> >>> krb = tok.innerToken.token.mechToken.value.root >>> assert isinstance(krb, KRB_GSSAPI_Token) >>> ap_req = krb.innerToken.root >>> assert isinstance(ap_req, KRB_AP_REQ) >>> assert ap_req.apOptions == "001" >>> assert ap_req.ticket == clicontext.ssp.ST >>> >>> bytes(tok) b'`\x82\x06@\x06\x06+\x06\x01\x05\x05\x02\xa0\x82\x0640\x82\x060\xa0\x180\x16\x06\t*\x86H\x82\xf7\x12\x01\x02\x02\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\xa2\x82\x06\x12\x04\x82\x06\x0e`\x82\x06\n\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\x01\x00n\x82\x05\xf90\x82\x05\xf5\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x04\x03\x02\x05 \xa3\x82\x04\xa5a\x82\x04\xa10\x82\x04\x9d\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2\x160\x14\xa0\x03\x02\x01\x03\xa1\r0\x0b\x1b\x04cifs\x1b\x03dc1\xa3\x82\x04l0\x82\x04h\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\r\xa2\x82\x04Z\x04\x82\x04Vg\x1fa1\xb3\x8e\xe6\xe6\x82\xd6,\xb97\xb8\xb7\x9cX\x97S\x18/\x8d\xbc\xb1J\x91\xb01\x05*< \xf7\xb4\xc8\x9b\xf9\xa4\x1f\xe9\x96\r\x11*\xccs\xf6\xbde\'\xdf\xe7\x07\x00\xa3\xd3\xc2\xe7+K\xa6p]\xfc\x04\x0f\xd5o\x9d|\xd6\x0bX\x0e\xbe\xce\xc2\xbf\xb2@\xba\xaca\x96\x90\xdb\xd90\x1e\xd9\x8c\xac\x03|\xfd\xff\x8f\xf9j\xc9\x83X\x96\x9f52\xf9\xc6\xad\xc0v\xd16\xa0\xef\x96\xeb\xdd\xef)=\xf8y\xbbB\xad\xfb\xf7g\x044\xf3@\xadg>\x03\x03\xae\x18n\x1aQ\r\x7fP\xdb\xfe\xe9\xeb\xab2\x9dws9\xf5\xcb\x94\xab\xc1\x9e\xbd\x08\x0f\xfcx\x18\x1b\xf8\x1f\xf2\'\x18-\xe4"\x93vuTf3\xbdj\xb6\x88%\x8a\x94\xd12\xfbY\x0f\x81R\xd3\xf1\x9b\xd5Z\x1f3o\xb7\xc3\x82\x14\t\x87\xac#\x89\x13M\x803\x88/\x92==S$\xa3\xe9\xf5C{\xd7\x0f\t^k\xb0\x0e\xe6\x8d\x8f!\x91+\x19\xb2y$\xc6\x1bN;\xfehA\x1f\x9f"\r\xe8\xda\xce\x00\xe7g\xb6b17\x06s\rM\xc8S\x9b0\x9f\xc7^l\xa4\xca\xe4p\xcd\xf1,\xc3\xcf\xb1\x91Hn>^\xb8\xc8\x07#\xb2\xb0G;\x07\xe4\xeaM8T\x87\xdd0=\xf2\xdb\x8d1\xf8\xc9\rS\xc4\xad\xcf9\xadx\xcfl\x85\xfb\xb8{LN\xe51\xa4,!3\xdf+\x03b\x13#t\xdf\x99T \xe4\xb2\xa6\xd1\xe1\x9dxy\xd5\x18e-Q\x01\xa3\x16\x96+\'\xb3\x88L\xb6}\x07W/\x96\xb9f\x8c\xa4,\xcas\x11\xa7\x15*\xc7\xc6\xd4\x92\x00\x91\x92\xfaJpy\x89\xe4;*\x10\xf1\x9eS^|\xf8\xaf\xda\xf6<\xe9\xa2\xa8\\\xe1\xbd\x17\xd8\x1c\xfev\xd2\xceWY\xa7\xfd\xbe\xffo\xb2y\xb8b\x0b\xc2\xc5\x18;$\xbe\x83\x1c~\xe1W\x11O\'\x00\xda!\x0b6\xed\xb7\xbd\xa7\xd9\x1a2\xf7\x94\x0b\xefC\x1cvW\x1c\xd4D\x99\xf7y\xccN\xbe\x82\x9f\xb3N\xea\xa1\xe4B$\rYb\xbd\xbc\xbc\x16\xc9b\x97KTn\x9c\xee8\r\xdaI\xf6Q\xac\xc5\xc5\x8a\xca\xe4\xad\x06\xd5~K\x91\xd8\xc5Use\xe8\xdd\xda~\xe9U\tc\xd7\rOV\xb4O\xc5\xa2n)\xb3l\xb2\x1d\x11"\x18%\xb5\xa2!|\xb1\xf1EM4\xd9J\x85\\\xb8`\xf2\xfeCh\x1e=0.~\x12Bs\xdd\x18\xb0O\xdd\xf6`\xb8\x85\x8e\x1ex\xd0"\xcc\x03\xf4g\xf3\xcf\x1an]\xf5;\xb81yEB\xb1\xd0\x8e8\xd3\xbf\xb0\xbf.[\xa6\xf7Z\x0fw\xd5k\xf2\x92K\x14O\xff<\x87\xeczW\xbf\xf3E\xee\x8aD\x96gm8\xc9E<8\xe6E!\xdb-\xe6\xd6E*\xa8\xf3\xda\x16u\x13N\x8d\x90\xcb\xb0\xd2t\xcea\x89V?\xd9\xa5nV\xa8\x00f\x1ex{\x089Pb05\xdd\xee\xb2\xfb\x84\xf6\xfb%\x07\xf2\xc1W\xe7N\x81\xa8\x19p\xe1\x14u\xce\x92n9:U\xb0kw\xc4D\xdb\xd26\x88\xe8\xa7|\x7f03xt\xfe\xf7\x87\xa1\x87\xfc\xaf\xd7:ZH7\xc8\xe3\xe6\x07\x120\x85\x97\xffr\xea.\xda\xe6\x9c\x94\x02\xadz\xe8\x1a\xbb>\x91\x00\xf0\xc8{\x99\xb2VBF\xbdV\xaf\x8em\x0e\xcf)(\xe5\x15\x12\x18\xf7\xe6\'\xc5e\xe1U@foO|\x0e\x93|-\x0e\x84x/\xcb\x1bS^YolN\n\xed|\x1d5\x0e\x16\x9d\x04_.\xaa\xa4\xbb/\x94\xcd\x14\x95v\xf85\xe5\xee\xcbD\x18g}\x04D\xe5\x1f\xaf\xcb\xed*\xfa\xc5\x0b\x1d2\x0b\xc2#\xd2b6\x01\xae\xe6\xdfj6:$)K\xfb;\x00\xf2f\x8d\xfc@N\x9f\xa1\x7f\xe96\xe6b\x07V\xa6\x91\x8f}\xe2\xde4?8\x0f\xab\x83\xfd\xe9\x11\x12K\xe5\x08\xa4\x82\x0180\x82\x014\xa0\x03\x02\x01\x12\xa2\x82\x01+\x04\x82\x01\'\\>\t\xe4\x1d8,a(\x7f\x1e\xd2\x8dHH\x9c\xef\x8d\x1fqW\xbf(\x97S+\rs_zM\xee\xa7\xc2\x1a\x8eh1\xa4\xcb\x06\xed\x8e\xe6\xc0\x9a\xf7\x93g5\xa5vp\x0e~G\xaf:\xbb<\xaa2\x0e\xf8+l \xc5\xdb\x17,\xa9\x99\xae\x80\r\x0f\xdd4\x92\xf1\xa3h\xc3)^*I\x92\x01\x9f\x06jW\x1a\xac=\xa4\xee\xfdo.\xc8\xd5\x9e\xeaNw\x9eu\xc3\x8b0\xc9_S\x1f\x19u\xbap\x1d\\\x88\x0eu\xbek\xa8}\n\xa0>\x85\xcc3\xed\x84\xadi\x0bB\x9ao\xd2lW\x7f+\x16\x1cxU\x99\x90\x92\xfd\x06\x11ij\xdc\xb5\xc6F\xc0P\xf6\\\xbe\x04I\x9aP\x11\xa5\xff=\xd7\x95\'\xaa\x0e\x1c\xbf\xc4O\xf4D\xc8\xb1Fv\x8f\xff\xde*\'\x17\xe1\xcf\x06\xeb\xd7s\xfc\xa4\x0c6\x87\x9f\xa7\x9b\xe6\xddmMb\xc3\xc8\xcfH\x1a\x1a`\x08\t\x83\x01\x01\x81R\x8d\xda\xd7\xebZ\x83\x8eO\x14\x8e\xf7\x1fc\xb0KcC\xba\xf3\x04+L\xe3\xc1\xf5\xadF\xda\xfa\xe6q\xe0\x90&\x93\xffd\x16>> assert bytes(tok) == b'`\x82\x06@\x06\x06+\x06\x01\x05\x05\x02\xa0\x82\x0640\x82\x060\xa0\x180\x16\x06\t*\x86H\x82\xf7\x12\x01\x02\x02\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\xa2\x82\x06\x12\x04\x82\x06\x0e`\x82\x06\n\x06\t*\x86H\x86\xf7\x12\x01\x02\x02\x01\x00n\x82\x05\xf90\x82\x05\xf5\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x04\x03\x02\x05 \xa3\x82\x04\xa5a\x82\x04\xa10\x82\x04\x9d\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2\x160\x14\xa0\x03\x02\x01\x03\xa1\r0\x0b\x1b\x04cifs\x1b\x03dc1\xa3\x82\x04l0\x82\x04h\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\r\xa2\x82\x04Z\x04\x82\x04Vg\x1fa1\xb3\x8e\xe6\xe6\x82\xd6,\xb97\xb8\xb7\x9cX\x97S\x18/\x8d\xbc\xb1J\x91\xb01\x05*< \xf7\xb4\xc8\x9b\xf9\xa4\x1f\xe9\x96\r\x11*\xccs\xf6\xbde\'\xdf\xe7\x07\x00\xa3\xd3\xc2\xe7+K\xa6p]\xfc\x04\x0f\xd5o\x9d|\xd6\x0bX\x0e\xbe\xce\xc2\xbf\xb2@\xba\xaca\x96\x90\xdb\xd90\x1e\xd9\x8c\xac\x03|\xfd\xff\x8f\xf9j\xc9\x83X\x96\x9f52\xf9\xc6\xad\xc0v\xd16\xa0\xef\x96\xeb\xdd\xef)=\xf8y\xbbB\xad\xfb\xf7g\x044\xf3@\xadg>\x03\x03\xae\x18n\x1aQ\r\x7fP\xdb\xfe\xe9\xeb\xab2\x9dws9\xf5\xcb\x94\xab\xc1\x9e\xbd\x08\x0f\xfcx\x18\x1b\xf8\x1f\xf2\'\x18-\xe4"\x93vuTf3\xbdj\xb6\x88%\x8a\x94\xd12\xfbY\x0f\x81R\xd3\xf1\x9b\xd5Z\x1f3o\xb7\xc3\x82\x14\t\x87\xac#\x89\x13M\x803\x88/\x92==S$\xa3\xe9\xf5C{\xd7\x0f\t^k\xb0\x0e\xe6\x8d\x8f!\x91+\x19\xb2y$\xc6\x1bN;\xfehA\x1f\x9f"\r\xe8\xda\xce\x00\xe7g\xb6b17\x06s\rM\xc8S\x9b0\x9f\xc7^l\xa4\xca\xe4p\xcd\xf1,\xc3\xcf\xb1\x91Hn>^\xb8\xc8\x07#\xb2\xb0G;\x07\xe4\xeaM8T\x87\xdd0=\xf2\xdb\x8d1\xf8\xc9\rS\xc4\xad\xcf9\xadx\xcfl\x85\xfb\xb8{LN\xe51\xa4,!3\xdf+\x03b\x13#t\xdf\x99T \xe4\xb2\xa6\xd1\xe1\x9dxy\xd5\x18e-Q\x01\xa3\x16\x96+\'\xb3\x88L\xb6}\x07W/\x96\xb9f\x8c\xa4,\xcas\x11\xa7\x15*\xc7\xc6\xd4\x92\x00\x91\x92\xfaJpy\x89\xe4;*\x10\xf1\x9eS^|\xf8\xaf\xda\xf6<\xe9\xa2\xa8\\\xe1\xbd\x17\xd8\x1c\xfev\xd2\xceWY\xa7\xfd\xbe\xffo\xb2y\xb8b\x0b\xc2\xc5\x18;$\xbe\x83\x1c~\xe1W\x11O\'\x00\xda!\x0b6\xed\xb7\xbd\xa7\xd9\x1a2\xf7\x94\x0b\xefC\x1cvW\x1c\xd4D\x99\xf7y\xccN\xbe\x82\x9f\xb3N\xea\xa1\xe4B$\rYb\xbd\xbc\xbc\x16\xc9b\x97KTn\x9c\xee8\r\xdaI\xf6Q\xac\xc5\xc5\x8a\xca\xe4\xad\x06\xd5~K\x91\xd8\xc5Use\xe8\xdd\xda~\xe9U\tc\xd7\rOV\xb4O\xc5\xa2n)\xb3l\xb2\x1d\x11"\x18%\xb5\xa2!|\xb1\xf1EM4\xd9J\x85\\\xb8`\xf2\xfeCh\x1e=0.~\x12Bs\xdd\x18\xb0O\xdd\xf6`\xb8\x85\x8e\x1ex\xd0"\xcc\x03\xf4g\xf3\xcf\x1an]\xf5;\xb81yEB\xb1\xd0\x8e8\xd3\xbf\xb0\xbf.[\xa6\xf7Z\x0fw\xd5k\xf2\x92K\x14O\xff<\x87\xeczW\xbf\xf3E\xee\x8aD\x96gm8\xc9E<8\xe6E!\xdb-\xe6\xd6E*\xa8\xf3\xda\x16u\x13N\x8d\x90\xcb\xb0\xd2t\xcea\x89V?\xd9\xa5nV\xa8\x00f\x1ex{\x089Pb05\xdd\xee\xb2\xfb\x84\xf6\xfb%\x07\xf2\xc1W\xe7N\x81\xa8\x19p\xe1\x14u\xce\x92n9:U\xb0kw\xc4D\xdb\xd26\x88\xe8\xa7|\x7f03xt\xfe\xf7\x87\xa1\x87\xfc\xaf\xd7:ZH7\xc8\xe3\xe6\x07\x120\x85\x97\xffr\xea.\xda\xe6\x9c\x94\x02\xadz\xe8\x1a\xbb>\x91\x00\xf0\xc8{\x99\xb2VBF\xbdV\xaf\x8em\x0e\xcf)(\xe5\x15\x12\x18\xf7\xe6\'\xc5e\xe1U@foO|\x0e\x93|-\x0e\x84x/\xcb\x1bS^YolN\n\xed|\x1d5\x0e\x16\x9d\x04_.\xaa\xa4\xbb/\x94\xcd\x14\x95v\xf85\xe5\xee\xcbD\x18g}\x04D\xe5\x1f\xaf\xcb\xed*\xfa\xc5\x0b\x1d2\x0b\xc2#\xd2b6\x01\xae\xe6\xdfj6:$)K\xfb;\x00\xf2f\x8d\xfc@N\x9f\xa1\x7f\xe96\xe6b\x07V\xa6\x91\x8f}\xe2\xde4?8\x0f\xab\x83\xfd\xe9\x11\x12K\xe5\x08\xa4\x82\x0180\x82\x014\xa0\x03\x02\x01\x12\xa2\x82\x01+\x04\x82\x01\'\\>\t\xe4\x1d8,a(\x7f\x1e\xd2\x8dHH\x9c\xef\x8d\x1fqW\xbf(\x97S+\rs_zM\xee\xa7\xc2\x1a\x8eh1\xa4\xcb\x06\xed\x8e\xe6\xc0\x9a\xf7\x93g5\xa5vp\x0e~G\xaf:\xbb<\xaa2\x0e\xf8+l \xc5\xdb\x17,\xa9\x99\xae\x80\r\x0f\xdd4\x92\xf1\xa3h\xc3)^*I\x92\x01\x9f\x06jW\x1a\xac=\xa4\xee\xfdo.\xc8\xd5\x9e\xeaNw\x9eu\xc3\x8b0\xc9_S\x1f\x19u\xbap\x1d\\\x88\x0eu\xbek\xa8}\n\xa0>\x85\xcc3\xed\x84\xadi\x0bB\x9ao\xd2lW\x7f+\x16\x1cxU\x99\x90\x92\xfd\x06\x11ij\xdc\xb5\xc6F\xc0P\xf6\\\xbe\x04I\x9aP\x11\xa5\xff=\xd7\x95\'\xaa\x0e\x1c\xbf\xc4O\xf4D\xc8\xb1Fv\x8f\xff\xde*\'\x17\xe1\xcf\x06\xeb\xd7s\xfc\xa4\x0c6\x87\x9f\xa7\x9b\xe6\xddmMb\xc3\xc8\xcfH\x1a\x1a`\x08\t\x83\x01\x01\x81R\x8d\xda\xd7\xebZ\x83\x8eO\x14\x8e\xf7\x1fc\xb0KcC\xba\xf3\x04+L\xe3\xc1\xf5\xadF\xda\xfa\xe6q\xe0\x90&\x93\xffd\x16KRB_AP_REP) >>> with KrbRandomPatcher(): ... srvcontext, tok, negResult = server.GSS_Accept_sec_context(None, tok) ... >>> assert negResult == 0 >>> assert isinstance(tok, SPNEGO_negToken) >>> tok = SPNEGO_negToken(bytes(tok)) >>> assert isinstance(tok.token, SPNEGO_negTokenResp) >>> assert tok.token.negResult == 0 >>> assert tok.token.supportedMech.oid == '1.2.840.48018.1.2.2' >>> assert isinstance(tok.token.responseToken, SPNEGO_Token) >>> assert tok.token.mechListMIC is not None >>> >>> ap_rep = tok.token.responseToken.value.root >>> assert isinstance(ap_rep, KRB_AP_REP) >>> >>> apreppart = ap_rep.encPart.decrypt(clicontext.ssp.KEY) >>> assert apreppart.ctime == "20240305165255Z" >>> assert apreppart.subkey.keyvalue == b"0000000000000000" >>> assert apreppart.subkey.keytype == 17 >>> >>> bytes(tok) b'\xa1\x81\xa90\x81\xa6\xa0\x03\n\x01\x00\xa1\x0b\x06\t*\x86H\x82\xf7\x12\x01\x02\x02\xa2r\x04pon0l\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2`0^\xa0\x03\x02\x01\x12\xa2W\x04UaS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd\xd3\xc3\xd9\xadN`\xd2;\xd7{\xb7\xf4p.\xa9\x9a\xb1}D\xc6|_t\n\r"M\xcd\xe2\t\xf0Ri\xc7\xcf\xb5\xefr9\xf0`iS7N\x06qKP\x06\xde\xc4\x18\xd5_\xcb\x0ct\x03k\xbc\xb9\x1adT\x03\xc1\x8bM\xa3\x1e\x04\x1c\x04\x04\x05\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x17F\x8al\x01c\x00\xcf4\x12oI' >>> assert bytes(tok) == b'\xa1\x81\xa90\x81\xa6\xa0\x03\n\x01\x00\xa1\x0b\x06\t*\x86H\x82\xf7\x12\x01\x02\x02\xa2r\x04pon0l\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2`0^\xa0\x03\x02\x01\x12\xa2W\x04UaS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd\xd3\xc3\xd9\xadN`\xd2;\xd7{\xb7\xf4p.\xa9\x9a\xb1}D\xc6|_t\n\r"M\xcd\xe2\t\xf0Ri\xc7\xcf\xb5\xefr9\xf0`iS7N\x06qKP\x06\xde\xc4\x18\xd5_\xcb\x0ct\x03k\xbc\xb9\x1adT\x03\xc1\x8bM\xa3\x1e\x04\x1c\x04\x04\x05\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x17F\x8al\x01c\x00\xcf4\x12oI' ###(056)=[passed] GSS_Init_sec_context (SPNEGO_negToken: KRB_AP_REP->OK) >>> with KrbRandomPatcher(): ... clicontext, tok, negResult = client.GSS_Init_sec_context(clicontext, tok) ... >>> assert tok is None >>> assert negResult == 0 >>> assert clicontext.KrbSessionKey.key == srvcontext.KrbSessionKey.key >>> assert srvcontext.KrbSessionKey.key == b'0000000000000000' ###(057)=[passed] GSS_GetMICEx/GSS_VerifyMICEx: client sends a signed payload >>> data_header = b"header" # signed but not encrypted >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" # encrypted >>> >>> sig = client.GSS_GetMICEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> assert isinstance(sig, KRB_InnerToken) and sig.TOK_ID == b"\x04\x04" >>> assert sig.root.SND_SEQ == 0x7FFFFFFF//2 + 1 >>> assert bytes(sig) == b'\x04\x04\x04\xff\xff\xff\xff\xff\x00\x00\x00\x00@\x00\x00\x00\xfc\xc6\x86\xab\x85e\x18\xe8\x7f\xa81t' >>> server.GSS_VerifyMICEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data), ... ], ... sig ... ) ###(058)=[passed] GSS_GetMICEx/GSS_VerifyMICEx: server answers back >>> sig = server.GSS_GetMICEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> assert isinstance(sig, KRB_InnerToken) and sig.TOK_ID == b"\x04\x04" >>> assert sig.root.SND_SEQ == 1 >>> assert bytes(sig) == b'\x04\x04\x05\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x01G\x81\x93\xb9\x92\xd0NvHH\xf6\x9c' >>> client.GSS_VerifyMICEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data), ... ], ... sig ... ) ###(059)=[passed] GSS_GetMICEx/GSS_VerifyMICEx: inject fault >>> sig = client.GSS_GetMICEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> bad_data_header = data_header[:-3] + b"hey" >>> try: ... server.GSS_VerifyMICEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=bad_data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data), ... ], ... sig ... ) ... assert False, "No error was reported, but there should have been one" ... except ValueError: ... pass ... ###(060)=[passed] Create client and server KerberosSSP (raw) >>> client = KerberosSSP( ... UPN="User1@DOMAIN.LOCAL", ... SPN="cifs/dc1", ... ST=KRB_Ticket(bytes.fromhex("618204a13082049da003020105a10e1b0c444f4d41494e2e4c4f43414ca2163014a003020103a10d300b1b04636966731b03646331a382046c30820468a003020112a10302010da282045a04820456671f6131b38ee6e682d62cb937b8b79c589753182f8dbcb14a91b031052a3c20f7b4c89bf9a41fe9960d112acc73f6bd6527dfe70700a3d3c2e72b4ba6705dfc040fd56f9d7cd60b580ebecec2bfb240baac619690dbd9301ed98cac037cfdff8ff96ac98358969f3532f9c6adc076d136a0ef96ebddef293df879bb42adfbf7670434f340ad673e0303ae186e1a510d7f50dbfee9ebab323c715d6b27a67ffec60dba9f7475e5dbf88eee1fcc95b7d467ab2b4ecef893a92a25c80b8480ac8c12bc10741523a2738a3d7c3d2c438235111188968486cab2934b32cad1b6b4b2cbf343b25d41ad463c0513cf21cf9f77f072f4a49d8042947064e3375a1ae76c355fd48d5fc163cf7f865af91bcb788cffe2e9e1a30a7e3f91be8fb55b0a8b8c0b600ef3e0e88feaad4fbf4fffe76c9302ee2acfa3b64ca28cd006fd4af9c27d2eb45e47e582b87e632aa23475caeb0e3e9d777339f5cb94abc19ebd080ffc78181bf81ff227182de422937675546633bd6ab688258a94d132fb590f8152d3f19bd55a1f336fb7c382140987ac2389134d8033882f923d3d5324a3e9f5437bd70f095e6bb00ee68d8f21912b19b27924c61b4e3bfe68411f9f220de8dace00e767b662313706730d4dc8539b309fc75e6ca4cae470cdf12cc3cfb191486e3e5eb8c80723b2b0473b07e4ea4d385487dd303df2db8d31f8c90d53c4adcf39ad78cf6c85fbb87b4c4ee531a42c2133df2b0362132374df995420e4b2a6d1e19d7879d518652d5101a316962b27b3884cb67d07572f96b9668ca42cca7311a7152ac7c6d492009192fa4a707989e43b2a10f19e535e7cf8afdaf63ce9a2a85ce1bd17d81cfe76d2ce5759a7fdbeff6fb279b8620bc2c5183b24be831c7ee157114f2700da210b36edb7bda7d91a32f7940bef431c76571cd44499f779cc4ebe829fb34eeaa1e442240d5962bdbcbc16c962974b546e9cee380dda49f651acc5c58acae4ad06d57e4b91d8c5557365e8ddda7ee9550963d70d4f56b44fc5a26e29b36cb21d11221825b5a2217cb1f1454d34d94a855cb860f2fe43681e3d302e7e124273dd18b04fddf660b8858e1e78d022cc03f467f3cf1a6e5df53bb831794542b1d08e38d3bfb0bf2e5ba6f75a0f77d56bf2924b144fff3c87ec7a57bff345ee8a4496676d38c9453c38e64521db2de6d6452aa8f3da1675134e8d90cbb0d274ce6189563fd9a56e56a800661e787b083950623035ddeeb2fb84f6fb2507f2c157e74e81a81970e11475ce926e393a55b06b77c444dbd23688e8a77c7f30337874fef787a187fcafd73a5a4837c8e3e60712308597ff72ea2edae69c9402ad7ae81abb3e9100f0c87b99b2564246bd56af8e6d0ecf2928e5151218f7e627c565e15540666f4f7c0e937c2d0e84782fcb1b535e596f6c4e0aed7c1d350e169d045f2eaaa4bb2f94cd149576f835e5eecb4418677d0444e51fafcbed2afac50b1d320bc223d2623601aee6df6a363a24294bfb3b00f2668dfc404e9fa17fe936e6620756a6918f7de2de343f380fab83fde911124be508")), ... KEY=Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("4aad1c4c7b5bf02bfd061cfaebf0188d6c4f4642d569ca4ab536cb68adcb0e68")), ... ) >>> server = KerberosSSP( ... SPN="cifs/dc1", ... PASSWORD="Password1", ... KEY=Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("133614b285c1d76d4ec78d642e9c6f7451d7652cf6c5fe635af6e89050d42517")), ... ) ###(061)=[passed] GSS_Init_sec_context (KRB_AP_REQ) - DCE_STYLE >>> with KrbRandomPatcher(): ... clicontext, tok, negResult = client.GSS_Init_sec_context( ... None, ... req_flags=( ... GSS_C_FLAGS.GSS_C_DCE_STYLE | ... GSS_C_FLAGS.GSS_C_REPLAY_FLAG | ... GSS_C_FLAGS.GSS_C_SEQUENCE_FLAG | ... GSS_C_FLAGS.GSS_C_MUTUAL_FLAG | ... GSS_C_FLAGS.GSS_C_INTEG_FLAG ... ) ... ) ... >>> assert negResult == 1 >>> assert isinstance(tok, KRB_AP_REQ) >>> ap_req = KRB_AP_REQ(bytes(tok)) >>> assert isinstance(ap_req, KRB_AP_REQ) >>> assert ap_req.apOptions == "001" >>> assert ap_req.ticket == client.ST >>> >>> auth = ap_req.authenticator.decrypt(client.KEY) >>> assert auth.cksum.cksumtype == 0x8003 >>> assert auth.cksum.checksum.Flags == ( ... GSS_C_FLAGS.GSS_C_DCE_STYLE | ... GSS_C_FLAGS.GSS_C_REPLAY_FLAG | ... GSS_C_FLAGS.GSS_C_SEQUENCE_FLAG | ... GSS_C_FLAGS.GSS_C_MUTUAL_FLAG | ... GSS_C_FLAGS.GSS_C_INTEG_FLAG ... ) >>> assert auth.cksum.checksum.Exts[0].sprintf("%type%") == 'GSS_EXTS_CHANNEL_BINDING' >>> >>> bytes(tok) b'n\x82\x05\xf90\x82\x05\xf5\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x04\x03\x02\x05 \xa3\x82\x04\xa5a\x82\x04\xa10\x82\x04\x9d\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2\x160\x14\xa0\x03\x02\x01\x03\xa1\r0\x0b\x1b\x04cifs\x1b\x03dc1\xa3\x82\x04l0\x82\x04h\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\r\xa2\x82\x04Z\x04\x82\x04Vg\x1fa1\xb3\x8e\xe6\xe6\x82\xd6,\xb97\xb8\xb7\x9cX\x97S\x18/\x8d\xbc\xb1J\x91\xb01\x05*< \xf7\xb4\xc8\x9b\xf9\xa4\x1f\xe9\x96\r\x11*\xccs\xf6\xbde\'\xdf\xe7\x07\x00\xa3\xd3\xc2\xe7+K\xa6p]\xfc\x04\x0f\xd5o\x9d|\xd6\x0bX\x0e\xbe\xce\xc2\xbf\xb2@\xba\xaca\x96\x90\xdb\xd90\x1e\xd9\x8c\xac\x03|\xfd\xff\x8f\xf9j\xc9\x83X\x96\x9f52\xf9\xc6\xad\xc0v\xd16\xa0\xef\x96\xeb\xdd\xef)=\xf8y\xbbB\xad\xfb\xf7g\x044\xf3@\xadg>\x03\x03\xae\x18n\x1aQ\r\x7fP\xdb\xfe\xe9\xeb\xab2\x9dws9\xf5\xcb\x94\xab\xc1\x9e\xbd\x08\x0f\xfcx\x18\x1b\xf8\x1f\xf2\'\x18-\xe4"\x93vuTf3\xbdj\xb6\x88%\x8a\x94\xd12\xfbY\x0f\x81R\xd3\xf1\x9b\xd5Z\x1f3o\xb7\xc3\x82\x14\t\x87\xac#\x89\x13M\x803\x88/\x92==S$\xa3\xe9\xf5C{\xd7\x0f\t^k\xb0\x0e\xe6\x8d\x8f!\x91+\x19\xb2y$\xc6\x1bN;\xfehA\x1f\x9f"\r\xe8\xda\xce\x00\xe7g\xb6b17\x06s\rM\xc8S\x9b0\x9f\xc7^l\xa4\xca\xe4p\xcd\xf1,\xc3\xcf\xb1\x91Hn>^\xb8\xc8\x07#\xb2\xb0G;\x07\xe4\xeaM8T\x87\xdd0=\xf2\xdb\x8d1\xf8\xc9\rS\xc4\xad\xcf9\xadx\xcfl\x85\xfb\xb8{LN\xe51\xa4,!3\xdf+\x03b\x13#t\xdf\x99T \xe4\xb2\xa6\xd1\xe1\x9dxy\xd5\x18e-Q\x01\xa3\x16\x96+\'\xb3\x88L\xb6}\x07W/\x96\xb9f\x8c\xa4,\xcas\x11\xa7\x15*\xc7\xc6\xd4\x92\x00\x91\x92\xfaJpy\x89\xe4;*\x10\xf1\x9eS^|\xf8\xaf\xda\xf6<\xe9\xa2\xa8\\\xe1\xbd\x17\xd8\x1c\xfev\xd2\xceWY\xa7\xfd\xbe\xffo\xb2y\xb8b\x0b\xc2\xc5\x18;$\xbe\x83\x1c~\xe1W\x11O\'\x00\xda!\x0b6\xed\xb7\xbd\xa7\xd9\x1a2\xf7\x94\x0b\xefC\x1cvW\x1c\xd4D\x99\xf7y\xccN\xbe\x82\x9f\xb3N\xea\xa1\xe4B$\rYb\xbd\xbc\xbc\x16\xc9b\x97KTn\x9c\xee8\r\xdaI\xf6Q\xac\xc5\xc5\x8a\xca\xe4\xad\x06\xd5~K\x91\xd8\xc5Use\xe8\xdd\xda~\xe9U\tc\xd7\rOV\xb4O\xc5\xa2n)\xb3l\xb2\x1d\x11"\x18%\xb5\xa2!|\xb1\xf1EM4\xd9J\x85\\\xb8`\xf2\xfeCh\x1e=0.~\x12Bs\xdd\x18\xb0O\xdd\xf6`\xb8\x85\x8e\x1ex\xd0"\xcc\x03\xf4g\xf3\xcf\x1an]\xf5;\xb81yEB\xb1\xd0\x8e8\xd3\xbf\xb0\xbf.[\xa6\xf7Z\x0fw\xd5k\xf2\x92K\x14O\xff<\x87\xeczW\xbf\xf3E\xee\x8aD\x96gm8\xc9E<8\xe6E!\xdb-\xe6\xd6E*\xa8\xf3\xda\x16u\x13N\x8d\x90\xcb\xb0\xd2t\xcea\x89V?\xd9\xa5nV\xa8\x00f\x1ex{\x089Pb05\xdd\xee\xb2\xfb\x84\xf6\xfb%\x07\xf2\xc1W\xe7N\x81\xa8\x19p\xe1\x14u\xce\x92n9:U\xb0kw\xc4D\xdb\xd26\x88\xe8\xa7|\x7f03xt\xfe\xf7\x87\xa1\x87\xfc\xaf\xd7:ZH7\xc8\xe3\xe6\x07\x120\x85\x97\xffr\xea.\xda\xe6\x9c\x94\x02\xadz\xe8\x1a\xbb>\x91\x00\xf0\xc8{\x99\xb2VBF\xbdV\xaf\x8em\x0e\xcf)(\xe5\x15\x12\x18\xf7\xe6\'\xc5e\xe1U@foO|\x0e\x93|-\x0e\x84x/\xcb\x1bS^YolN\n\xed|\x1d5\x0e\x16\x9d\x04_.\xaa\xa4\xbb/\x94\xcd\x14\x95v\xf85\xe5\xee\xcbD\x18g}\x04D\xe5\x1f\xaf\xcb\xed*\xfa\xc5\x0b\x1d2\x0b\xc2#\xd2b6\x01\xae\xe6\xdfj6:$)K\xfb;\x00\xf2f\x8d\xfc@N\x9f\xa1\x7f\xe96\xe6b\x07V\xa6\x91\x8f}\xe2\xde4?8\x0f\xab\x83\xfd\xe9\x11\x12K\xe5\x08\xa4\x82\x0180\x82\x014\xa0\x03\x02\x01\x12\xa2\x82\x01+\x04\x82\x01\'\\>\t\xe4\x1d8,a(\x7f\x1e\xd2\x8dHH\x9c\xef\x8d\x1fqW\xbf(\x97S+\rs_zM\xee\xa7\xc2\x1a\x8eh1\xa4\xcb\x06\xed\x8e\xe6\xc0\x9a\xf7\x93g5\xa5vp\x0e~G\xaf:\xbb<\xaa2\x0e\xf8+l \xc5\xdb\x17,\xa9\x99\xae\x80\r\x0f\xdd4\x92\xf1\xa3h\xc3)^*I\x92\x01\x9f\x06jW\x1a\xac\x02r\x05\n`d\xd1\xda\xf5i\x9e\x04e\xa9\\,2\xf9\xa55\x16m\x92\x7fI\xe6\x81\x98\xe5V\xa1i\x17\xf0\x10\xf9\x16\x92\x81\x95mJ\xe3\xcc\x0f\x83gW\xca\xc5l\xc2~\x1fFmt~\x81\xd5%{\x87\xe1!\x15\xc4o\x163,\x8eg\xd4\xc5\xdc\xd7\x11at\x87v\x13j\xd0/\x07z/\xee\xd6\xd8b\x0b(\xae*\xd7\x87\xe3\xb7\x1b\xf8d\xd8\xbc\xadL7\x18a0o`\xa7\xd1Q\xe8\xf3\x9a\xf1\x95\xf2\xec\x06\xc0v\xba\x81\xc4\xbc7@8\x08\xd9\xa7{~\x8fz\xeeE\xdc\xc9\x81"\xb6b\x872=.\x19$KP\xcd\xfd\x85\x861@c\x05,\xa9\x98\xe9\x8e\x84A\x9f\n#&\xb2\xf4"\xa5O\x86\xc9\x93\xcb\x97\x0e\x18C\xf5\x00^\xe8De\x94|\xbaf' >>> assert bytes(tok) == b'n\x82\x05\xf90\x82\x05\xf5\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0e\xa2\x04\x03\x02\x05 \xa3\x82\x04\xa5a\x82\x04\xa10\x82\x04\x9d\xa0\x03\x02\x01\x05\xa1\x0e\x1b\x0cDOMAIN.LOCAL\xa2\x160\x14\xa0\x03\x02\x01\x03\xa1\r0\x0b\x1b\x04cifs\x1b\x03dc1\xa3\x82\x04l0\x82\x04h\xa0\x03\x02\x01\x12\xa1\x03\x02\x01\r\xa2\x82\x04Z\x04\x82\x04Vg\x1fa1\xb3\x8e\xe6\xe6\x82\xd6,\xb97\xb8\xb7\x9cX\x97S\x18/\x8d\xbc\xb1J\x91\xb01\x05*< \xf7\xb4\xc8\x9b\xf9\xa4\x1f\xe9\x96\r\x11*\xccs\xf6\xbde\'\xdf\xe7\x07\x00\xa3\xd3\xc2\xe7+K\xa6p]\xfc\x04\x0f\xd5o\x9d|\xd6\x0bX\x0e\xbe\xce\xc2\xbf\xb2@\xba\xaca\x96\x90\xdb\xd90\x1e\xd9\x8c\xac\x03|\xfd\xff\x8f\xf9j\xc9\x83X\x96\x9f52\xf9\xc6\xad\xc0v\xd16\xa0\xef\x96\xeb\xdd\xef)=\xf8y\xbbB\xad\xfb\xf7g\x044\xf3@\xadg>\x03\x03\xae\x18n\x1aQ\r\x7fP\xdb\xfe\xe9\xeb\xab2\x9dws9\xf5\xcb\x94\xab\xc1\x9e\xbd\x08\x0f\xfcx\x18\x1b\xf8\x1f\xf2\'\x18-\xe4"\x93vuTf3\xbdj\xb6\x88%\x8a\x94\xd12\xfbY\x0f\x81R\xd3\xf1\x9b\xd5Z\x1f3o\xb7\xc3\x82\x14\t\x87\xac#\x89\x13M\x803\x88/\x92==S$\xa3\xe9\xf5C{\xd7\x0f\t^k\xb0\x0e\xe6\x8d\x8f!\x91+\x19\xb2y$\xc6\x1bN;\xfehA\x1f\x9f"\r\xe8\xda\xce\x00\xe7g\xb6b17\x06s\rM\xc8S\x9b0\x9f\xc7^l\xa4\xca\xe4p\xcd\xf1,\xc3\xcf\xb1\x91Hn>^\xb8\xc8\x07#\xb2\xb0G;\x07\xe4\xeaM8T\x87\xdd0=\xf2\xdb\x8d1\xf8\xc9\rS\xc4\xad\xcf9\xadx\xcfl\x85\xfb\xb8{LN\xe51\xa4,!3\xdf+\x03b\x13#t\xdf\x99T \xe4\xb2\xa6\xd1\xe1\x9dxy\xd5\x18e-Q\x01\xa3\x16\x96+\'\xb3\x88L\xb6}\x07W/\x96\xb9f\x8c\xa4,\xcas\x11\xa7\x15*\xc7\xc6\xd4\x92\x00\x91\x92\xfaJpy\x89\xe4;*\x10\xf1\x9eS^|\xf8\xaf\xda\xf6<\xe9\xa2\xa8\\\xe1\xbd\x17\xd8\x1c\xfev\xd2\xceWY\xa7\xfd\xbe\xffo\xb2y\xb8b\x0b\xc2\xc5\x18;$\xbe\x83\x1c~\xe1W\x11O\'\x00\xda!\x0b6\xed\xb7\xbd\xa7\xd9\x1a2\xf7\x94\x0b\xefC\x1cvW\x1c\xd4D\x99\xf7y\xccN\xbe\x82\x9f\xb3N\xea\xa1\xe4B$\rYb\xbd\xbc\xbc\x16\xc9b\x97KTn\x9c\xee8\r\xdaI\xf6Q\xac\xc5\xc5\x8a\xca\xe4\xad\x06\xd5~K\x91\xd8\xc5Use\xe8\xdd\xda~\xe9U\tc\xd7\rOV\xb4O\xc5\xa2n)\xb3l\xb2\x1d\x11"\x18%\xb5\xa2!|\xb1\xf1EM4\xd9J\x85\\\xb8`\xf2\xfeCh\x1e=0.~\x12Bs\xdd\x18\xb0O\xdd\xf6`\xb8\x85\x8e\x1ex\xd0"\xcc\x03\xf4g\xf3\xcf\x1an]\xf5;\xb81yEB\xb1\xd0\x8e8\xd3\xbf\xb0\xbf.[\xa6\xf7Z\x0fw\xd5k\xf2\x92K\x14O\xff<\x87\xeczW\xbf\xf3E\xee\x8aD\x96gm8\xc9E<8\xe6E!\xdb-\xe6\xd6E*\xa8\xf3\xda\x16u\x13N\x8d\x90\xcb\xb0\xd2t\xcea\x89V?\xd9\xa5nV\xa8\x00f\x1ex{\x089Pb05\xdd\xee\xb2\xfb\x84\xf6\xfb%\x07\xf2\xc1W\xe7N\x81\xa8\x19p\xe1\x14u\xce\x92n9:U\xb0kw\xc4D\xdb\xd26\x88\xe8\xa7|\x7f03xt\xfe\xf7\x87\xa1\x87\xfc\xaf\xd7:ZH7\xc8\xe3\xe6\x07\x120\x85\x97\xffr\xea.\xda\xe6\x9c\x94\x02\xadz\xe8\x1a\xbb>\x91\x00\xf0\xc8{\x99\xb2VBF\xbdV\xaf\x8em\x0e\xcf)(\xe5\x15\x12\x18\xf7\xe6\'\xc5e\xe1U@foO|\x0e\x93|-\x0e\x84x/\xcb\x1bS^YolN\n\xed|\x1d5\x0e\x16\x9d\x04_.\xaa\xa4\xbb/\x94\xcd\x14\x95v\xf85\xe5\xee\xcbD\x18g}\x04D\xe5\x1f\xaf\xcb\xed*\xfa\xc5\x0b\x1d2\x0b\xc2#\xd2b6\x01\xae\xe6\xdfj6:$)K\xfb;\x00\xf2f\x8d\xfc@N\x9f\xa1\x7f\xe96\xe6b\x07V\xa6\x91\x8f}\xe2\xde4?8\x0f\xab\x83\xfd\xe9\x11\x12K\xe5\x08\xa4\x82\x0180\x82\x014\xa0\x03\x02\x01\x12\xa2\x82\x01+\x04\x82\x01\'\\>\t\xe4\x1d8,a(\x7f\x1e\xd2\x8dHH\x9c\xef\x8d\x1fqW\xbf(\x97S+\rs_zM\xee\xa7\xc2\x1a\x8eh1\xa4\xcb\x06\xed\x8e\xe6\xc0\x9a\xf7\x93g5\xa5vp\x0e~G\xaf:\xbb<\xaa2\x0e\xf8+l \xc5\xdb\x17,\xa9\x99\xae\x80\r\x0f\xdd4\x92\xf1\xa3h\xc3)^*I\x92\x01\x9f\x06jW\x1a\xac\x02r\x05\n`d\xd1\xda\xf5i\x9e\x04e\xa9\\,2\xf9\xa55\x16m\x92\x7fI\xe6\x81\x98\xe5V\xa1i\x17\xf0\x10\xf9\x16\x92\x81\x95mJ\xe3\xcc\x0f\x83gW\xca\xc5l\xc2~\x1fFmt~\x81\xd5%{\x87\xe1!\x15\xc4o\x163,\x8eg\xd4\xc5\xdc\xd7\x11at\x87v\x13j\xd0/\x07z/\xee\xd6\xd8b\x0b(\xae*\xd7\x87\xe3\xb7\x1b\xf8d\xd8\xbc\xadL7\x18a0o`\xa7\xd1Q\xe8\xf3\x9a\xf1\x95\xf2\xec\x06\xc0v\xba\x81\xc4\xbc7@8\x08\xd9\xa7{~\x8fz\xeeE\xdc\xc9\x81"\xb6b\x872=.\x19$KP\xcd\xfd\x85\x861@c\x05,\xa9\x98\xe9\x8e\x84A\x9f\n#&\xb2\xf4"\xa5O\x86\xc9\x93\xcb\x97\x0e\x18C\xf5\x00^\xe8De\x94|\xbaf' ###(062)=[passed] GSS_Accept_sec_context (KRB_AP_REQ->KRB_AP_REP) - DCE_STYLE >>> with KrbRandomPatcher(): ... srvcontext, tok, negResult = server.GSS_Accept_sec_context(None, tok) ... >>> assert negResult == 1 >>> assert isinstance(tok, KRB_AP_REP) >>> ap_rep = KRB_AP_REP(bytes(tok)) >>> >>> apreppart = ap_rep.encPart.decrypt(client.KEY) >>> assert apreppart.ctime == "20240305165255Z" >>> assert apreppart.subkey.keyvalue == b"0000000000000000" >>> assert apreppart.subkey.keytype == 17 >>> >>> bytes(tok) b'on0l\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2`0^\xa0\x03\x02\x01\x12\xa2W\x04UaS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd\xd3\xc3\xd9\xadN`\xd2;\xd7{\xb7\xf4p.\xa9\x9a\xb1}D\xc6|_t\n\r"M\xcd\xe2\t\xf0Ri\xc7\xcf\xb5\xefr9\xf0`iS7N\x06qKP\x06\xde\xc4\x18\xd5_\xcb\x0ct\x03k\xbc\xb9\x1adT\x03\xc1\x8bM' >>> assert bytes(tok) == b'on0l\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2`0^\xa0\x03\x02\x01\x12\xa2W\x04UaS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd\xd3\xc3\xd9\xadN`\xd2;\xd7{\xb7\xf4p.\xa9\x9a\xb1}D\xc6|_t\n\r"M\xcd\xe2\t\xf0Ri\xc7\xcf\xb5\xefr9\xf0`iS7N\x06qKP\x06\xde\xc4\x18\xd5_\xcb\x0ct\x03k\xbc\xb9\x1adT\x03\xc1\x8bM' ###(063)=[passed] GSS_Init_sec_context (SPNEGO_negToken: KRB_AP_REP->KRB_AP_REP) - DCE_STYLE >>> with KrbRandomPatcher(): ... clicontext, tok, negResult = client.GSS_Init_sec_context(clicontext, tok) ... >>> assert negResult == 0 >>> assert isinstance(tok, KRB_AP_REP) >>> ap_rep = KRB_AP_REP(bytes(tok)) >>> >>> apreppart = ap_rep.encPart.decrypt(client.KEY) >>> assert apreppart.ctime == "20240305165255Z" >>> >>> bytes(tok) b'oQ0O\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2C0A\xa0\x03\x02\x01\x12\xa2:\x048aS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd.e\xec\xef\xce\x91\x1d\x99\xd8\xcd2\x01\x0fA\xe4\xde\x12\xf4\xbc>\xe1\x98T\xc4\x82\xb5w\x1arZb\xdb\x9b-+\xf3\xfa\x0b\xdeD' >>> assert bytes(tok) == b'oQ0O\xa0\x03\x02\x01\x05\xa1\x03\x02\x01\x0f\xa2C0A\xa0\x03\x02\x01\x12\xa2:\x048aS\xeck\xcc\xad~\xfa^\x8d\xca\xbb\xc5\xd2/\xfd.e\xec\xef\xce\x91\x1d\x99\xd8\xcd2\x01\x0fA\xe4\xde\x12\xf4\xbc>\xe1\x98T\xc4\x82\xb5w\x1arZb\xdb\x9b-+\xf3\xfa\x0b\xdeD' ###(064)=[passed] GSS_Accept_sec_context (KRB_AP_REP->OK) - DCE_STYLE >>> with KrbRandomPatcher(): ... srvcontext, tok, negResult = server.GSS_Accept_sec_context(srvcontext, tok) ... >>> assert negResult == 0 >>> assert tok is None ###(065)=[passed] GSS_Wrap/GSS_Unwrap: client sends wrapped payload without confidentiality >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" >>> >>> sig = client.GSS_Wrap( ... clicontext, ... data, ... conf_req_flag=False, ... ) >>> assert sig.TOK_ID == b"\x05\x04" >>> assert sig.root.Flags == 4 >>> assert sig.root.EC == 12 >>> assert sig.root.RRC == 12 >>> assert bytes(sig) == b'\x05\x04\x04\xff\x00\x0c\x00\x0c\x00\x00\x00\x00@\x00\x00\x00\x8f\x0c\xab\x90h\xc8\xdf1\x078\x03\x0ctestAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE' >>> >>> ddata = server.GSS_Unwrap( ... srvcontext, ... sig, ... ) >>> assert ddata == data ###(066)=[passed] GSS_Wrap/GSS_Unwrap: server answers back without confidentiality >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" >>> >>> sig = server.GSS_Wrap( ... srvcontext, ... data, ... conf_req_flag=False, ... ) >>> assert sig.TOK_ID == b"\x05\x04" >>> assert sig.root.Flags == 5 >>> assert sig.root.EC == 12 >>> assert sig.root.RRC == 12 >>> bytes(sig) b"\x05\x04\x05\xff\x00\x0c\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00~\xd8\x08\x89K'\xa0\x01\xda\x7f\xff\xd3testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" >>> assert bytes(sig) == b"\x05\x04\x05\xff\x00\x0c\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00~\xd8\x08\x89K'\xa0\x01\xda\x7f\xff\xd3testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" >>> >>> ddata = client.GSS_Unwrap( ... clicontext, ... sig, ... ) >>> assert ddata == data ###(067)=[passed] GSS_WrapEx/GSS_UnwrapEx: client sends wrapped payload with confidentiality >>> from unittest import mock >>> from scapy.libs.rfc3961 import Key, EncryptionType >>> >>> >>> dcerpc_hdr = bytes.fromhex("0500000310000000fc004c00030000008c00000001000c00") >>> dcerpc_data = bytes.fromhex("000000001bc104a40f046e43bd2a4b2722092807010000000100000000000000e40400000904000000000000010000000600000001000000000002000000000001000000000000000000020000000000120000000000000000000000000000001200000000000000440043003d0063006f006e0074006f0073006f002c00440043003d0063006f006d00000000000000") >>> dcerpc_sectrailer = bytes.fromhex("0906040000000000") >>> Confounder = bytes.fromhex("aeb63f1db8e2cb61548867a0e4074e85") >>> k = Key(EncryptionType.AES256_CTS_HMAC_SHA1_96, key=bytes.fromhex("613f2dfabd35d17d86b00cf1001ce9458bf379c1d3921bbfdcd2de8782bec540")) >>> SeqNum = 0x60298ed4 >>> >>> >>> clicontext = KerberosSSP.CONTEXT(IsAcceptor=False) >>> srvcontext = KerberosSSP.CONTEXT(IsAcceptor=True) >>> >>> clicontext.KrbSessionKey = srvcontext.KrbSessionKey = k >>> clicontext.SendSeqNum = srvcontext.RecvSeqNum = SeqNum >>> clicontext.flags = srvcontext.flags = ( ... GSS_C_FLAGS.GSS_C_DCE_STYLE | ... GSS_C_FLAGS.GSS_C_REPLAY_FLAG | ... GSS_C_FLAGS.GSS_C_SEQUENCE_FLAG | ... GSS_C_FLAGS.GSS_C_MUTUAL_FLAG | ... GSS_C_FLAGS.GSS_C_INTEG_FLAG | ... GSS_C_FLAGS.GSS_C_CONF_FLAG ... ) >>> >>> client = server = KerberosSSP() >>> >>> >>> with mock.patch('scapy.layers.kerberos.os.urandom', side_effect=lambda x: Confounder): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=dcerpc_hdr), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=dcerpc_data), ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=dcerpc_sectrailer), ... ], ... ) ... >>> assert _msgs[0].data == dcerpc_hdr >>> assert _msgs[1].data == b'|\xdf\xf8\xe5lS#\xe9\x9c\x15\xb4\xad\x06\xa8\xb9\x01\xd2\x13\xe6qLL\xd1\x82:v\xf2\xb1B\xc9u \xc5\xc88\xce\x91\xed*\x9c+v,W\x97\xde\xaan\xb8\x80\x9bd\xedW\x1aot\xa1\xb8\xbdp\xc0\xee\xe5\xb0\xa4\xce\x15{OA\x08\xee#;w\tV\x0e3\x9el\x00\x8f\xbaM\x07[\x1f,&\x99\x92\x91tvh\xbf\xcf\xb6\xd1\xbaB\xe3\xc9\x943\xed\xf04\x92!\xbd`\x00\x05;\xfce18H\xcb\xd8\x1eTT\x18\xbe\xb4\xbc\x08X\x1b$\x96\x04\xc9\xc6\xf1$\xfc,\xc0' >>> assert _msgs[2].data == dcerpc_sectrailer >>> >>> assert sig.TOK_ID == b"\x05\x04" >>> assert sig.root.Flags == 6 >>> assert sig.root.Filler == 0xFF >>> assert sig.root.EC == 16 >>> assert sig.root.RRC == 28 >>> assert sig.root.SND_SEQ == SeqNum >>> assert bytes(sig) == b'\x05\x04\x06\xff\x00\x10\x00\x1c\x00\x00\x00\x00`)\x8e\xd4\xf8\xb9\x99JO\xdeA\x9c+t\xbb\xe9>\xf0G\xd5\x9d\x9b\xca:\x10\xee\x1f\xe93\xc1*/`H\x89\xf4\xab\xd7E!\xd5<*ou\x94\xa3\t\xf1\x7f\xaa\xe9\x95}\xaa\xb7\x9f\xd4F\xfe\x9bt\xa1\x00' >>> >>> decrypted = server.GSS_UnwrapEx( ... srvcontext, ... _msgs, ... sig, ... )[1].data >>> assert decrypted == dcerpc_data ###(068)=[passed] GSS_WrapEx/GSS_UnwrapEx: server answers back confidentiality >>> with KrbRandomPatcher(): ... _msgs, sig = server.GSS_WrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=dcerpc_hdr), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=dcerpc_data), ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=dcerpc_sectrailer), ... ], ... ) ... >>> assert _msgs[0].data == dcerpc_hdr >>> assert _msgs[1].data == b"\x9av\xf9 :e\x0f\xd8!\x1c\xc7\x076'a.NN\xcf\x0c\xec\x8c\x83\xb4\x9c'<%i\x17\xbe\xcc\x01 \x1d\x031\\Y\x92H\xe4\xd50W\x8e\xe0\xe85\xd8\xf5c[\x97Bl\x16\x12P\x03l\xdb\x99$\xef\x9a\x06\x85\x18\xcf\xc5\x91~\x88\xca\xb2D\xf8\xe5(+\xb30\r\xbf\xe8\xc7\x11\x18\xfa,&(\xc3l)c\x08%\xaf\x80\xe5u\xadw\x06\x15\xe8\xed\xfa\xb3\xe0\x1d\xb2\xdan\xcfb<\x01\x9d\xa6\xb4=W:Z\xb6\xbf\xe9\x1a\xc8g\x9d\x01\x87>> assert _msgs[2].data == dcerpc_sectrailer >>> >>> assert sig.TOK_ID == b"\x05\x04" >>> assert sig.root.Flags == 7 >>> assert sig.root.Filler == 0xFF >>> assert sig.root.EC == 16 >>> assert sig.root.RRC == 28 >>> assert sig.root.SND_SEQ == 0 >>> assert bytes(sig) == b'\x05\x04\x07\xff\x00\x10\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00>> >>> decrypted = client.GSS_UnwrapEx( ... clicontext, ... _msgs, ... sig, ... )[1].data >>> assert decrypted == dcerpc_data Layer 2 regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/l2.uts] by UTscapy in 0.2839806079864502 └ Passed=15 └ Failed=0 ###### ## Layer 2 Unit Tests ###### ###(001)=[passed] Test ARPingResult output >>> ar = ARPingResult([(None, Ether(src='70:ee:50:50:ee:70')/ARP(psrc='192.168.0.1'))]) >>> with ContextManagerCaptureOutput() as cmco: ... ar.show() ... result_ar = cmco.get_output() ... >>> assert "70:ee:50:50:ee:70 Netatmo 192.168.0.1" in result_ar ###(002)=[passed] arp_mitm - IP to IP >>> from scapy.plist import QueryAnswer >>> >>> srp_step = 0 >>> >>> def srp_spoof(x, *args, **kwargs): ... global srp_step ... assert x.dst == "ff:ff:ff:ff:ff:ff" ... if srp_step == 0: ... assert x.pdst == "192.168.0.1" ... ans = Ether(src="cc:cc:cc:cc:cc:cc", dst=x.src)/ARP(hwsrc="cc:cc:cc:cc:cc:cc", hwdst=x.hwsrc, psrc=x.pdst, pdst=x.psrc) ... elif srp_step == 1: ... assert x.pdst == "192.168.0.2" ... ans = Ether(src="bb:bb:bb:bb:bb:bb", dst=x.src)/ARP(hwsrc="bb:bb:bb:bb:bb:bb", hwdst=x.hwsrc, psrc=x.pdst, pdst=x.psrc) ... else: ... assert False ... srp_step += 1 ... return SndRcvList([QueryAnswer(x, ans)]), PacketList() ... >>> srploop_step = 0 >>> >>> def srploop_spoof(x, *args, **kwargs): ... assert len(x) == 2 ... assert x[0].dst == "cc:cc:cc:cc:cc:cc" ... assert x[0].src == x[0].hwsrc == "aa:aa:aa:aa:aa:aa" ... assert x[0].hwdst == "00:00:00:00:00:00" ... assert x[0].psrc == "192.168.0.2" ... assert x[0].pdst == "192.168.0.1" ... assert x[1].dst == "bb:bb:bb:bb:bb:bb" ... assert x[1].src == x[1].hwsrc == "aa:aa:aa:aa:aa:aa" ... assert x[1].hwdst == "00:00:00:00:00:00" ... assert x[1].psrc == "192.168.0.1" ... assert x[1].pdst == "192.168.0.2" ... >>> def sendp_spoof(x, *args, **kwargs): ... assert len(x) == 2 ... assert x[0].dst == "ff:ff:ff:ff:ff:ff" ... assert x[0].src == x[0].hwsrc == "bb:bb:bb:bb:bb:bb" ... assert x[0].hwdst == "00:00:00:00:00:00" ... assert x[0].psrc == "192.168.0.2" ... assert x[0].pdst == "192.168.0.1" ... assert x[1].dst == "ff:ff:ff:ff:ff:ff" ... assert x[1].src == x[1].hwsrc == "cc:cc:cc:cc:cc:cc" ... assert x[1].hwdst == "00:00:00:00:00:00" ... assert x[1].psrc == "192.168.0.1" ... assert x[1].pdst == "192.168.0.2" ... >>> from unittest import mock >>> with mock.patch('scapy.layers.l2.srp', side_effect=srp_spoof), \ ... mock.patch('scapy.layers.l2.srploop', side_effect=srploop_spoof), \ ... mock.patch('scapy.layers.l2.sendp', side_effect=sendp_spoof): ... arp_mitm( ... "192.168.0.1", ... "192.168.0.2", ... target_mac='aa:aa:aa:aa:aa:aa', ... ) ... MITM on eth0: ['cc:cc:cc:cc:cc:cc'] <--> aa:aa:aa:aa:aa:aa <--> ['bb:bb:bb:bb:bb:bb'] Restoring... ###(003)=[passed] arp_mitm - IP to range >>> from scapy.plist import QueryAnswer >>> >>> def srp_spoof(x, *args, **kwargs): ... assert x.dst == "ff:ff:ff:ff:ff:ff" ... assert x.pdst == Net("192.168.0.2/24") ... ans = Ether(src="cc:cc:cc:cc:cc:cc", dst=x.src)/ARP(hwsrc="cc:cc:cc:cc:cc:cc", hwdst=x.hwsrc, psrc=x.pdst, pdst=x.psrc) ... return SndRcvList([ ... QueryAnswer(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.0.2"), Ether(src="cc:cc:cc:cc:cc:cc", dst=x.src)/ARP(hwsrc="cc:cc:cc:cc:cc:cc", psrc="192.168.0.2", pdst="192.168.0.1")), ... QueryAnswer(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.0.9"), Ether(src="11:11:11:11:11:11", dst=x.src)/ARP(hwsrc="11:11:11:11:11:11", psrc="192.168.0.9", pdst="192.168.0.1")), ... QueryAnswer(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.0.17"), Ether(src="22:22:22:22:22:22", dst=x.src)/ARP(hwsrc="22:22:22:22:22:22", psrc="192.168.0.17", pdst="192.168.0.1")), ... ]), PacketList() ... >>> srploop_step = 0 >>> >>> def srploop_spoof(x, *args, **kwargs): ... assert len(x) == 12 ... assert [bytes(y) for y in x] == [ ... b'\xdd\xdd\xdd\xdd\xdd\xdd\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x02\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xdd\xdd\xdd\xdd\xdd\xdd\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\t\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xdd\xdd\xdd\xdd\xdd\xdd\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x11\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xee\xee\xee\xee\xee\xee\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x02\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xee\xee\xee\xee\xee\xee\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\t\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xee\xee\xee\xee\xee\xee\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x11\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x01', ... b'\xcc\xcc\xcc\xcc\xcc\xcc\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x02', ... b'\xcc\xcc\xcc\xcc\xcc\xcc\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x02', ... b'\x11\x11\x11\x11\x11\x11\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\t', ... b'\x11\x11\x11\x11\x11\x11\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\t', ... b'""""""\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x11', ... b'""""""\xaa\xaa\xaa\xaa\xaa\xaa\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\xaa\xaa\xaa\xaa\xaa\xaa\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\xc0\xa8\x00\x11' ... ] ... >>> def sendp_spoof(x, *args, **kwargs): ... pass ... >>> from unittest import mock >>> with mock.patch('scapy.layers.l2.srp', side_effect=srp_spoof), \ ... mock.patch('scapy.layers.l2.srploop', side_effect=srploop_spoof), \ ... mock.patch('scapy.layers.l2.sendp', side_effect=sendp_spoof): ... arp_mitm( ... "192.168.0.1", ... "192.168.0.2/24", ... mac1=["dd:dd:dd:dd:dd:dd", "ee:ee:ee:ee:ee:ee"], ... target_mac='aa:aa:aa:aa:aa:aa', ... ) ... MITM on eth0: ['dd:dd:dd:dd:dd:dd', 'ee:ee:ee:ee:ee:ee'] <--> aa:aa:aa:aa:aa:aa <--> ['cc:cc:cc:cc:cc:cc', '11:11:11:11:11:11', '22:22:22:22:22:22'] Restoring... ###### ## STP tests ###### ###(004)=[passed] STP - Basic Instantiation >>> assert raw(STP()) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00\x02\x00\x0f\x00' ###(005)=[passed] STP - Basic Dissection >>> s = STP(b'\x00\x00\x00\x00\x00\x00\x00\x12\x13\x14\x15\x16\x17\x00\x00\x00\x00\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x01\x00\x14\x00\x05\x00\x0f\x00') >>> assert s.rootmac == "12:13:14:15:16:17" >>> assert s.bridgemac == "aa:aa:aa:aa:aa:aa" >>> assert s.hellotime == 5 ###### ## ARP ###### ###(006)=[passed] Simple Ether() / ARP() show >>> (Ether() / ARP()).show() ###[ Ethernet ]### dst = None src = 52:54:00:e1:37:0d type = ARP ###[ ARP ]### hwtype = Ethernet (10Mb) ptype = IPv4 hwlen = None plen = None op = who-has hwsrc = 52:54:00:e1:37:0d psrc = 192.168.122.12 hwdst = 00:00:00:00:00:00 pdst = 0.0.0.0 ###(007)=[passed] ARP for IPv4 >>> p = raw(ARP()) >>> assert p == raw(ARP(ptype=0x0800)) >>> p = ARP(p) >>> assert p.ptype == 0x0800 >>> assert valid_ip(p.pdst) >>> assert valid_ip(p.psrc) >>> assert isinstance(p.payload, NoPayload) ###(008)=[passed] ARP for IPv6 >>> p = ARP(raw(ARP(ptype=0x86dd))) >>> assert p.ptype == 0x86dd >>> assert valid_ip6(p.pdst) >>> assert valid_ip6(p.psrc) >>> assert isinstance(p.payload, NoPayload) ###(009)=[passed] Dummy ARP >>> p = ARP(raw(ARP(plen=2, hwlen=1, hwdst="x", hwsrc="y", pdst="aa", psrc="bb"))) >>> assert p.hwdst == b"x" >>> assert p.hwsrc == b"y" >>> assert p.pdst == b"aa" >>> assert p.psrc == b"bb" >>> assert isinstance(p.payload, NoPayload) >>> >>> p = ARP(raw(ARP(plen=1, hwlen=1))) >>> assert p.hwdst == p.hwsrc == p.pdst == p.psrc == b"\x00" >>> assert isinstance(p.payload, NoPayload) >>> >>> p = ARP(pdst='192.168.178.0/24') >>> assert "Net" in repr(p) ###### ## 802.1Q bridging tests ###### ###(010)=[passed] 802.1Q VLAN >>> p = Ether(raw(Ether() / Dot1Q(vlan=99) / b"Payload")) MAC address to reach destination not found. Using broadcast. >>> assert p[Dot1Q].vlan == 99 ###(011)=[passed] 802.1ad Q-in-Q >>> p = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1Q(vlan=99) / b"Payload")) MAC address to reach destination not found. Using broadcast. >>> assert p[Dot1AD].vlan == 88 >>> assert p[Dot1Q].vlan == 99 ###(012)=[passed] 802.1ah PBB mac-in-mac >>> p = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1AH(isid=123456) / Ether() / Dot1Q(vlan=99) / b"Payload")) more MAC address to reach destination not found. Using broadcast. >>> assert p[Dot1AD].vlan == 88 >>> assert p[Dot1AH].isid == 123456 >>> assert p[Dot1Q].vlan == 99 ###(013)=[passed] 802.1ah PBB mac-in-mac - answer >>> p = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1AH(isid=123456) / Ether() / Dot1Q(vlan=99) / b"Payload")) >>> q = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1AH(isid=123456) / Ether() / Dot1Q(vlan=99) / b"Response")) >>> r = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1AH(isid=123456) / Ether() / Dot1Q(vlan=90) / b"Payload")) >>> s = Ether(raw(Ether() / Dot1AD(vlan=88) / Dot1AH(isid=987654) / Ether() / Dot1Q(vlan=99) / b"Payload")) >>> >>> assert q.answers(p) >>> assert not r.answers(p) >>> assert not s.answers(p) ###### ## CookedLinux ###### ###(014)=[passed] CookedLinux - Basic Dissection >>> cl = CookedLinux(b'\x00\x00\x03\x04\x00\x06\x00\x00\x00\x00\x00\x00\x6f\x50\x08\x00') >>> assert cl.pkttype == 0 # unicast >>> assert cl.lladdrtype == 772 # loopback >>> assert cl.lladdrlen == 6 >>> assert cl.src == b'\x00\x00\x00\x00\x00\x00\x6f\x50' >>> assert cl.proto == 2048 ###(015)=[passed] CookedLinuxV2 - Basic Dissection >>> clv2 = CookedLinuxV2(b'\x08\x00\x00\x00\x00\x00\x00\x03\x00\x01\x00\x06\xaa\x1f\x9c\xc0\x5a\x7e\x00\x00') >>> assert clv2.proto == 2048 >>> assert clv2.ifindex == 3 >>> assert clv2.lladdrtype == 1 # ether >>> assert clv2.pkttype == 0 # unicast >>> assert clv2.lladdrlen == 6 >>> assert clv2.src == b'\xaa\x1f\x9c\xc0\x5a\x7e\x00\000' L2TP regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/l2tp.uts] by UTscapy in 0.010509252548217773 └ Passed=3 └ Failed=0 ###### ## L2TP tests ###### ###(000)=[passed] L2TP - build >>> s = raw(IP(src="127.0.0.1", dst="127.0.0.1")/UDP()/L2TP()) >>> s == b'E\x00\x00"\x00\x01\x00\x00@\x11|\xc8\x7f\x00\x00\x01\x7f\x00\x00\x01\x06\xa5\x06\xa5\x00\x0e\xf4\x83\x00\x02\x00\x00\x00\x00' True ###(001)=[passed] L2TP - build with computed length >>> assert bytes(L2TP(hdr="control+length", tunnel_id=1, session_id=2)) == b'\xc0\x02\x00\x0c\x00\x01\x00\x02\x00\x00\x00\x00' ###(002)=[passed] L2TP - dissection >>> p = IP(s) >>> L2TP in p and len(p[L2TP]) == 6 and p.tunnel_id == 0 and p.session_id == 0 and p[UDP].chksum == 0xf483 True LDAP TESTS ━ Run at 04:12:29 from [test/scapy/layers/ldap.uts] by UTscapy in 0.3211843967437744 └ Passed=15 └ Failed=0 ###### ## Basic LDAP tests ###### ###(000)=[passed] Load LDAP >>> from scapy.layers.ldap import * ###(001)=[passed] LDAP_UnbindRequest >>> pkt = Ether(b'RT\x00!l+RT\x00\x0cG\xab\x08\x00E\x00\x003\xb2\x8a@\x00\x80\x06\xd2F\xc0\xa8z\x06\xc0\xa8z\x9c\xc2\xfb\x01\x85\xa6\x89q"\xa1\x076\xdeP\x18\x03\xffG\xf0\x00\x000\x05\x02\x01\x07B\x00') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_UnbindRequest) >>> >>> pkt2 = Ether(raw(pkt)) >>> pkt2.clear_cache() >>> assert raw(pkt2) == pkt.original ###(002)=[passed] LDAP_BindRequest >>> from scapy.layers.ntlm import * >>> >>> pkt = Ether(b'RT\x00!l+RT\x00\x0cG\xab\x08\x00E\x00\x00x\xb2\x94@\x00\x80\x06\xd1\xf7\xc0\xa8z\x06\xc0\xa8z\x9c\xc2\xfc\x01\x85\x1d\x92\x85\xc3U/c\x9fP\x18 \x12U\x96\x00\x000B\x02\x01\x0c`=\x02\x01\x03\x04\x00\xa36\x04\nGSS-SPNEGO\x04(NTLMSSP\x00\x01\x00\x00\x00\xb7\x82\x08\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00aJ\x00\x00\x00\x0f') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_BindRequest) >>> assert isinstance(pkt[LDAP].protocolOp.authentication, LDAP_Authentication_SaslCredentials) >>> ntlm = pkt[LDAP].protocolOp.authentication.credentials >>> assert isinstance(ntlm, NTLM_NEGOTIATE) >>> >>> pkt = Ether(b'RT\x00!l+RT\x00\x0cG\xab\x08\x00E\x00\x01\xce\xb2\x95@\x00\x80\x06\xd0\xa0\xc0\xa8z\x06\xc0\xa8z\x9c\xc2\xfc\x01\x85\x1d\x92\x86\x13U/d9P\x18 \x11\x11\x93\x00\x000\x82\x01\x9c\x02\x01\r`\x82\x01\x95\x02\x01\x03\x04\x00\xa3\x82\x01\x8c\x04\nGSS-SPNEGO\x04\x82\x01|NTLMSSP\x00\x03\x00\x00\x00\x18\x00\x18\x00h\x00\x00\x00\xec\x00\xec\x00\x80\x00\x00\x00\x00\x00\x00\x00X\x00\x00\x00\x08\x00\x08\x00X\x00\x00\x00\x08\x00\x08\x00`\x00\x00\x00\x10\x00\x10\x00l\x01\x00\x005\x82\x88\xe2\n\x00aJ\x00\x00\x00\x0f\xa0\xcd\xd2\xaa\xfdQc\xacs\\\xf6\xa3\x07\n\x05$t\x00o\x00t\x00o\x00W\x00I\x00N\x002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xd1\x8e\xd6w\x99\t\rdQ\x05\xa6iI\xd1\x19\x01\x01\x00\x00\x00\x00\x00\x00\xb8}\x868\xe1\xc5\xd7\x01?\x84\xe3V\xcf&/\xf0\x00\x00\x00\x00\x02\x00\x08\x00W\x00I\x00N\x001\x00\x01\x00\x08\x00W\x00I\x00N\x001\x00\x04\x00\x08\x00W\x00I\x00N\x001\x00\x03\x00\x08\x00W\x00I\x00N\x001\x00\x07\x00\x08\x00\xb8}\x868\xe1\xc5\xd7\x01\x06\x00\x04\x00\x02\x00\x00\x00\x08\x000\x000\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00 \x00\x00\x0b\xd3s!~\x13\x9a\xcc\xc77\xf4\xcc\x90b\xcc|\x8f\xd2\xe8\xb85cw\x89#\x0e\x8bd\xfcPYf\n\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00(\x00l\x00d\x00a\x00p\x00/\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x002\x002\x00.\x001\x005\x006\x00\x00\x00\x00\x00\x00\x00\x00\x00rD\x8c\x9d\x1b\xa6\xa9\x1a7\xd3\x96\x0f\xbe\xab\xecC') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_BindRequest) >>> assert isinstance(pkt[LDAP].protocolOp.authentication, LDAP_Authentication_SaslCredentials) >>> ntlm = pkt[LDAP].protocolOp.authentication.credentials >>> assert isinstance(ntlm, NTLM_AUTHENTICATE_V2) >>> assert ntlm.Payload[0] == ('UserName', 'toto') >>> assert ntlm.Payload[1] == ('Workstation', 'WIN2') >>> assert isinstance(ntlm.Payload[3][1], NTLMv2_RESPONSE) >>> assert ntlm.Payload[3][1].AvPairs[8].Value == 'ldap/192.168.122.156' >>> >>> pkt = LDAP_BindRequest(bind_name="user", authentication=LDAP_Authentication_simple("password")) >>> assert bytes(pkt) == b'`\x13\x02\x01\x03\x04\x04user\x80\x08password' >>> assert LDAP_BindRequest(b'`\x13\x02\x01\x03\x04\x04user\x80\x08password').authentication.val == b"password" ###(003)=[passed] LDAP_BindResponse >>> pkt = Ether(b'RT\x00\x0cG\xabRT\x00!l+\x08\x00E\x00\x00\xc2\x18\xec@\x00\x80\x06kV\xc0\xa8z\x9c\xc0\xa8z\x06\x01\x85\xc2\xfcU/c\x9f\x1d\x92\x86\x13P\x18 \x12\x00\xd1\x00\x000\x81\x90\x02\x01\x0ca\x81\x8a\n\x01\x0e\x04\x00\x04\x00\x87\x81\x80NTLMSSP\x00\x02\x00\x00\x00\x08\x00\x08\x008\x00\x00\x005\x82\x8a\xe2Kn3@\x98\xb7\xc11\x00\x00\x00\x00\x00\x00\x00\x00@\x00@\x00@\x00\x00\x00\n\x00aJ\x00\x00\x00\x0fW\x00I\x00N\x001\x00\x02\x00\x08\x00W\x00I\x00N\x001\x00\x01\x00\x08\x00W\x00I\x00N\x001\x00\x04\x00\x08\x00W\x00I\x00N\x001\x00\x03\x00\x08\x00W\x00I\x00N\x001\x00\x07\x00\x08\x00\xb8}\x868\xe1\xc5\xd7\x01\x00\x00\x00\x00') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_BindResponse) >>> ntlm = NTLM_Header(pkt[LDAP].protocolOp.serverSaslCreds.val) >>> assert isinstance(ntlm, NTLM_CHALLENGE) >>> assert ntlm.Payload[0] == ('TargetName', 'WIN1') >>> assert ntlm.Payload[1][1][0].Value == "WIN1" >>> >>> pkt = Ether(b'RT\x00\x0cG\xabRT\x00!l+\x08\x00E\x00\x00\x96\x18\xed@\x00\x80\x06k\x81\xc0\xa8z\x9c\xc0\xa8z\x06\x01\x85\xc2\xfcU/d9\x1d\x92\x87\xb9P\x18 \x11\x01\xdc\x00\x000d\x02\x01\ra_\n\x011\x04\x00\x04X8009030C: LdapErr: DSID-0C09058A, comment: AcceptSecurityContext error, data 52e, v4a63\x00') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_BindResponse) >>> assert pkt[LDAP].protocolOp.diagnosticMessage.val == b'8009030C: LdapErr: DSID-0C09058A, comment: AcceptSecurityContext error, data 52e, v4a63\x00' ###(004)=[passed] LDAP_SearchRequest >>> pkt = Ether(b'RT\x00!l+RT\x00\x0cG\xab\x08\x00E\x00\x00[\xb2\x8e@\x00\x80\x06\xd2\x1a\xc0\xa8z\x06\xc0\xa8z\x9c\xc2\xfc\x01\x85\x1d\x92\x84VU/V:P\x18 \x14Q<\x00\x000%\x02\x01\x08c \x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01d\x01\x01\x00\x87\x0bobjectClass0\x00') >>> assert isinstance(pkt[LDAP].protocolOp, LDAP_SearchRequest) >>> assert pkt[LDAP].protocolOp.baseObject == b"" >>> assert pkt[LDAP].protocolOp.timeLimit == 0x64 >>> assert pkt[LDAP].protocolOp.filter.filter.present == b"objectClass" >>> >>> pkt2 = Ether(raw(pkt)) >>> pkt2.clear_cache() >>> assert raw(pkt2) == pkt.original ###(005)=[passed] LDAP_SearchResponse >>> pkt = LDAP(b'0\x82\nr\x02\x01\x08d\x82\nk\x04\x000\x82\ne0\x1a\x04\x13forestFunctionality1\x03\x04\x0120$\x04\x1ddomainControllerFunctionality1\x03\x04\x0170E\x04\x17supportedSASLMechanisms1*\x04\x06GSSAPI\x04\nGSS-SPNEGO\x04\x08EXTERNAL\x04\nDIGEST-MD50\x1e\x04\x14supportedLDAPVersion1\x06\x04\x013\x04\x0120\x82\x01\x98\x04\x15supportedLDAPPolicies1\x82\x01}\x04\x0eMaxPoolThreads\x04\x19MaxPercentDirSyncRequests\x04\x0fMaxDatagramRecv\x04\x10MaxReceiveBuffer\x04\x0fInitRecvTimeout\x04\x0eMaxConnections\x04\x0fMaxConnIdleTime\x04\x0bMaxPageSize\x04\x16MaxBatchReturnMessages\x04\x10MaxQueryDuration\x04\x12MaxDirSyncDuration\x04\x10MaxTempTableSize\x04\x10MaxResultSetSize\x04\rMinResultSets\x04\x14MaxResultSetsPerConn\x04\x16MaxNotificationPerConn\x04\x0bMaxValRange\x04\x15MaxValRangeTransitive\x04\x11ThreadMemoryLimit\x04\x18SystemMemoryLimitPercent0\x82\x03\xf2\x04\x10supportedControl1\x82\x03\xdc\x04\x161.2.840.113556.1.4.319\x04\x161.2.840.113556.1.4.801\x04\x161.2.840.113556.1.4.473\x04\x161.2.840.113556.1.4.528\x04\x161.2.840.113556.1.4.417\x04\x161.2.840.113556.1.4.619\x04\x161.2.840.113556.1.4.841\x04\x161.2.840.113556.1.4.529\x04\x161.2.840.113556.1.4.805\x04\x161.2.840.113556.1.4.521\x04\x161.2.840.113556.1.4.970\x04\x171.2.840.113556.1.4.1338\x04\x161.2.840.113556.1.4.474\x04\x171.2.840.113556.1.4.1339\x04\x171.2.840.113556.1.4.1340\x04\x171.2.840.113556.1.4.1413\x04\x172.16.840.1.113730.3.4.9\x04\x182.16.840.1.113730.3.4.10\x04\x171.2.840.113556.1.4.1504\x04\x171.2.840.113556.1.4.1852\x04\x161.2.840.113556.1.4.802\x04\x171.2.840.113556.1.4.1907\x04\x171.2.840.113556.1.4.1948\x04\x171.2.840.113556.1.4.1974\x04\x171.2.840.113556.1.4.1341\x04\x171.2.840.113556.1.4.2026\x04\x171.2.840.113556.1.4.2064\x04\x171.2.840.113556.1.4.2065\x04\x171.2.840.113556.1.4.2066\x04\x171.2.840.113556.1.4.2090\x04\x171.2.840.113556.1.4.2205\x04\x171.2.840.113556.1.4.2204\x04\x171.2.840.113556.1.4.2206\x04\x171.2.840.113556.1.4.2211\x04\x171.2.840.113556.1.4.2239\x04\x171.2.840.113556.1.4.2255\x04\x171.2.840.113556.1.4.2256\x04\x171.2.840.113556.1.4.2309\x04\x171.2.840.113556.1.4.2330\x04\x171.2.840.113556.1.4.23540\x81\xc9\x04\x15supportedCapabilities1\x81\xaf\x04\x171.2.840.113556.1.4.1851\x04\x171.2.840.113556.1.4.1670\x04\x171.2.840.113556.1.4.1791\x04\x171.2.840.113556.1.4.1935\x04\x171.2.840.113556.1.4.2080\x04\x171.2.840.113556.1.4.2237\x04\x171.2.840.113556.1.4.18800h\x04\x11subschemaSubentry1S\x04QCN=Aggregate,CN=Schema,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0\x81\x88\x04\nserverName1z\x04xCN=WIN1$ADWIN1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0]\x04\x13schemaNamingContext1F\x04DCN=Schema,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0\x81\x95\x04\x0enamingContexts1\x81\x82\x04:CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}\x04DCN=Schema,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0\x18\x04\x0eisSynchronized1\x06\x04\x04TRUE0\x1e\x04\x13highestCommittedUSN1\x07\x04\x05123490\x81\x9e\x04\rdsServiceName1\x81\x8c\x04\x81\x89CN=NTDS Settings,CN=WIN1$ADWIN1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0\x15\x04\x0bdnsHostName1\x06\x04\x04WIN10"\x04\x0bcurrentTime1\x13\x04\x1120211020183502.0Z0Z\x04\x1aconfigurationNamingContext1<\x04:CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}0\x0c\x02\x01\x08e\x07\n\x01\x00\x04\x00\x04\x00') >>> assert pkt.getlayer(LDAP, 2) >>> assert isinstance(pkt.protocolOp, LDAP_SearchResponseEntry) >>> assert isinstance(pkt.getlayer(LDAP, 2).protocolOp, LDAP_SearchResponseResultDone) >>> >>> assert len(pkt.protocolOp.attributes) == 17 >>> assert [x.type.val for x in pkt.protocolOp.attributes] == [ ... b'forestFunctionality', ... b'domainControllerFunctionality', ... b'supportedSASLMechanisms', ... b'supportedLDAPVersion', ... b'supportedLDAPPolicies', ... b'supportedControl', ... b'supportedCapabilities', ... b'subschemaSubentry', ... b'serverName', ... b'schemaNamingContext', ... b'namingContexts', ... b'isSynchronized', ... b'highestCommittedUSN', ... b'dsServiceName', ... b'dnsHostName', ... b'currentTime', ... b'configurationNamingContext' ... ] >>> assert pkt.protocolOp.attributes[13].values[0].value == b'CN=NTDS Settings,CN=WIN1$ADWIN1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,CN={7FA71C80-F7BA-4B58-9219-6C6B09E8D0A1}' >>> >>> assert pkt.getlayer(LDAP, 2).protocolOp.resultCode == 0 >>> >>> pkt2 = Ether(raw(pkt)) >>> pkt2.clear_cache() >>> assert raw(pkt2) == pkt.original ###### ## CLDAP tests ###### ###(006)=[passed] Basic CLDAP dissection & build test >>> pkt = Ether(b'RT\x00\xbc\xe0=RT\x00y\xb1F\x08\x00E\x00\x00\xa5\x01\x1a\x00\x00\x80\x11\xc3H\xc0\xa8z\x91\xc0\xa8z\x03\xf1!\x01\x85\x00\x91o&0\x84\x00\x00\x00\x83\x02\x01\x01c\x84\x00\x00\x00z\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01\x00\x01\x01\x00\xa0\x84\x00\x00\x00S\xa3\x84\x00\x00\x00"\x04\tDnsDomain\x04\x15s4.howto.abartlet.net\xa3\x84\x00\x00\x00\x12\x04\x04Host\x04\nWINDOWS7-3\xa3\x84\x00\x00\x00\r\x04\x05NtVer\x04\x04\x16\x00\x00\x000\x84\x00\x00\x00\n\x04\x08Netlogon') >>> assert pkt.protocolOp.filter.filter.vals[2].filter.attributeType == b"NtVer" >>> assert pkt.protocolOp.attributes[0].type == b"Netlogon" >>> >>> assert raw(pkt[CLDAP]) == b'0k\x02\x01\x01cf\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01\x00\x01\x01\x00\xa0G\xa3"\x04\tDnsDomain\x04\x15s4.howto.abartlet.net\xa3\x12\x04\x04Host\x04\nWINDOWS7-3\xa3\r\x04\x05NtVer\x04\x04\x16\x00\x00\x000\n\x04\x08Netlogon' ###(007)=[passed] More advanced CLDAP dissection & build test >>> pkt = Ether(b'RT\x00y\xb1FRT\x00\xbc\xe0=\x08\x00E\x00\x00\xb3\x00\x00@\x00@\x11\xc4T\xc0\xa8z\x03\xc0\xa8z\x91\x01\x85\xf1!\x00\x9fv\x960\x81\x86\x02\x01\x01d\x81\x80\x04\x000|0z\x04\x08netlogon1n\x04l\x17\x00\x00\x00\xbd\x11\x00\x00t\x97x\x1f\x05;\xd7B\x8b\xb2\x8c\xf3\xd9z\x7fj\x02s4\x05howto\x08abartlet\x03net\x00\xc0\x18\x04obed\xc0\x18\x08S4-HOWTO\x00\x04OBED\x00\x00\x17Default-First-Site-Name\x00\xc0I\x05\x00\x00\x00\xff\xff\xff\xff0\x0c\x02\x01\x01e\x07\n\x01\x00\x04\x00\x04\x00') >>> assert pkt.getlayer(CLDAP, 2) >>> assert isinstance(pkt.protocolOp[0].attributes[0].values[0], LDAP_AttributeValue) >>> assert pkt.getlayer(CLDAP, 2).protocolOp.resultCode == 0x0 >>> >>> pkt2 = Ether(raw(pkt)) >>> pkt2.clear_cache() >>> assert raw(pkt2) == pkt.original ###### ## Microsoft LDAP tests ###### ###(008)=[passed] Test dissection of Microsoft LDAP >>> pkt = LDAP(b'0\x84\x00\x00\x00-\x02\x01\x01c\x84\x00\x00\x00$\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01d\x01\x01\x00\x87\x0bobjectClass0\x84\x00\x00\x00\x00') >>> assert pkt.protocolOp.filter.filter.present.val == b'objectClass' >>> assert pkt.Controls is None ###(009)=[passed] Test re-build of Microsoft LDAP >>> pkt = LDAP(protocolOp=LDAP_SearchRequest(filter=LDAP_Filter(filter=LDAP_FilterPresent(present=ASN1_STRING(b'objectClass'))), baseObject=ASN1_STRING(b''), scope=ASN1_ENUMERATED(0), derefAliases=ASN1_ENUMERATED(0), sizeLimit=ASN1_INTEGER(0), timeLimit=ASN1_INTEGER(100), attrsOnly=ASN1_BOOLEAN(0)), messageID=ASN1_INTEGER(1), Controls=None) >>> >>> conf.ASN1_default_long_size = 4 >>> assert bytes(pkt) == b'0\x84\x00\x00\x00-\x02\x01\x01c\x84\x00\x00\x00$\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01d\x01\x01\x00\x87\x0bobjectClass0\x84\x00\x00\x00\x00' >>> >>> conf.ASN1_default_long_size = 0 >>> assert bytes(pkt) == b'0%\x02\x01\x01c \x04\x00\n\x01\x00\n\x01\x00\x02\x01\x00\x02\x01d\x01\x01\x00\x87\x0bobjectClass0\x00' ###(010)=[passed] Craft new Microsoft LDAP Search Request with Controls >>> conf.ASN1_default_long_size = 4 >>> >>> pkt = LDAP( ... protocolOp=LDAP_SearchRequest( ... filter=LDAP_Filter(filter=LDAP_FilterPresent(present=ASN1_STRING(b'objectClass'))), ... attributes=[ ... LDAP_SearchRequestAttribute(type=ASN1_STRING(b'rootDomainNamingContext')), ... LDAP_SearchRequestAttribute(type=ASN1_STRING(b'defaultNamingContext')), ... LDAP_SearchRequestAttribute(type=ASN1_STRING(b'configurationNamingContext')) ... ], ... baseObject=ASN1_STRING(b''), ... scope=ASN1_ENUMERATED(0), ... derefAliases=ASN1_ENUMERATED(0), ... sizeLimit=ASN1_INTEGER(1), ... timeLimit=ASN1_INTEGER(100), ... attrsOnly=ASN1_BOOLEAN(0) ... ), ... messageID=ASN1_INTEGER(2), ... Controls=[ ... LDAP_Control(controlType=ASN1_STRING(b'1.2.840.113556.1.4.529'), criticality=None, controlValue=ASN1_STRING(b'')) ... ] ... ) >>> >>> assert bytes(pkt) == b'0\x84\x00\x00\x00\x9e\x02\x01\x02c\x84\x00\x00\x00o\x04\x00\n\x01\x00\n\x01\x00\x02\x01\x01\x02\x01d\x01\x01\x00\x87\x0bobjectClass0\x84\x00\x00\x00K\x04\x17rootDomainNamingContext\x04\x14defaultNamingContext\x04\x1aconfigurationNamingContext\xa0\x84\x00\x00\x00 0\x84\x00\x00\x00\x1a\x04\x161.2.840.113556.1.4.529\x04\x00' >>> >>> conf.ASN1_default_long_size = 0 ###### ## NETLOGON_SAM_LOGON tests ###### ###(011)=[passed] Dissect NETLOGON_SAM_LOGON_RESPONSE_EX - V1+V5EX+V5EXWITH_IP >>> pkt = NETLOGON(b'\x17\x00\x00\x00\xfd\xf3\x03\x00\x8c#\xf1G^\xe5\xfeL\x89\xe8x\t7\xb1\xcd;\x06domain\x05local\x00\xc0\x18\x03DC1\xc0\x18\x06DOMAIN\x00\x03DC1\x00\x00\x17Default-First-Site-Name\x00\xc0<\x10\x02\x00\x00\x00\xc0\xa8\x00d\x00\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\xff\xff\xff\xff') >>> >>> assert pkt.NtVersion.V5EX_WITH_IP and pkt.NtVersion == 13 >>> assert pkt.DnsForestName == b"domain.local." >>> assert pkt.DnsDomainName == b"domain.local." >>> assert pkt.DnsHostName == b"DC1.domain.local." >>> assert pkt.DcSiteName == b"Default-First-Site-Name." >>> assert pkt.ClientSiteName == b"Default-First-Site-Name." >>> assert pkt.DcSockAddrSize == 0x10 >>> assert pkt.DcSockAddr.sin_addr == "192.168.0.100" >>> assert pkt.Flags == 0x3f3fd ###(012)=[passed] Dissect NETLOGON_SAM_LOGON_RESPONSE_EX - V1+V5EX >>> pkt = NETLOGON(b'\x17\x00\x00\x00\xfd\xf3\x03\x00\x8c#\xf1G^\xe5\xfeL\x89\xe8x\t7\xb1\xcd;\x06domain\x05local\x00\xc0\x18\x03DC1\xc0\x18\x06DOMAIN\x00\x03DC1\x00\x00\x17Default-First-Site-Name\x00\xc0<\x05\x00\x00\x00\xff\xff\xff\xff') >>> >>> assert pkt.NtVersion == 5 >>> assert pkt.DnsForestName == b"domain.local." >>> assert pkt.DnsDomainName == b"domain.local." >>> assert pkt.DnsHostName == b"DC1.domain.local." >>> assert pkt.DcSiteName == b"Default-First-Site-Name." >>> assert pkt.ClientSiteName == b"Default-First-Site-Name." >>> assert pkt.Flags == 0x3f3fd ###(013)=[passed] Dissect NETLOGON_SAM_LOGON_RESPONSE - V1+V5 >>> import uuid >>> >>> pkt = NETLOGON(b'\x13\x00\\\x00\\\x00D\x00C\x001\x00\x00\x00\x00\x00D\x00O\x00M\x00A\x00I\x00N\x00\x00\x00\x8c#\xf1G^\xe5\xfeL\x89\xe8x\t7\xb1\xcd;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06domain\x05local\x00\xc0>\x03DC1\xc0>d\x00\xa8\xc0}\xf3\x03\x00\x03\x00\x00\x00\xff\xff\xff\xff') >>> >>> assert pkt.NtVersion == 3 >>> assert pkt.NullGuid == uuid.UUID('00000000-0000-0000-0000-000000000000') >>> assert pkt.DnsForestName == b"domain.local." >>> assert pkt.DnsDomainName == b"domain.local." >>> assert pkt.DnsHostName == b"DC1.domain.local." >>> assert pkt.Flags == 0x3f37d ###(014)=[passed] Dissect NETLOGON_SAM_LOGON_RESPONSE_NT40 - V1 >>> pkt = NETLOGON(b'\x13\x00\\\x00\\\x00D\x00C\x001\x00\x00\x00\x00\x00D\x00O\x00M\x00A\x00I\x00N\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff') >>> >>> assert pkt.NtVersion == 1 >>> assert pkt.UnicodeLogonServer == r"\\DC1" >>> assert pkt.UnicodeDomainName == "DOMAIN" Tests that need a local instance of OpenLDAP to run ━ Run at 04:12:29 from [test/scapy/layers/ldapopenldap.uts] by UTscapy in 0.0 └ Passed=0 └ Failed=0 LLMNR regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/llmnr.uts] by UTscapy in 0.03855276107788086 └ Passed=6 └ Failed=0 ###### ## LLMNR protocol ###### ###(000)=[passed] Simple packet dissection >>> pkt = Ether(b'\x11\x11\x11\x11\x11\x11\x99\x99\x99\x99\x99\x99\x08\x00E\x00\x00(\x00\x01\x00\x00@\x11:\xa4\xc0\xa8\x00w\x7f\x00\x00\x01\x14\xeb\x14\xeb\x00\x14\x95\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert pkt.sport == 5355 >>> assert pkt.dport == 5355 >>> assert pkt[LLMNRQuery].opcode == 0 ###(001)=[passed] Dissection with the "T"entative bit set and the "TrunCation" bit unset >>> r = LLMNRResponse(b'\x87\xdf\x81\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01C\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\x1e\x00\x04\xc0\xa8-\x15') >>> assert r.tc == 0 and r.t == 1 ###(002)=[passed] Packet build / dissection >>> pkt = UDP(raw(UDP()/LLMNRResponse())) No IP underlayer to compute checksum. Leaving null. >>> assert LLMNRResponse in pkt >>> assert pkt.qr == 1 >>> assert pkt.c == 0 >>> assert pkt.tc == 0 >>> assert pkt.t == 0 >>> assert pkt.z == 0 >>> assert pkt.rcode == 0 >>> assert pkt.qdcount == 0 >>> assert pkt.arcount == 0 >>> assert pkt.nscount == 0 >>> assert pkt.ancount == 0 ###(003)=[passed] Answers - building >>> a = UDP()/LLMNRResponse(id=12) >>> b = UDP()/LLMNRQuery(id=12) >>> assert a.answers(b) >>> assert not b.answers(a) >>> assert b.hashret() == b'\x00\x0c' ###(004)=[passed] Answers - dissecting >>> a = Ether(b'\xd0P\x99V\xdd\xf9\x14\x0cv\x8f\xfe(\x08\x00E\x00\x00(\x00\x01\x00\x00@\x11:\xa4\x7f\x00\x00\x01\xc0\xa8\x00w\x14\xeb\x14\xeb\x00\x14\x95\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b = Ether(b'\x14\x0cv\x8f\xfe(\xd0P\x99V\xdd\xf9\x08\x00E\x00\x00(\x00\x01\x00\x00@\x11:\xa4\xc0\xa8\x00w\x7f\x00\x00\x01\x14\xeb\x14\xeb\x00\x14\x15\xcf\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert b.answers(a) >>> assert not a.answers(b) ###(005)=[passed] Summary >>> q = LLMNRQuery(b'\xd5\xd5\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x07example\x00\x00\x01\x00\x01') >>> assert q.mysummary()[0] == r"LLMNRQuery who has 'example.'" >>> >>> q = LLMNRQuery(b'Yy\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\xff\x00\x00\x01\x00\x01') >>> assert q.mysummary()[0] == r"LLMNRQuery who has '\xff.'" >>> >>> with no_debug_dissector(): ... q = LLMNRQuery(b'@@\x00\x1b\xed7\x96J\x00\x00\x00\x01\x00\x00') ... assert q.mysummary()[0] == r"LLMNRQuery [malformed]" ... >>> r = LLMNRResponse(b'e\xcc\x80\x00\x00\x01\x00\x01\x00\x00\x00\x00\x07example\x00\x00\x01\x00\x01\x07example\x00\x00\x01\x00\x01\x00\x00\x00\x1e\x00\x04\xc0\x00\x02\x01') >>> assert r.mysummary()[0] == r"LLMNRResponse 'example.' is at '192.0.2.1'" >>> >>> r = LLMNRResponse(b'\n\xe6\x80\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01\xff\x00\x00\x1c\x00\x01\xc0\x0c\x00\x1c\x00\x01\x00\x00\x00\x1e\x00\x10\xfe\x80\x00\x00\x00\x00\x00\x00xu\x17\xff\xfe\xbc\xac\xcb') >>> assert r.mysummary()[0] == r"LLMNRResponse '\xff.' is at 'fe80::7875:17ff:febc:accb'" >>> >>> with no_debug_dissector(): ... r = LLMNRResponse(b'\xd3<\x80\x00\x00\x01\x00\x01\x00\x00\x00\x00\x04H\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\x1e\x00\x04\xc0\xa88\x04') ... assert r.mysummary()[0] == r"LLMNRResponse [malformed]" ... LLTD regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/lltd.uts] by UTscapy in 0.20418882369995117 └ Passed=5 └ Failed=0 ###### ## LLTD protocol ###### ###(000)=[passed] Simple packet dissection >>> pkt = Ether(b'\xff\xff\xff\xff\xff\xff\x86\x14\xf0\xc7[.\x88\xd9\x01\x00\x00\x01\xff\xff\xff\xff\xff\xff\x86\x14\xf0\xc7[.\x00\x00\xfe\xe9[\xa9\xaf\xc1\x0bS[\xa9\xaf\xc1\x0bS\x01\x06}[G\x8f\xec.\x02\x04p\x00\x00\x00\x03\x04\x00\x00\x00\x06\x07\x04\xac\x19\x88\xe4\t\x02\x00l\n\x08\x00\x00\x00\x00\x00\x0fB@\x0c\x04\x00\x08=`\x0e\x00\x0f\x0eT\x00E\x00S\x00T\x00-\x00A\x00P\x00\x12\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x04\x00\x00\x00\x00\x15\x01\x02\x18\x00\x19\x02\x04\x00\x1a\x00\x00') >>> assert pkt.dst == pkt.real_dst >>> assert pkt.src == pkt.real_src >>> assert pkt.current_mapper_address == pkt.apparent_mapper_address >>> assert pkt.mac == '7d:5b:47:8f:ec:2e' >>> assert pkt.hostname == "TEST-AP" >>> assert isinstance(pkt[LLTDAttributeEOP].payload, NoPayload) ###(001)=[passed] Packet build / dissection >>> pkt = Ether(raw(Ether(dst=ETHER_BROADCAST, src=RandMAC()) / LLTD(tos=0, function=0))) >>> assert LLTD in pkt >>> assert pkt.dst == pkt.real_dst >>> assert pkt.src == pkt.real_src >>> assert pkt.tos == 0 >>> assert pkt.function == 0 >>> assert pkt.hashret()[2:] == b'\x00\x00' ###(002)=[passed] Attribute build / dissection >>> assert isinstance(LLTDAttribute(), LLTDAttribute) >>> assert isinstance(LLTDAttribute(raw(LLTDAttribute())), LLTDAttribute) >>> assert all(isinstance(LLTDAttribute(type=i), LLTDAttribute) for i in range(256)) >>> assert all(isinstance(LLTDAttribute(raw(LLTDAttribute(type=i))), LLTDAttribute) for i in range(256)) ###(003)=[passed] Large TLV >>> m1, m2, seq = RandMAC()._fix(), RandMAC()._fix(), 123 >>> preqbase = Ether(src=m1, dst=m2) / LLTD() / \ ... LLTDQueryLargeTlv(type="Detailed Icon Image") >>> prespbase = Ether(src=m2, dst=m1) / LLTD() / \ ... LLTDQueryLargeTlvResp() >>> plist = [] >>> pkt = preqbase.copy() >>> pkt.seq = seq >>> plist.append(Ether(raw(pkt))) >>> pkt = prespbase.copy() >>> pkt.seq = seq >>> pkt.flags = "M" >>> pkt.value = "abcd" >>> plist.append(Ether(raw(pkt))) >>> pkt = preqbase.copy() >>> pkt.seq = seq + 1 >>> pkt.offset = 4 >>> plist.append(Ether(raw(pkt))) >>> pkt = prespbase.copy() >>> pkt.seq = seq + 1 >>> pkt.value = "efg" >>> plist.append(Ether(raw(pkt))) >>> builder = LargeTlvBuilder() >>> builder.parse(plist) >>> data = builder.get_data() >>> assert len(data) == 1 >>> key, value = data.popitem() >>> assert key.endswith(' [Detailed Icon Image]') >>> assert value == 'abcdefg' ###(004)=[passed] Summary >>> assert LLTDAttributeMachineName(b'\x0f\x04{\x00\n\x00').mysummary()[0] == r"Hostname: '{\n'" MGCP regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/mgcp.uts] by UTscapy in 0.008138895034790039 └ Passed=2 └ Failed=0 ###### ## MGCP tests ###### ###(000)=[passed] MGCP - build >>> s = raw(IP(src="127.0.0.1")/UDP()/MGCP(endpoint="scapy@secdev.org", transaction_id="04523")) >>> s == b'E\x00\x00I\x00\x01\x00\x00@\x11|\xa1\x7f\x00\x00\x01\x7f\x00\x00\x01\n\xa7\n\xa7\x005\xf8\xaeAUEP 04523 scapy@secdev.org MGCP 1.0 NCS 1.0\n' True ###(001)=[passed] MGCP - dissect >>> pkt = Ether(b'\x1b\x81\xb8\xa8J5\xe3\xebn\x90q\xb8\x08\x00E\x00\x00E\x00\x01\x00\x00@\x11\xf7\xde\xc0\xa8\x00\xff\xc0\xa8\x00y\n\xa7\n\xa7\x001\x05\xb5AUEP 155 god@heaven.com MGCP 1.0 NCS 1.0\n') >>> assert pkt[MGCP].endpoint == b'god@heaven.com' Mobile IP regression tests for Scapy ━ Run at 04:12:29 from [test/scapy/layers/mobileip.uts] by UTscapy in 0.009402751922607422 └ Passed=2 └ Failed=0 ###### ## MobileIP tests ###### ###(000)=[passed] MobileIP - build >>> s = raw(IP(src="127.0.0.1")/UDP()/MobileIP()/MobileIPRRP(homeaddr='156.133.50.141', haaddr='95.83.86.216')) >>> s == b'E\x00\x000\x00\x01\x00\x00@\x11|\xba\x7f\x00\x00\x01\x7f\x00\x00\x01\x01\xb2\x01\xb2\x00\x1cu]\x03\x00\x00\xb4\x9c\x852\x8d_SV\xd8\x00\x00\x00\x00\x00\x00\x00\x00' True ###(001)=[passed] MobileIP - dissect >>> pkt = IP(s) >>> assert pkt[MobileIP][MobileIPRRP].haaddr == '95.83.86.216' MS-DRSR tests ━ Run at 04:12:30 from [test/scapy/layers/msdrsr.uts] by UTscapy in 0.25983405113220215 └ Passed=5 └ Failed=0 ###### ## Dissect DRSR Crack_Names exchange ###### ###(000)=[passed] [EXCH] - Load MSDRSR exchange and decrypt (SPNEGOSSP/NTLMSSP) >>> load_layer("msrpce") >>> bind_layers(TCP, DceRpc5, sport=49685) # the DCE/RPC port >>> bind_layers(TCP, DceRpc5, dport=49685) >>> >>> conf.dcerpc_session_enable = True >>> conf.winssps_passive = [ ... SPNEGOSSP( ... [ ... NTLMSSP( ... IDENTITIES={ ... "Administrator": MD4le("Password123!"), ... }, ... ) ... ] ... ) ... ] >>> pkts = sniff(offline=scapy_path('test/pcaps/dcerpc_msdrsr_cracknames.pcapng.gz'), session=TCPSession) >>> conf.dcerpc_session_enable = False ###(001)=[passed] [EXCH] - Check IDL_DRSBind_Request >>> from scapy.layers.msrpce.msdrsr import DRS_EXTENSIONS_INT >>> >>> bindreq = pkts[7] >>> assert IDL_DRSBind_Request in bindreq >>> ext = DRS_EXTENSIONS_INT(bindreq[IDL_DRSBind_Request].valueof("pextClient").rgb) >>> assert ext.Pid == 1234 >>> assert ext.dwReplEpoch == 1729468809 ###(002)=[passed] [EXCH] - Check IDL_DRSBind_Response >>> import uuid >>> >>> bindresp = pkts[8] >>> assert IDL_DRSBind_Response in bindresp >>> assert bindresp[IDL_DRSBind_Response].phDrs.uuid == b'\xf4$I\xf5\xde\x0c\xfcO\x8b\xfa\xb0Y\x87\xf4\x11i' >>> ext = DRS_EXTENSIONS_INT(bindresp[IDL_DRSBind_Response].valueof("ppextServer").rgb) >>> assert ext.dwFlags.GETCHGREQ_V10 >>> assert ext.dwFlags == 0x3fffff7f >>> assert ext.Pid == 696 >>> assert ext.ConfigObjGuid == uuid.UUID('14ea64e0-3470-48e6-9ace-77012d8d474f') ###(003)=[passed] [EXCH] - Check IDL_DRSCrackNames_Request >>> cnreq = pkts[9] >>> assert IDL_DRSCrackNames_Request in cnreq >>> >>> crackreq = cnreq[IDL_DRSCrackNames_Request].valueof("pmsgIn") >>> assert crackreq.formatOffered == 11 >>> assert crackreq.formatDesired == 0xfffffff2 >>> >>> assert crackreq.valueof("rpNames") == [ ... b'S-1-5-21-1924137214-3718646274-40215721-522', ... b'S-1-5-21-1924137214-3718646274-40215721-498', ... b'S-1-5-21-1924137214-3718646274-40215721-516', ... b'S-1-5-21-1924137214-3718646274-40215721-526', ... b'S-1-5-21-1924137214-3718646274-40215721-527', ... b'S-1-5-21-1924137214-3718646274-40215721-512', ... b'S-1-5-21-1924137214-3718646274-40215721-519', ... b'S-1-5-21-1924137214-3718646274-40215721-513', ... ] ###(004)=[passed] [EXCH] - Check IDL_DRSCrackNames_Response >>> cnresp = pkts[10] >>> assert IDL_DRSCrackNames_Response in cnresp >>> >>> crackresp = cnresp[IDL_DRSCrackNames_Response].valueof("pmsgOut") >>> assert [x.valueof("pName") for x in crackresp.valueof("pResult").valueof("rItems")] == [ ... b'Cloneable Domain Controllers@DOMAIN', ... b'Enterprise Read-only Domain Controllers@DOMAIN', ... b'Domain Controllers@DOMAIN', ... b'Key Admins@DOMAIN', ... b'Enterprise Key Admins@DOMAIN', ... b'Domain Admins@DOMAIN', ... b'Enterprise Admins@DOMAIN', ... b'Domain Users@DOMAIN', ... ] MS-NRPC tests ━ Run at 04:12:30 from [test/scapy/layers/msnrpc.uts] by UTscapy in 0.3280916213989258 └ Passed=32 └ Failed=0 ###### ## [MS-NRPC] test vectors ###### ###(000)=[passed] [MS-NRPC] test vectors - sect 4.2 >>> from scapy.layers.tls.crypto.hash import Hash_MD4 >>> from scapy.layers.msrpce.msnrpc import ComputeSessionKeyStrongKey >>> >>> ClearSharedSecret = bytes.fromhex("2e002f002c006e004c003e004f004c005a003600730074005e0058004b0065004d0025002e0049002d00740045006000570056006a0043005b00300036003f005d003a00510076005f0054006e0055006f003a003a00420077002c0067006000760023004a004d0036004d007100530050007500550028006e00710034003e0079006a005b0064005c002b005600700052005f00790078007500630021006700300054003600350076007a005700410042005f004200220069003c003c0053002b00340027005e003a0021002c003b002500470073002d00280022003a0020006d003e00210043004c0066006e004e00") >>> >>> SharedSecret = Hash_MD4().digest(ClearSharedSecret) >>> assert SharedSecret.hex() == "31a590170a351fd51148b2a10af2c305" >>> >>> >>> ClientChallenge = bytes.fromhex("3a0390a46d0c3d4f") >>> >>> ServerChallenge = bytes.fromhex("0c4c13d16041c860") >>> >>> assert ComputeSessionKeyStrongKey(SharedSecret, ClientChallenge, ServerChallenge).hex() == "eefe8f40007a2eeb6843d0d30a5be2e3" ###(001)=[passed] [MS-NRPC] test vectors - sect 4.3 >>> from unittest import mock >>> from scapy.layers.msrpce.msnrpc import NetlogonSSP >>> >>> SessionKey = bytes.fromhex("0cb6948805f797bf2a82807973b89537") >>> Confounder = bytes.fromhex("717f5076c5902bcd") >>> ClearTextMessage = bytes.fromhex("3000000000000000000000000000000030000000000000005c005c00570049004e002d00450055003400550047003800370048003200490056002e00320033003000360066006500760032002e006e00740074006500730074002e006d006900630072006f0073006f00660074002e0063006f006d0000000000020000000000100000000000000000000000000000001000000000000000570049004e002d004400310049005400420046004d003400410038005500000085bb1511fd09786d3b61b06400000000000000000000000001000000000000000000000000000000") >>> FullNetlogonSignatureHeader = bytes.fromhex("13001a00ffff0000b37c1f0ec86468f086761f2f86f4f4c1632d1f547d2cf6ff") >>> EncryptedMessage = bytes.fromhex("c930c9a079d95c78bea6a3150908c11f4b68e41219bcb91680ead287da211eec66bc27df2bc9a0f4ecf25c88624e493c59cdec6bc7b08bed84b97c33138ae3c8377cb327f3ea6076da91c5d23dbf1b2f4066a455332716b7b64f2ec9a944702d20a85035de3b231a5216b7a6c9102bd17c7d6ab1b379445eb5a5276e360d3bcef93b5359d36b0006b0c10bc2fec73777816a383a4614494b7b18bc34cd5447681eb48f8132a0a08a50d752826cff068c76959d49767557e503d509fa3c18b0860a22a7e2bae50e812c5d71c31f9f1dfd143333b3043f6bf906e5d91207f1d988") >>> >>> >>> client = NetlogonSSP(SessionKey=SessionKey, computername="DC1", domainname="DOMAIN", AES=True) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(None) >>> >>> with mock.patch('scapy.layers.msrpce.msnrpc.os.urandom', side_effect=lambda x: Confounder): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=ClearTextMessage), ... ] ... ) ... >>> assert _msgs[0].data == EncryptedMessage >>> assert bytes(sig)[:len(FullNetlogonSignatureHeader)] == FullNetlogonSignatureHeader ###(002)=[passed] [MS-NRPC] test vectors - sect 4.3.1 >>> from unittest import mock >>> from scapy.layers.msrpce.msnrpc import NetlogonSSP >>> >>> RpcPDUHeader = bytes.fromhex("0500000310000000380138000c000000d400000001001500") >>> RpcSecTrailer = bytes.fromhex("44060c0003000000") >>> FullNetlogonSignatureHeader = bytes.fromhex("13001a00ffff00005d69950dfde45ae9f092ae5c3c55aacd632d1f547d2cf6ff") >>> >>> >>> client = NetlogonSSP(SessionKey=SessionKey, computername="DC1", domainname="DOMAIN", AES=True) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(None) >>> >>> with mock.patch('scapy.layers.msrpce.msnrpc.os.urandom', side_effect=lambda x: Confounder): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=RpcPDUHeader), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=ClearTextMessage), ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=RpcSecTrailer), ... ] ... ) ... >>> assert _msgs[0].data == RpcPDUHeader >>> assert _msgs[1].data == EncryptedMessage >>> assert _msgs[2].data == RpcSecTrailer >>> assert bytes(sig)[:len(FullNetlogonSignatureHeader)] == FullNetlogonSignatureHeader ###### ## Dissect and Build full NRPC exchange ###### ###(003)=[passed] [EXCH] - Load MSRPCE and bind >>> load_layer("msrpce") >>> bind_layers(TCP, DceRpc, sport=40564) # the DCE/RPC port >>> bind_layers(TCP, DceRpc, dport=40564) ###(004)=[passed] [EXCH] - Parse NRPC exchange (pcap) >>> pkts = sniff(offline=scapy_path('test/pcaps/dcerpc_msnrpc.pcapng.gz'), session=DceRpcSession) ###(005)=[passed] [EXCH] - Check ept_map_Request >>> from scapy.layers.msrpce.ept import * >>> >>> epm_req = pkts[2][DceRpc5].payload.payload >>> assert isinstance(epm_req, ept_map_Request) >>> assert epm_req.max_towers == 4 >>> assert epm_req.map_tower.value.max_count == 75 >>> assert epm_req.map_tower.value.tower_length == 75 >>> >>> twr = protocol_tower_t(epm_req.map_tower.value.tower_octet_string) >>> assert twr.count == 5 >>> assert twr.floors[0].sprintf("%uuid%") == 'logon' ###(006)=[passed] [EXCH] - Re-build ept_map_Request from scratch >>> pkt = ept_map_Request( ... entry_handle=NDRContextHandle(attributes=0, uuid=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), ... obj=NDRPointer( ... referent_id=1, ... value=UUID(Data1=0, Data2=0, Data3=0, Data4=b'\x00\x00\x00\x00\x00\x00\x00\x00') ... ), ... map_tower=NDRPointer( ... referent_id=2, ... value=twr_p_t(tower_octet_string=b'\x05\x00\x13\x00\rxV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\x00\x87\x01\x00\t\x04\x00\x00\x00\x00\x00') ... ), ... max_towers=4 ... ) >>> >>> output = bytearray(bytes(pkt)) >>> assert bytes(output) == bytes(epm_req) ###(007)=[passed] [EXCH] - Check ept_map_Response >>> epm_resp = pkts[3][DceRpc5].payload.payload >>> >>> assert epm_resp.entry_handle.attributes == 0 >>> assert epm_resp.entry_handle.uuid == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> assert epm_resp.ITowers.max_count == 4 >>> assert epm_resp.ITowers.value[0].value[0].value.max_count == 75 >>> assert epm_resp.valueof("ITowers")[0].max_count == 75 >>> assert epm_resp.ITowers.value[0].value[0].value.tower_length == 75 >>> assert epm_resp.valueof("ITowers")[0].tower_length == 75 >>> >>> twr = protocol_tower_t(epm_resp.ITowers.value[0].value[0].value.tower_octet_string) >>> assert twr.floors[0].sprintf("%uuid%") == 'logon' >>> assert twr.floors[1].sprintf("%uuid%") == 'NDR 2.0' >>> assert twr.floors[1].rhs == 0 >>> assert twr.floors[2].protocol_identifier == 11 >>> assert twr.floors[3].sprintf("%protocol_identifier%") == "NCACN_IP_TCP" >>> assert twr.floors[3].rhs == 49676 >>> assert twr.floors[4].sprintf("%protocol_identifier%") == "IP" >>> assert twr.floors[4].rhs == "192.168.122.17" ###(008)=[passed] [EXCH] - Re-build ept_map_Response from scratch >>> pkt = ept_map_Response( ... entry_handle=NDRContextHandle(attributes=0), ... ITowers=[ ... twr_p_t(tower_octet_string=b'\x05\x00\x13\x00\rxV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\xc2\x0c\x01\x00\t\x04\x00\xc0\xa8z\x11'), ... twr_p_t(tower_octet_string=b'\x05\x00\x13\x00\rxV4\x124\x12\xcd\xab\xef\x00\x01#Eg\xcf\xfb\x01\x00\x02\x00\x00\x00\x13\x00\r\x04]\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00+\x10H`\x02\x00\x02\x00\x00\x00\x01\x00\x0b\x02\x00\x00\x00\x01\x00\x07\x02\x00\xc2\x03\x01\x00\t\x04\x00\xc0\xa8z\x11') ... ], ... ) >>> >>> pkt.ITowers.value[0].value[0].referent_id = 0x3 >>> pkt.ITowers.value[0].value[1].referent_id = 0x4 >>> pkt.ITowers.max_count = 4 >>> assert bytes(pkt) == bytes(epm_resp) ###(009)=[passed] [EXCH] - Check NetrServerReqChallenge_Request >>> chall_req = pkts[6][NetrServerReqChallenge_Request] >>> assert chall_req.valueof("ComputerName") == b"WIN1" >>> assert chall_req.PrimaryName is None >>> assert chall_req.ClientChallenge.data == b"12345678" ###(010)=[passed] [EXCH] - Re-build NetrServerReqChallenge_Request from scratch >>> pkt = NetrServerReqChallenge_Request( ... ComputerName=b'WIN1', ... ClientChallenge=PNETLOGON_CREDENTIAL(data=b'12345678'), ... PrimaryName=None, ... ) >>> >>> assert bytes(pkt) == bytes(chall_req) ###(011)=[passed] [EXCH] - Check NetrServerReqChallenge_Response >>> chall_resp = pkts[7][NetrServerReqChallenge_Response] >>> assert chall_resp.ServerChallenge.data == b'Zq/\xc4D\xfeRI' >>> assert chall_resp.status == 0 ###(012)=[passed] [EXCH] - Re-build NetrServerReqChallenge_Response from scratch >>> pkt = NetrServerReqChallenge_Response( ... ServerChallenge=PNETLOGON_CREDENTIAL(data=b'Zq/\xc4D\xfeRI') ... ) >>> >>> assert bytes(pkt) == bytes(chall_resp) ###(013)=[passed] [EXCH] - Check NetrServerAuthenticate3_Request >>> auth_req = pkts[8][NetrServerAuthenticate3_Request] >>> assert auth_req.PrimaryName is None >>> assert auth_req.valueof("AccountName") == b"WIN1$" >>> assert auth_req.sprintf("%SecureChannelType%") == "WorkstationSecureChannel" >>> assert auth_req.valueof("ComputerName") == b"WIN1" >>> assert auth_req.ClientCredential.data == b'd:\xb3p\xc6\x9e\xf40' >>> assert auth_req.NegotiateFlags == 1611661311 ###(014)=[passed] [EXCH] - Re-build NetrServerAuthenticate3_Request from scratch >>> pkt = NetrServerAuthenticate3_Request( ... AccountName=b'WIN1$', ... ComputerName=b'WIN1', ... ClientCredential=PNETLOGON_CREDENTIAL(data=b'd:\xb3p\xc6\x9e\xf40'), ... PrimaryName=None, ... SecureChannelType="WorkstationSecureChannel", ... NegotiateFlags=1611661311, ... ) >>> >>> output = bytearray(bytes(pkt)) >>> assert bytes(output) == bytes(auth_req) ###(015)=[passed] [EXCH] - Check NetrServerAuthenticate3_Response >>> auth_resp = pkts[9][NetrServerAuthenticate3_Response] >>> assert auth_resp.ServerCredential.data == b'1h\x8d\xb8\xf4zH\xaf' >>> assert auth_resp.NegotiateFlags == 1611661311 >>> assert auth_resp.AccountRid == 1105 >>> assert auth_resp.status == 0 ###(016)=[passed] [EXCH] - Re-build NetrServerAuthenticate3_Response from scratch >>> pkt = NetrServerAuthenticate3_Response( ... ServerCredential=PNETLOGON_CREDENTIAL(data=b'1h\x8d\xb8\xf4zH\xaf'), ... NegotiateFlags=1611661311, ... AccountRid=1105, ... status=0 ... ) >>> >>> assert bytes(pkt) == bytes(auth_resp) ###### ## GSS-API NetlogonSSP tests ###### ###(017)=[passed] [NetlogonSSP] - Create randomness-mock context manager >>> from unittest import mock >>> >>> def fake_urandom(x): ... # wow, impressive entropy ... return b"0" * x ... >>> _patches = [ ... # Patch all the random ... mock.patch('scapy.layers.msrpce.msnrpc.os.urandom', side_effect=fake_urandom), ... ] >>> >>> class NetlogonRandomPatcher: ... def __enter__(self): ... for p in _patches: ... p.start() ... def __exit__(self, *args, **kwargs): ... for p in _patches: ... p.stop() ... ###(018)=[passed] [NetlogonSSP] - RC4 - Create client and server NetlogonSSP >>> from scapy.layers.msrpce.msnrpc import NetlogonSSP, NL_AUTH_MESSAGE >>> >>> client = NetlogonSSP(SessionKey=b"\x00\x00\x00\x00\x00\x00\x00\x00", computername="DC1", domainname="DOMAIN", AES=False) >>> server = NetlogonSSP(SessionKey=b"\x00\x00\x00\x00\x00\x00\x00\x00", computername="DC1", domainname="DOMAIN", AES=False) ###(019)=[passed] [NetlogonSSP] - RC4 - GSS_Init_sec_context (NL_AUTH_MESSAGE) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(None) >>> >>> assert negResult == 1 >>> assert isinstance(tok, NL_AUTH_MESSAGE) >>> assert tok.MessageType == 0 >>> assert tok.Flags == 3 >>> >>> bytes(tok) b'\x00\x00\x00\x00\x03\x00\x00\x00DOMAIN\x00DC1\x00' >>> assert bytes(tok) == b'\x00\x00\x00\x00\x03\x00\x00\x00DOMAIN\x00DC1\x00' ###(020)=[passed] [NetlogonSSP] - RC4 - GSS_Accept_sec_context (NL_AUTH_MESSAGE->NL_AUTH_MESSAGE) >>> srvcontext, tok, negResult = server.GSS_Accept_sec_context(None, tok) >>> >>> assert negResult == 0 >>> assert tok.MessageType == 1 >>> >>> bytes(tok) b'\x01\x00\x00\x00\x00\x00\x00\x00' >>> assert bytes(tok) == b'\x01\x00\x00\x00\x00\x00\x00\x00' ###(021)=[passed] [NetlogonSSP] - RC4 - GSS_Init_sec_context (NL_AUTH_MESSAGE->OK) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(clicontext, tok) >>> >>> assert negResult == 0 >>> assert tok is None ###(022)=[passed] [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload >>> data_header = b"header" # signed but not encrypted >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" # encrypted >>> >>> with NetlogonRandomPatcher(): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> encrypted = _msgs[1].data >>> assert bytes(encrypted) == b'~\x82\xda\x9e>t?QA\xe7\x06B\x87\x01\x03\x97\xea\xd2\xe9\xc4\xbfM$\x95VKxivff\x93\x9a\xe8\rbe#\xe6W\xb4\x82A\xd8\xa7\xf7]\xf3\xb0\x88' >>> assert bytes(sig) == b'w\x00z\x00\xff\xff\x00\x00\x9f\xcb\xb6s\x8c\x8c\x0c*\xa9E\xa4\xd1\x85\xee.\xa2:\xd7\x99\xdaO\x05N ' >>> >>> decrypted = server.GSS_UnwrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(023)=[passed] [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: server answers back >>> with NetlogonRandomPatcher(): ... _msgs, sig = server.GSS_WrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> re_encrypted = _msgs[1].data >>> assert bytes(re_encrypted) == b'\x9b\xc7c\x81\xfbF(\x19\xb6>\x08i\x7f\x18~H\xd6m~\x11K\x83\xb6\x15\x9a\xceP\xa1K\x8d\x83\xbb\xa7\x0fR*J\x89-\xec!\xde\xffs)\xd8F\x9c@^' >>> assert bytes(sig) == b'w\x00z\x00\xff\xff\x00\x00\x9f\xcb\xb6r\x0c\x8c\x0c*\xa9E\xa4\xd1\x85\xee.\xa2\xdf\x92 \xc5\x8a7Yh' >>> >>> decrypted = client.GSS_UnwrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=re_encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(024)=[passed] [NetlogonSSP] - RC4 - GSS_WrapEx/GSS_UnwrapEx: inject fault >>> _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> encrypted = _msgs[1].data >>> assert encrypted != data >>> bad_data_header = data_header[:-3] + b"hey" >>> try: ... server.GSS_UnwrapEx(srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=bad_data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... ) ... assert False, "No error was reported, but there should have been one" ... except ValueError: ... pass ... ###(025)=[passed] [NetlogonSSP] - AES - Create client and server NetlogonSSP >>> from scapy.layers.msrpce.msnrpc import NetlogonSSP, NL_AUTH_MESSAGE >>> >>> client = NetlogonSSP(SessionKey=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", computername="DC1", domainname="DOMAIN", AES=True) >>> server = NetlogonSSP(SessionKey=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", computername="DC1", domainname="DOMAIN", AES=True) ###(026)=[passed] [NetlogonSSP] - AES - GSS_Init_sec_context (NL_AUTH_MESSAGE) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(None) >>> >>> assert negResult == 1 >>> assert isinstance(tok, NL_AUTH_MESSAGE) >>> assert tok.MessageType == 0 >>> assert tok.Flags == 3 >>> >>> bytes(tok) b'\x00\x00\x00\x00\x03\x00\x00\x00DOMAIN\x00DC1\x00' >>> assert bytes(tok) == b'\x00\x00\x00\x00\x03\x00\x00\x00DOMAIN\x00DC1\x00' ###(027)=[passed] [NetlogonSSP] - AES - GSS_Accept_sec_context (NL_AUTH_MESSAGE->NL_AUTH_MESSAGE) >>> srvcontext, tok, negResult = server.GSS_Accept_sec_context(None, tok) >>> >>> assert negResult == 0 >>> assert tok.MessageType == 1 >>> >>> bytes(tok) b'\x01\x00\x00\x00\x00\x00\x00\x00' >>> assert bytes(tok) == b'\x01\x00\x00\x00\x00\x00\x00\x00' ###(028)=[passed] [NetlogonSSP] - AES - GSS_Init_sec_context (NL_AUTH_MESSAGE->OK) >>> clicontext, tok, negResult = client.GSS_Init_sec_context(clicontext, tok) >>> >>> assert negResult == 0 >>> assert tok is None ###(029)=[passed] [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload >>> data_header = b"header" # signed but not encrypted >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" # encrypted >>> >>> with NetlogonRandomPatcher(): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> encrypted = _msgs[1].data >>> assert bytes(encrypted) == b'\xbf\x1aP\xb4\xb54\xe4^\x1a\xfe\xf3\x1f(\xfa[\xc4\x06\xdb_\x1a9\x90>> assert bytes(sig) == b'\x13\x00\x1a\x00\xff\xff\x00\x00.\n\x8e\xce\xd2\x14\x06W\x978\xe2\xad\x8c\xdd\x8ef\xeba\xa5\x15\xb2\xc2\xce?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> decrypted = server.GSS_UnwrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(030)=[passed] [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: server answers back >>> with NetlogonRandomPatcher(): ... _msgs, sig = server.GSS_WrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> re_encrypted = _msgs[1].data >>> assert bytes(re_encrypted) == b'\xf9\xb1g\xaf\xb8\x87\x1f\xd5\xe0\x12).\x8dW\xf1\x0cG\x16\xf5\xb4:\xde\x91\xd5\x03\x8a#\xa6\xe1j[*U\xfc\xdb\xfa\x02\xcd\x85\x82O\x11\x908\xbd\xf3q\xd6>P' >>> assert bytes(sig) == b'\x13\x00\x1a\x00\xff\xff\x00\x00.\n\x8e\xcf\xbek \x84\x978\xe2\xad\x8c\xdd\x8efS\x9b\xf3DG\xf4[\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> decrypted = client.GSS_UnwrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=re_encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(031)=[passed] [NetlogonSSP] - AES - GSS_WrapEx/GSS_UnwrapEx: inject fault >>> _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> encrypted = _msgs[1].data >>> assert encrypted != data >>> bad_data_header = data_header[:-3] + b"hey" >>> try: ... server.GSS_UnwrapEx(srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=bad_data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... ) ... assert False, "No error was reported, but there should have been one" ... except ValueError: ... pass ... MS-NRTP tests ━ Run at 04:12:30 from [test/scapy/layers/msnrtp.uts] by UTscapy in 0.5043516159057617 └ Passed=2 └ Failed=0 ###### ## [MS-NRTP] ###### ###(000)=[passed] [MS-NRBF] parse .NET Binary Format >>> from scapy.layers.ms_nrtp import * >>> >>> data = b'\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x00\x00\x00NSystem.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\x05\x01\x00\x00\x00\x13System.Data.DataSet\n\x00\x00\x00\x16DataSet.RemotingFormat\x13DataSet.DataSetName\x11DataSet.Namespace\x0eDataSet.Prefix\x15DataSet.CaseSensitive\x12DataSet.LocaleLCID\x1aDataSet.EnforceConstraints\x1aDataSet.ExtendedProperties\x14DataSet.Tables.Count\x10DataSet.Tables_0\x04\x01\x01\x01\x00\x00\x00\x02\x00\x07\x1fSystem.Data.SerializationFormat\x02\x00\x00\x00\x01\x08\x01\x08\x02\x02\x00\x00\x00\x05\xfd\xff\xff\xff\x1fSystem.Data.SerializationFormat\x01\x00\x00\x00\x07value__\x00\x08\x02\x00\x00\x00\x01\x00\x00\x00\x06\x04\x00\x00\x00\x00\t\x04\x00\x00\x00\t\x04\x00\x00\x00\x00\t\x04\x00\x00\x00\n\x01\x00\x00\x00\t\x05\x00\x00\x00\x0f\x05\x00\x00\x00\x07\x00\x00\x00\x02TRIMMED\x0b' >>> >>> pkt = NRBF(data) >>> assert len(pkt.records) == 5 >>> >>> assert isinstance(pkt.records[0], NRBFSerializationHeader) >>> assert pkt.records[0].RootID == 1 >>> assert pkt.records[0].HeaderId == -1 >>> >>> assert pkt.records[1].LibraryId == 2 >>> assert pkt.records[1].LibraryName.String == b'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' >>> >>> assert pkt.records[2].ObjectId == 1 >>> assert pkt.records[2].MemberCount == 10 >>> assert len(pkt.records[2].MemberNames) == 10 >>> assert pkt.records[2].MemberNames[9].String == b"DataSet.Tables_0" >>> assert pkt.records[2].AdditionalInfos[0].Value.TypeName.String == b"System.Data.SerializationFormat" >>> assert pkt.records[2].AdditionalInfos[1].Value == PrimitiveTypeEnum.Boolean >>> assert pkt.records[2].AdditionalInfos[5].Value == PrimitiveTypeEnum.Byte >>> assert pkt.records[2].Members[0].Members[0].Value == 1 >>> assert isinstance(pkt.records[2].Members[1], NRBFBinaryObjectString) >>> assert isinstance(pkt.records[2].Members[2], NRBFMemberReference) >>> assert isinstance(pkt.records[2].Members[3], NRBFMemberReference) >>> assert isinstance(pkt.records[2].Members[4], NRBFMemberPrimitiveUnTyped) >>> assert isinstance(pkt.records[2].Members[7], NRBFObjectNull) >>> assert isinstance(pkt.records[2].Members[9], NRBFMemberReference) >>> assert pkt.records[2].Members[9].IdRef == 5 >>> >>> assert pkt.records[3].ObjectId == 5 >>> assert pkt.records[3].Values == b"TRIMMED" >>> >>> assert isinstance(pkt.records[4], NRBFMessageEnd) ###(001)=[passed] [MS-NRBF] build .NET Binary Format >>> pkt = NRBF( ... records=[ ... NRBFSerializationHeader(HeaderId=-1), ... NRBFBinaryLibrary( ... LibraryId=2, ... LibraryName=NRBFLengthPrefixedString( ... String=b"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", ... ), ... ), ... NRBFClassWithMembersAndTypes( ... ObjectId=1, ... Name=NRBFLengthPrefixedString(String=b"System.Data.DataSet"), ... MemberCount=10, ... MemberNames=[ ... NRBFLengthPrefixedString(String=b"DataSet.RemotingFormat"), ... NRBFLengthPrefixedString(String=b"DataSet.DataSetName"), ... NRBFLengthPrefixedString(String=b"DataSet.Namespace"), ... NRBFLengthPrefixedString(String=b"DataSet.Prefix"), ... NRBFLengthPrefixedString(String=b"DataSet.CaseSensitive"), ... NRBFLengthPrefixedString(String=b"DataSet.LocaleLCID"), ... NRBFLengthPrefixedString(String=b"DataSet.EnforceConstraints"), ... NRBFLengthPrefixedString(String=b"DataSet.ExtendedProperties"), ... NRBFLengthPrefixedString(String=b"DataSet.Tables.Count"), ... NRBFLengthPrefixedString(String=b"DataSet.Tables_0"), ... ], ... BinaryTypeEnums=[ ... BinaryTypeEnum.Class, ... BinaryTypeEnum.String, ... BinaryTypeEnum.String, ... BinaryTypeEnum.String, ... BinaryTypeEnum.Primitive, ... BinaryTypeEnum.Primitive, ... BinaryTypeEnum.Primitive, ... BinaryTypeEnum.Object, ... BinaryTypeEnum.Primitive, ... BinaryTypeEnum.PrimitiveArray, ... ], ... AdditionalInfos=[ ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.SystemClass, ... Value=NRBFClassTypeInfo( ... TypeName=NRBFLengthPrefixedString( ... String=b"System.Data.SerializationFormat" ... ), ... LibraryId=2, ... ) ... ), ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.Primitive, ... Value=PrimitiveTypeEnum.Boolean, ... ), ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.Primitive, ... Value=PrimitiveTypeEnum.Int32, ... ), ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.Primitive, ... Value=PrimitiveTypeEnum.Boolean, ... ), ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.Primitive, ... Value=PrimitiveTypeEnum.Int32, ... ), ... NRBFAdditionalInfo( ... type=BinaryTypeEnum.PrimitiveArray, ... Value=PrimitiveTypeEnum.Byte, ... ), ... ], ... LibraryId=2, ... Members=[ ... NRBFClassWithMembersAndTypes( ... ObjectId=-3, ... Name=NRBFLengthPrefixedString( ... String=b"System.Data.SerializationFormat" ... ), ... MemberNames=[ ... NRBFLengthPrefixedString(String=b"value__"), ... ], ... BinaryTypeEnums=[BinaryTypeEnum.Primitive], ... AdditionalInfos=[ ... NRBFAdditionalInfo(type=BinaryTypeEnum.Primitive, ... Value=PrimitiveTypeEnum.Int32), ... ], ... LibraryId=2, ... Members=[ ... NRBFMemberPrimitiveUnTyped(type=PrimitiveTypeEnum.Int32, Value=1) ... ], ... ), ... NRBFBinaryObjectString( ... ObjectId=4, ... Value=NRBFLengthPrefixedString(String=b""), ... ), ... NRBFMemberReference(IdRef=4), ... NRBFMemberReference(IdRef=4), ... NRBFMemberPrimitiveUnTyped(type=PrimitiveTypeEnum.Boolean, Value=0), ... NRBFMemberPrimitiveUnTyped(type=PrimitiveTypeEnum.Int32, Value=1033), ... NRBFMemberPrimitiveUnTyped(type=PrimitiveTypeEnum.Boolean, Value=0), ... NRBFObjectNull(), ... NRBFMemberPrimitiveUnTyped(type=PrimitiveTypeEnum.Int32, Value=1), ... NRBFMemberReference(IdRef=5), ... ], ... ), ... NRBFArraySinglePrimitive( ... ObjectId=5, ... PrimitiveTypeEnum=PrimitiveTypeEnum.Byte, ... Values=b"TRIMMED", ... ), ... NRBFMessageEnd(), ... ] ... ) >>> >>> assert bytes(pkt) == data NETBIOS regression tests for Scapy ━ Run at 04:12:31 from [test/scapy/layers/netbios.uts] by UTscapy in 0.08058047294616699 └ Passed=9 └ Failed=0 ###### ## Netbios tests ###### ###(000)=[passed] NBNSQueryRequest - build & dissect >>> z = NBNSHeader()/NBNSQueryRequest(SUFFIX="file server service", QUESTION_NAME='TEST1', QUESTION_TYPE='NB') >>> >>> assert raw(z) == b'\x00\x00\x01\x10\x00\x01\x00\x00\x00\x00\x00\x00 FEEFFDFEDBCACACACACACACACACACACA\x00\x00 \x00\x01' >>> >>> pkt = IP(dst='192.168.0.255')/UDP(sport=137, dport='netbios_ns')/z >>> pkt = IP(raw(pkt)) >>> assert pkt.QUESTION_NAME == b'TEST1' >>> assert pkt[NBNSQueryRequest].mysummary() == r"NBNSQueryRequest who has '\\TEST1'" >>> >>> assert NBNSQueryRequest in NBNSHeader(raw(z)) >>> >>> z = NBNSQueryRequest(b' PPCACACACACACACACACACACACACACAAA\x00\x00 \x00\x01') >>> assert z.mysummary() == r"NBNSQueryRequest who has '\\\xff'" ###(001)=[passed] NBNSQueryResponse - build & dissect >>> z = NBNSHeader()/NBNSQueryResponse(RR_NAME="FRED", ADDR_ENTRY=[NBNS_ADD_ENTRY(NB_ADDRESS="192.168.0.13")]) >>> >>> assert raw(z) == b'\x00\x00\x85\x00\x00\x00\x00\x01\x00\x00\x00\x00 EGFCEFEECACACACACACACACACACACAAA\x00\x00 \x00\x01\x00\x04\x93\xe0\x00\x06\x00\x00\xc0\xa8\x00\r' >>> pkt = NBNSHeader(raw(z)) >>> assert NBNSQueryResponse in pkt >>> assert pkt.ADDR_ENTRY[0].NB_ADDRESS == "192.168.0.13" >>> assert pkt[NBNSQueryResponse].mysummary() == r"NBNSQueryResponse '\\FRED' is at 192.168.0.13" >>> >>> z = NBNSQueryResponse(b' PPFCEFEECACACACACACACACACACACAAA\x00\x00 \x00\x01\x00\x04\x93\xe0\x00\x06\x00\x00\xc0\xa8\x00\r') >>> assert z.mysummary() == r"NBNSQueryResponse '\\\xffRED' is at 192.168.0.13" >>> >>> z = NBNSHeader(b'/S\x85\x80\x00\x00\x00\x01\x00\x00\x00\x00 FAEPFEEBFEEPCACACACACACACACACAAA\x00\x00 \x00\x01\x00\x03\xf4\x80\x00\x06\x00\x00\xc0\xa8\x01A') >>> assert z.RR_NAME == b'POTATO' >>> assert z.ADDR_ENTRY[0].G == 0 >>> assert z.ADDR_ENTRY[0].NB_ADDRESS == "192.168.1.65" ###(002)=[passed] NBNSQueryResponse answers NBNSQueryRequest >>> req = IP(ihl=5, len=78, proto=17, chksum=8562, src='172.19.0.7', dst='172.19.0.255')/UDP(sport=137, dport=137, len=58, chksum=62101)/NBNSHeader(NM_FLAGS=17, QDCOUNT=1)/NBNSQueryRequest(QUESTION_NAME=b'Loremipsumdolor', SUFFIX=17217) >>> resp = IP(b'E\x00\x00Zn\xab@\x00@\x11s\xb5\xac\x13\x00\x05\xac\x13\x00\x07\x00\x89\x00\x89\x00FX\x8a\x00\x00\x85\x00\x00\x00\x00\x01\x00\x00\x00\x00 EMGPHCGFGNGJHAHDHFGNGEGPGMGPHCCA\x00\x00 \x00\x01\x00\x00\x00\xa5\x00\x06\x00\x00\xac\x13\x00\x05') >>> >>> try: ... conf.checkIPaddr = True ... assert not resp.answers(req) ... conf.checkIPaddr = False ... assert resp.answers(req) ... finally: ... conf.checkIPaddr = True ... ###(003)=[passed] NBNSQueryResponse answers long NBNSQueryRequest >>> req = IP(ihl=5, len=78, proto=17, chksum=8562, src='172.19.0.7', dst='172.19.0.255')/UDP(sport=137, dport=137, len=58, chksum=62101)/NBNSHeader(NM_FLAGS=17, QDCOUNT=1)/NBNSQueryRequest(QUESTION_NAME=b'Loremipsumdolorsitamet', SUFFIX=17217) >>> resp = IP(b'E\x00\x00Zn\xab@\x00@\x11s\xb5\xac\x13\x00\x05\xac\x13\x00\x07\x00\x89\x00\x89\x00FX\x8a\x00\x00\x85\x00\x00\x00\x00\x01\x00\x00\x00\x00 EMGPHCGFGNGJHAHDHFGNGEGPGMGPHCCA\x00\x00 \x00\x01\x00\x00\x00\xa5\x00\x06\x00\x00\xac\x13\x00\x05') >>> >>> try: ... conf.checkIPaddr = True ... assert not resp.answers(req) ... conf.checkIPaddr = False ... assert resp.answers(req) ... finally: ... conf.checkIPaddr = True ... ###(004)=[passed] NBNSNodeStatusResponse - build & dissect >>> z = NBNSHeader()/NBNSNodeStatusResponse(NODE_NAME=[NBNSNodeStatusResponseService(NETBIOS_NAME="WINDOWS")], MAC_ADDRESS="aa:aa:aa:aa:aa:aa") >>> assert raw(z) == b'\x00\x00\x84\x00\x00\x00\x00\x01\x00\x00\x00\x00 HHGJGOGEGPHHHDCACACACACACACACAAA\x00\x00!\x00\x01\x00\x00\x00\x00\x00S\x01WINDOWS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> pkt = NBNSHeader(raw(z)) >>> assert pkt.NODE_NAME[0].NETBIOS_NAME == b'WINDOWS\x00\x00\x00\x00\x00\x00\x00\x00' >>> assert NBNSNodeStatusResponse in pkt ###(005)=[passed] NBNSNodeStatusRequest - build and answers >>> pkt = UDP()/NBNSHeader()/NBNSNodeStatusRequest() >>> assert raw(pkt.payload) == b'\x00\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00 CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x00\x00!\x00\x01' >>> assert pkt[NBNSNodeStatusRequest].mysummary() == "NBNSNodeStatusRequest who has '\\\\*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'" >>> >>> resp = UDP(b'\x00\x89\x00\x89\x00\xc9v>\x00\x00\x84\x00\x00\x00\x00\x01\x00\x00\x00\x00 CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x00\x00!\x00\x01\x00\x00\x00\x00\x00\x89\x05DOMAIN \x00\x84\x00SRV1 \x00\x04\x00DOMAIN \x1c\x84\x00SRV1 \x04\x00DOMAIN \x1b\x04\x00RT\x00iX\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert [x.NETBIOS_NAME.strip() for x in resp.NODE_NAME] == [b'DOMAIN', b'SRV1', b'DOMAIN', b'SRV1', b'DOMAIN'] >>> assert resp.answers(pkt) >>> >>> z = NBNSNodeStatusRequest(b' PPCACACACACACACACACACACACACACAAA\x00\x00!\x00\x01') >>> assert z.mysummary() == r"NBNSNodeStatusRequest who has '\\\xff'" ###(006)=[passed] NBNSWackResponse - build & dissect >>> z = NBNSHeader()/NBNSWackResponse(RR_NAME="SARAH") >>> assert raw(z) == b'\x00\x00\xbc\x00\x00\x00\x00\x01\x00\x00\x00\x00 FDEBFCEBEICACACACACACACACACACAAA\x00\x00 \x00\x01\x00\x00\x00\x02\x00\x02)\x10' >>> pkt = NBNSHeader(raw(z)) >>> assert pkt[NBNSWackResponse].RR_NAME == b'SARAH' ###(007)=[passed] NBTSession >>> z = raw(TCP()/NBTSession()) No IP underlayer to compute checksum. Leaving null. >>> assert z == b'\x00\x8b\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> assert NBTSession in TCP(z) ###(008)=[passed] OSS-Fuzz Findings >>> with no_debug_dissector(): ... raw_packet = b'E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x05\x00\x00\x00' ... packet = NBNSQueryResponse(raw_packet) ... assert packet.summary() == "NBNSQueryResponse" ... NetFlow regression tests for Scapy ━ Run at 04:12:31 from [test/scapy/layers/netflow.uts] by UTscapy in 0.5717668533325195 └ Passed=15 └ Failed=0 ###### ## Netflow v5 ###### ###(000)=[passed] NetflowHeaderV5 - basic building >>> raw(NetflowHeader()/NetflowHeaderV5()) == b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True >>> >>> raw(NetflowHeaderV5(engineID=42)) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*\x00\x00' True >>> >>> raw(NetflowRecordV5(dst="192.168.0.1")) == b'\x7f\x00\x00\x01\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00' True >>> >>> raw(NetflowHeader()/NetflowHeaderV5(count=1)/NetflowRecordV5(dst="192.168.0.1")) == b'\x00\x05\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00' True >>> >>> raw(NetflowHeader()/NetflowHeaderV5()/NetflowRecordV5(dst="192.168.0.1")/NetflowRecordV5(dst="172.16.0.1")) == b'\x00\x05\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\xac\x10\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(001)=[passed] NetflowHeaderV5 - UDP bindings >>> s = raw(IP(src="127.0.0.1")/UDP()/NetflowHeader()/NetflowHeaderV5()) >>> assert s == b'E\x00\x004\x00\x01\x00\x00@\x11|\xb6\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x07\x08\x07\x00 \xf1\x98\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> pkt = IP(s) >>> assert NetflowHeaderV5 in pkt ###(002)=[passed] NetflowHeaderV5 - basic dissection >>> nf5 = NetflowHeader(b'\x00\x05\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> nf5.version == 5 and nf5[NetflowHeaderV5].count == 2 and isinstance(nf5[NetflowRecordV5].payload, NetflowRecordV5) True ###### ## Netflow v9 ###### ###(003)=[passed] NetflowV9 - advanced dissection >>> import os >>> filename = scapy_path("/test/pcaps/netflowv9.pcap") >>> a = rdpcap(filename) >>> a = netflowv9_defragment(a) 8 {} 12 {} 5 {} 4 {'enum': } 7 {} 11 {} 32 {} 16 {} 17 {} 18 {} 22 {'use_msec': True} 21 {'use_msec': True} 15 {} 9 {} 13 {} 6 {} 60 {} 5 {} 36 {} 37 {} 34 {} 35 {} >>> >>> nfv9_fl = a[0] >>> assert NetflowFlowsetV9 in nfv9_fl >>> assert len(nfv9_fl.templates[0].template_fields) == 21 >>> assert nfv9_fl.templates[0].template_fields[1].fieldType == 12 >>> >>> nfv9_ds = a[3] >>> assert NetflowDataflowsetV9 in nfv9_ds >>> assert len(nfv9_ds[NetflowDataflowsetV9].records) == 24 >>> assert nfv9_ds[NetflowDataflowsetV9].records[21].IP_PROTOCOL_VERSION == 4 >>> assert nfv9_ds.records[21].IPV4_SRC_ADDR == '20.0.0.248' >>> assert nfv9_ds.records[21].IPV4_DST_ADDR == '30.0.0.248' >>> >>> nfv9_options_fl = a[1] >>> assert NetflowOptionsFlowsetV9 in nfv9_options_fl >>> assert isinstance(nfv9_options_fl[NetflowOptionsFlowsetV9].scopes[0], NetflowOptionsFlowsetScopeV9) >>> assert isinstance(nfv9_options_fl[NetflowOptionsFlowsetV9].options[0], NetflowOptionsFlowsetOptionV9) >>> assert nfv9_options_fl[NetflowOptionsFlowsetV9].options[0].optionFieldType == 36 >>> >>> nfv9_options_ds = a[4] >>> assert NetflowDataflowsetV9 in nfv9_options_ds >>> assert isinstance(nfv9_options_ds.records[0], NetflowOptionsRecordScopeV9) >>> assert nfv9_options_ds.records[0].IN_BYTES == b'\x01\x00\x00\x00' >>> assert nfv9_options_ds.records[1].SAMPLING_INTERVAL == 12 >>> assert nfv9_options_ds.records[1].SAMPLING_ALGORITHM == 0x2 ###(004)=[passed] NetflowV9 - Multiple FlowSets in one packet >>> nfv9_multiple_flowsets = NetflowHeader(b'\x00\t\x00\x03\x00\x00K [F\x17\x97\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00H\x04\x00\x00\x10\x00\x08\x00\x04\x00\x0c\x00\x04\x00\x15\x00\x04\x00\x16\x00\x04\x00\x01\x00\x08\x00\x02\x00\x08\x00\n\x00\x04\x00\x0e\x00\x04\x00\x07\x00\x02\x00\x0b\x00\x02\x00\x04\x00\x01\x00\x06\x00\x01\x00<\x00\x01\x00\x05\x00\x01\x00 \x00\x02\x00:\x00\x02\x00\x00\x00L\x08\x00\x00\x11\x00\x1b\x00\x10\x00\x1c\x00\x10\x00\x1f\x00\x04\x00\x15\x00\x04\x00\x16\x00\x04\x00\x01\x00\x08\x00\x02\x00\x08\x00\n\x00\x04\x00\x0e\x00\x04\x00\x07\x00\x02\x00\x0b\x00\x02\x00\x04\x00\x01\x00\x06\x00\x01\x00<\x00\x01\x00\x05\x00\x01\x00 \x00\x02\x00:\x00\x02\x04\x00\x008\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x10\xac\x00\x00\x10\x83\x00\x00\x00\x00\x00\x00\x0b\xb8\x00\x00\x00\x00\x00\x00\x002\x00\x00\x00\x00\x00\x00\x00\x01\x005\x005\x11\x00\x04\x00\x00\x00\x00e') >>> assert nfv9_multiple_flowsets.haslayer(NetflowFlowsetV9) >>> assert nfv9_multiple_flowsets.haslayer(NetflowDataflowsetV9) >>> nfv9_defrag = netflowv9_defragment(list(nfv9_multiple_flowsets)) 8 {} 12 {} 21 {'use_msec': True} 22 {'use_msec': True} 7 {} 11 {} 4 {'enum': } 6 {} 60 {} 5 {} 32 {} 58 {} 27 {} 28 {} 31 {} 21 {'use_msec': True} 22 {'use_msec': True} 7 {} 11 {} 4 {'enum': } 6 {} 60 {} 5 {} 32 {} 58 {} >>> flowset1 = nfv9_defrag[0].getlayer(NetflowFlowsetV9, 1) >>> assert flowset1.templates[0].template_fields[0].fieldType == 8 >>> assert flowset1.templates[0].template_fields[0].fieldLength == 4 >>> assert flowset1.templates[0].template_fields[5].fieldType == 2 >>> assert flowset1.templates[0].template_fields[5].fieldLength == 8 >>> flowset2 = nfv9_defrag[0].getlayer(NetflowFlowsetV9, 2) >>> assert flowset2.templates[0].template_fields[0].fieldType == 27 >>> assert flowset2.templates[0].template_fields[0].fieldLength == 16 >>> assert flowset2.templates[0].template_fields[5].fieldType == 1 >>> assert flowset2.templates[0].template_fields[5].fieldLength == 8 >>> assert nfv9_defrag[0].getlayer(NetflowFlowsetV9, 2) >>> assert nfv9_defrag[0].records[0].IP_PROTOCOL_VERSION == 4 >>> assert nfv9_defrag[0].records[0].PROTOCOL == 17 >>> assert nfv9_defrag[0].records[0].IPV4_SRC_ADDR == "127.0.0.1" ###(005)=[passed] NetflowV9 - build and dissection >>> header = Ether()/IP()/UDP() >>> netflow_header = NetflowHeader()/NetflowHeaderV9(unixSecs=0) >>> >>> flowset = NetflowFlowsetV9( ... templates=[NetflowTemplateV9( ... template_fields=[ ... NetflowTemplateFieldV9(fieldType=1, fieldLength=1), # IN_BYTES ... NetflowTemplateFieldV9(fieldType=2, fieldLength=4), # IN_PKTS ... NetflowTemplateFieldV9(fieldType=4), # PROTOCOL ... NetflowTemplateFieldV9(fieldType=8), # IPV4_SRC_ADDR ... NetflowTemplateFieldV9(fieldType=12), # IPV4_DST_ADDR ... ], ... templateID=256, ... fieldCount=5) ... ], ... flowSetID=0 ... ) >>> recordClass = GetNetflowRecordV9(flowset) 4 {'enum': } 8 {} 12 {} >>> dataFS = NetflowDataflowsetV9( ... templateID=256, ... records=[ # Some random data. ... recordClass( ... IN_BYTES=b"\x12", ... IN_PKTS=b"\0\0\0\0", ... PROTOCOL=6, ... IPV4_SRC_ADDR="192.168.0.10", ... IPV4_DST_ADDR="192.168.0.11" ... ), ... ], ... ) >>> >>> pkt = netflow_header / flowset / dataFS >>> assert raw(pkt) == b'\x00\t\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x08\x00\x04\x00\x0c\x00\x04\x01\x00\x00\x14\x12\x00\x00\x00\x00\x06\xc0\xa8\x00\n\xc0\xa8\x00\x0b\x00\x00' >>> >>> pkt = header / netflow_header / flowset / dataFS >>> pkt = netflowv9_defragment(Ether(raw(pkt)))[0] 4 {'enum': } 8 {} 12 {} >>> >>> assert NetflowDataflowsetV9 in pkt >>> assert len(pkt[NetflowDataflowsetV9].records) == 1 >>> assert pkt[NetflowDataflowsetV9].records[0].IPV4_DST_ADDR == "192.168.0.11" ###(006)=[passed] NetflowV9 - advanced build >>> atm_time = 1547927349.328283 >>> >>> header = Ether(src="00:00:00:00:00:00", dst="aa:aa:aa:aa:aa:aa")/IP(dst="127.0.0.1", src="127.0.0.1")/UDP()/NetflowHeader()/NetflowHeaderV9(unixSecs=atm_time) >>> flowset = NetflowFlowsetV9(templates=[NetflowTemplateV9(template_fields=[NetflowTemplateFieldV9(fieldType=8, fieldLength=4),NetflowTemplateFieldV9(fieldType=12, fieldLength=4),NetflowTemplateFieldV9(fieldType=5, fieldLength=1),NetflowTemplateFieldV9(fieldType=4, fieldLength=1),NetflowTemplateFieldV9(fieldType=7, fieldLength=2),NetflowTemplateFieldV9(fieldType=11, fieldLength=2),NetflowTemplateFieldV9(fieldType=32, fieldLength=2),NetflowTemplateFieldV9(fieldType=10, fieldLength=4),NetflowTemplateFieldV9(fieldType=16, fieldLength=4),NetflowTemplateFieldV9(fieldType=17, fieldLength=4),NetflowTemplateFieldV9(fieldType=18, fieldLength=4),NetflowTemplateFieldV9(fieldType=14, fieldLength=4),NetflowTemplateFieldV9(fieldType=1, fieldLength=4),NetflowTemplateFieldV9(fieldType=2, fieldLength=4),NetflowTemplateFieldV9(fieldType=22, fieldLength=4),NetflowTemplateFieldV9(fieldType=21, fieldLength=4),NetflowTemplateFieldV9(fieldType=15, fieldLength=4),NetflowTemplateFieldV9(fieldType=9, fieldLength=1),NetflowTemplateFieldV9(fieldType=13, fieldLength=1),NetflowTemplateFieldV9(fieldType=6, fieldLength=1),NetflowTemplateFieldV9(fieldType=60, fieldLength=1)], templateID=424, fieldCount=21)], flowSetID=0, length=92) >>> dataflowset = NetflowDataflowsetV9(records=[NetflowRecordV9(fieldValue=b'\x14\x00\x00\xfd\x1e\x00\x00\xfd\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x03 \x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02\xfb\x00\x15a|\x00\x00\x07\x0f$\x95x\xed$\x99\x91<\ndg\x01 \x00\x04')], templateID=424) >>> >>> pkt = netflowv9_defragment(list(header/flowset/dataflowset))[0] 8 {} 12 {} 5 {} 4 {'enum': } 7 {} 11 {} 32 {} 16 {} 17 {} 18 {} 22 {'use_msec': True} 21 {'use_msec': True} 15 {} 9 {} 13 {} 6 {} 60 {} >>> assert pkt.records[0].IPV4_NEXT_HOP == "10.100.103.1" >>> assert pkt.records[0].OUTPUT_SNMP == b'\x00\x00\x02\xfb' >>> >>> assert raw(pkt) == b'\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\xcc\x00\x01\x00\x00@\x11|\x1e\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x07\x08\x07\x00\xb8\x86\xe7\x00\t\x00\x02\x00\x00\x00\x00\\C\x7f5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x01\xa8\x00\x15\x00\x08\x00\x04\x00\x0c\x00\x04\x00\x05\x00\x01\x00\x04\x00\x01\x00\x07\x00\x02\x00\x0b\x00\x02\x00 \x00\x02\x00\n\x00\x04\x00\x10\x00\x04\x00\x11\x00\x04\x00\x12\x00\x04\x00\x0e\x00\x04\x00\x01\x00\x04\x00\x02\x00\x04\x00\x16\x00\x04\x00\x15\x00\x04\x00\x0f\x00\x04\x00\t\x00\x01\x00\r\x00\x01\x00\x06\x00\x01\x00<\x00\x01\x01\xa8\x00@\x14\x00\x00\xfd\x1e\x00\x00\xfd\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x03 \x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02\xfb\x00\x15a|\x00\x00\x07\x0f$\x95x\xed$\x99\x91<\ndg\x01 \x00\x04' ###(007)=[passed] NetflowV9 - padding #GH2257 >>> dat = hex_bytes("fb200807007840a10009000277efe9c450c843f900362202000000000001001801000004000800010000002a00040029000400000101004477ef819077ef81900000003c00000001009300930ac900640ac9033b060009ee0b3500000ac9033b131302000000000000260bdc69aa6480996649a000000000") >>> pkt = UDP(dat) >>> assert pkt[NetflowOptionsFlowsetV9].pad == b"\x00\x00" >>> pkt[NetflowOptionsFlowsetV9].pad = None >>> assert raw(pkt) == dat ###(008)=[passed] NetflowV9 - Options Template build >>> option_templateFlowSet_256 = NetflowOptionsFlowsetV9( ... templateID = 256, ... option_scope_length = 4*1, ... option_field_length = 4*3, ... scopes = [ ... NetflowOptionsFlowsetScopeV9(scopeFieldType=1, scopeFieldlength= 4), ... ], ... options = [ ... NetflowOptionsFlowsetOptionV9(optionFieldType= 10, optionFieldlength= 4), ... NetflowOptionsFlowsetOptionV9(optionFieldType= 82, optionFieldlength= 32), ... NetflowOptionsFlowsetOptionV9(optionFieldType= 83, optionFieldlength= 240) ... ]) >>> assert raw(option_templateFlowSet_256) == b'\x00\x01\x00\x1c\x01\x00\x00\x04\x00\x0c\x00\x01\x00\x04\x00\n\x00\x04\x00R\x00 \x00S\x00\xf0\x00\x00' ###(009)=[passed] NetflowV9 - Advanced build, multiple flowsets and multiple records by flowset >>> template_flowset = NetflowFlowsetV9( ... templates=[ NetflowTemplateV9( ... template_fields=[ ... NetflowTemplateFieldV9(fieldType="IN_BYTES", fieldLength=1), ... NetflowTemplateFieldV9(fieldType="IN_PKTS", fieldLength=4), ... NetflowTemplateFieldV9(fieldType="PROTOCOL"), ... NetflowTemplateFieldV9(fieldType="IPV4_SRC_ADDR"), ... NetflowTemplateFieldV9(fieldType="IPV4_DST_ADDR"), ... ], ... templateID=256, ... fieldCount=5), ... NetflowTemplateV9( ... template_fields=[ ... NetflowTemplateFieldV9(fieldType="IN_BYTES", fieldLength=1), ... NetflowTemplateFieldV9(fieldType="IN_PKTS", fieldLength=4), ... NetflowTemplateFieldV9(fieldType="PROTOCOL"), ... NetflowTemplateFieldV9(fieldType="IPV6_SRC_ADDR"), ... NetflowTemplateFieldV9(fieldType="IPV6_DST_ADDR"), ... ], ... templateID=257, ... fieldCount=5) ... ], ... flowSetID=0 ... ) >>> >>> Record256 = GetNetflowRecordV9(template_flowset, templateID = 256) 4 {'enum': } 8 {} 12 {} 4 {'enum': } 27 {} 28 {} >>> Record257 = GetNetflowRecordV9(template_flowset, templateID = 257) 4 {'enum': } 8 {} 12 {} 4 {'enum': } 27 {} 28 {} >>> >>> dataFlowset_1 = NetflowDataflowsetV9( ... templateID=256, ... records=[ ... Record256( ... IN_BYTES=b"\x12", ... IN_PKTS=b"\0\0\0\0", ... PROTOCOL=1, ... IPV4_SRC_ADDR="192.168.0.10", ... IPV4_DST_ADDR="192.168.0.11" ... ), ... Record256( ... IN_BYTES=b"\x0c", ... IN_PKTS=b"\1\1\1\1", ... PROTOCOL=2, ... IPV4_SRC_ADDR="172.0.0.10", ... IPV4_DST_ADDR="172.0.0.11" ... ), ... Record256( ... IN_BYTES=b"\x0c", ... IN_PKTS=b"\1\1\1\1", ... PROTOCOL=3, ... IPV4_SRC_ADDR="172.0.0.10", ... IPV4_DST_ADDR="172.0.0.11" ... ), ... Record256( ... IN_BYTES=b"\x0c", ... IN_PKTS=b"\1\1\1\1", ... PROTOCOL=4, ... IPV4_SRC_ADDR="172.0.0.10", ... IPV4_DST_ADDR="172.0.0.11" ... ), ... Record256( ... IN_BYTES=b"\x0c", ... IN_PKTS=b"\1\1\1\1", ... PROTOCOL=5, ... IPV4_SRC_ADDR="172.0.0.10", ... IPV4_DST_ADDR="172.0.0.11" ... ) ... ], ... ) >>> >>> dataFlowset_2 = NetflowDataflowsetV9( ... templateID=257, ... records=[ ... Record257( ... IN_BYTES=b"\x12", ... IN_PKTS=b"\0\0\0\0", ... PROTOCOL=1, ... IPV6_SRC_ADDR="2001:db8:3333:4444:5555:6666:7777:8888", ... IPV6_DST_ADDR="2001:db8::" ... ), ... Record257( ... IN_BYTES=b"\x0c", ... IN_PKTS=b"\1\1\1\1", ... PROTOCOL=2, ... IPV6_SRC_ADDR="2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF", ... IPV6_DST_ADDR="2001:db8::" ... ) ... ], ... ) >>> >>> opttmpl258_flowSet = NetflowOptionsFlowsetV9( ... templateID = 258, ... option_scope_length = 4*1, ... option_field_length = 4*2, ... scopes = [ ... NetflowOptionsFlowsetScopeV9(scopeFieldType= 1, scopeFieldlength= 4), ... ], ... options = [ ... NetflowOptionsFlowsetOptionV9(optionFieldType= 34, optionFieldlength= 4), ... NetflowOptionsFlowsetOptionV9(optionFieldType= 35, optionFieldlength= 1) ... ]) >>> >>> class Record_258(NetflowRecordV9): ... name = "Option interface-table" ... fields_desc = [ ... IntField("System", 0), ... IntField("SAMPLING_INTERVAL", 4), ... XByteField("SAMPLING_ALGORITHM", 1) ... ] ... match_subclass = True ... >>> >>> optiondataFlowset = NetflowDataflowsetV9( ... templateID=258, ... records=[ ... Record_258( ... System=424242, ... SAMPLING_INTERVAL=100, ... SAMPLING_ALGORITHM=0x01 ... ), ... Record_258( ... System=242424, ... SAMPLING_INTERVAL=1000, ... SAMPLING_ALGORITHM=0x02 ... ) ... ], ... ) >>> >>> netflow_header = NetflowHeader()/NetflowHeaderV9(unixSecs=1547927349.328283) >>> pkt = netflow_header / template_flowset / opttmpl258_flowSet / dataFlowset_1 / dataFlowset_2 / optiondataFlowset >>> >>> assert raw(pkt) == b'\x00\t\x00\x0c\x00\x00\x00\x00\\C\x7f5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004\x01\x00\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x08\x00\x04\x00\x0c\x00\x04\x01\x01\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x1b\x00\x10\x00\x1c\x00\x10\x00\x01\x00\x18\x01\x02\x00\x04\x00\x08\x00\x01\x00\x04\x00"\x00\x04\x00#\x00\x01\x00\x00\x01\x00\x00L\x12\x00\x00\x00\x00\x01\xc0\xa8\x00\n\xc0\xa8\x00\x0b\x0c\x01\x01\x01\x01\x02\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x03\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x04\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x05\xac\x00\x00\n\xac\x00\x00\x0b\x00\x00\x01\x01\x00P\x12\x00\x00\x00\x00\x01 \x01\r\xb833DDUUffww\x88\x88 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x01\x01\x01\x01\x02 \x01\r\xb833DD\xcc\xcc\xdd\xdd\xee\xee\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x18\x00\x06y2\x00\x00\x00d\x01\x00\x03\xb2\xf8\x00\x00\x03\xe8\x02\x00\x00' ###(010)=[passed] NetflowV9 - Advanced dissection, complete example >>> pkt = NetflowHeader(b'\x00\t\x00\x0c\x00\x00\x00\x00\\C\x7f5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004\x01\x00\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x08\x00\x04\x00\x0c\x00\x04\x01\x01\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x1b\x00\x10\x00\x1c\x00\x10\x00\x01\x00\x18\x01\x02\x00\x04\x00\x08\x00\x01\x00\x04\x00"\x00\x04\x00#\x00\x01\x00\x00\x01\x00\x00L\x12\x00\x00\x00\x00\x01\xc0\xa8\x00\n\xc0\xa8\x00\x0b\x0c\x01\x01\x01\x01\x02\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x03\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x04\xac\x00\x00\n\xac\x00\x00\x0b\x0c\x01\x01\x01\x01\x05\xac\x00\x00\n\xac\x00\x00\x0b\x00\x00\x01\x01\x00P\x12\x00\x00\x00\x00\x01 \x01\r\xb833DDUUffww\x88\x88 \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x01\x01\x01\x01\x02 \x01\r\xb833DD\xcc\xcc\xdd\xdd\xee\xee\xff\xff \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x18\x00\x06y2\x00\x00\x00d\x01\x00\x03\xb2\xf8\x00\x00\x03\xe8\x02\x00\x00') >>> >>> nf_header = pkt.getlayer(NetflowHeader) >>> assert nf_header.version == 9 >>> nfv9_header = pkt.getlayer(NetflowHeaderV9) >>> assert nf_header.count == 12 >>> >>> flowset_1 = pkt.getlayer(NetflowFlowsetV9, 1) >>> assert len(flowset_1.templates) == 2 >>> assert flowset_1.templates[0].templateID == 256 >>> assert flowset_1.templates[1].templateID == 257 >>> assert flowset_1.templates[1].fieldCount == 5 >>> assert flowset_1.templates[1].template_fields[1].fieldLength == 4 >>> >>> flowset_2 = pkt.getlayer(NetflowOptionsFlowsetV9, 1) >>> assert flowset_2.templateID == 258 >>> assert len(flowset_2.scopes) == 1 >>> assert len(flowset_2.options) == 2 >>> assert flowset_2.pad == b'\x00\x00' >>> >>> flowset_3 = pkt.getlayer(NetflowDataflowsetV9, 1) >>> assert flowset_3.templateID == 256 >>> assert flowset_3.length == 76 >>> >>> flowset_4 = pkt.getlayer(NetflowDataflowsetV9, 2) >>> assert flowset_4.templateID == 257 >>> >>> flowset_5 = pkt.getlayer(NetflowDataflowsetV9, 3) >>> assert flowset_5.templateID == 258 ###### ## Netflow v10 (aka IPFix) ###### ###(011)=[passed] IPFix dissection >>> import os >>> filename = scapy_path("/test/pcaps/ipfix.pcap") >>> a = sniff(offline=filename, session=NetflowSession) 8 {} 12 {} 5 {} 4 {'enum': } 7 {} 11 {} 32 {} 16 {} 17 {} 18 {} 22 {'use_msec': True} 21 {'use_msec': True} 15 {} 9 {} 13 {} 6 {} 60 {} 152 {'use_msec': True, 'length': 8} 153 {'use_msec': True, 'length': 8} >>> >>> pkt1 = a[0] >>> assert NetflowHeaderV10 in pkt1 >>> assert len(pkt1[NetflowFlowsetV9].templates) == 1 >>> assert len(pkt1[NetflowFlowsetV9].templates[0].template_fields) == 23 >>> flds = pkt1[NetflowFlowsetV9].templates[0].template_fields >>> assert (flds[0].fieldType == 8 and flds[0].fieldLength == 4) >>> assert (flds[4].fieldType == 7 and flds[4].fieldLength == 2) >>> >>> pkt2 = a[2] >>> assert NetflowHeaderV10 in pkt2 >>> assert len(pkt2.records) == 1 >>> assert pkt2.records[0].IPV4_SRC_ADDR == "70.1.115.1" >>> assert pkt2.records[0].flowStartMilliseconds == 1480449931519 >>> >>> pkt3 = a[1] >>> assert NetflowOptionsFlowset10 in pkt3 >>> assert pkt3.scope_field_count == 1 >>> assert pkt3.field_count == 3 >>> assert len(pkt3[NetflowOptionsFlowset10].scopes) == 1 >>> assert len(pkt3[NetflowOptionsFlowset10].options) == 2 >>> assert pkt3.scopes[0].scopeFieldType == 5 >>> assert pkt3.scopes[0].scopeFieldlength == 2 >>> assert pkt3[NetflowOptionsFlowset10].options[0].optionFieldType == 36 >>> >>> s=b'\x01\x07\x00\x12\x01\n\x00\x04\x84\x0c\x00\x02\x00\x00\x00\t\x01\n\x00&\x00\x0b\x00\x02\x00\x07\x00\x02\x00\x04\x00\x01\x00\x0c\x00\x04\x00\x08\x00\x04\x00\xea\x00\x02\x01\n\x00\x01\x84\x10\x00\x06\x00\x00\x00\t\x84\x0e\x00\x06\x00\x00\x00\t\x84\x0f\x00\x06\x00\x00\x00\t\x00\x01\x00\x04\x00\x02\x00\x04\x00\xf3\x00\x02\x00\x06\x00\x01\x01\n\x00#' >>> pkt4 = NetflowTemplateV9(s) >>> assert len(pkt4.template_fields) == pkt4.fieldCount >>> assert sum([template.fieldLength for template in pkt4.template_fields]) == 124 ###(012)=[passed] NetflowV10/IPFIX - dissection without padding (GH3101) >>> s=b'\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00f\x00\x01\x00\x00@\x11|\x84\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x07\x08\x07\x00R\xee\xa2\x00\n\x00H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x01\x00\x04\x00\x02\x00\x04\x00\x04\x00\x01\x00\x08\x00\x04\x00\x0c\x00\x04\x01\x01\x00\x11\x00\x00\x00\x00\x06\xc0\xa8\x00\n\xc0\xa8\x00\x0b\x01\x01\x00\x11\x00\x00\x00\x00\x06\xc0\xa8\x00\n\xc0\xa8\x00\x0b' >>> pkt = netflowv9_defragment(Ether(s))[0] 4 {'enum': } 8 {} 12 {} >>> >>> for i in range(1,3): ... assert pkt.getlayer(NetflowDataflowsetV9, i).templateID == 257 ... assert pkt.getlayer(NetflowDataflowsetV9, i).records[0].IN_PKTS == b'\x00\x00\x00\x00' ... assert pkt.getlayer(NetflowDataflowsetV9, i).records[0].PROTOCOL == 6 ... assert pkt.getlayer(NetflowDataflowsetV9, i).records[0].IPV4_SRC_ADDR == "192.168.0.10" ... assert pkt.getlayer(NetflowDataflowsetV9, i).records[0].IPV4_DST_ADDR == "192.168.0.11" ... >>> assert not pkt.getlayer(NetflowDataflowsetV9, 2).payload ###(013)=[passed] NetflowV10/IPFIX - build >>> netflow_header = NetflowHeader()/NetflowHeaderV10() >>> >>> flowset = NetflowFlowsetV9( ... templates=[NetflowTemplateV9( ... template_fields=[ ... NetflowTemplateFieldV9(fieldType=1, fieldLength=1), # IN_BYTES ... NetflowTemplateFieldV9(fieldType=2, fieldLength=4), # IN_PKTS ... NetflowTemplateFieldV9(fieldType=4), # PROTOCOL ... NetflowTemplateFieldV9(fieldType=8), # IPV4_SRC_ADDR ... NetflowTemplateFieldV9(fieldType=12), # IPV4_DST_ADDR ... ], ... templateID=256, ... fieldCount=5) ... ], ... flowSetID=0 ... ) >>> recordClass = GetNetflowRecordV9(flowset) 4 {'enum': } 8 {} 12 {} >>> dataFS = NetflowDataflowsetV9( ... templateID=256, ... records=[ # Some random data. ... recordClass( ... IN_BYTES=b"\x12", ... IN_PKTS=b"\0\0\0\0", ... PROTOCOL=6, ... IPV4_SRC_ADDR="192.168.0.10", ... IPV4_DST_ADDR="192.168.0.11" ... ), ... ], ... ) >>> >>> pkt = netflow_header / flowset / dataFS >>> assert raw(pkt) == b'\x00\n\x00>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\x00\x00\x05\x00\x01\x00\x01\x00\x02\x00\x04\x00\x04\x00\x01\x00\x08\x00\x04\x00\x0c\x00\x04\x01\x00\x00\x14\x12\x00\x00\x00\x00\x06\xc0\xa8\x00\n\xc0\xa8\x00\x0b\x00\x00' ###(014)=[passed] NetflowSession - dissect packet NetflowV9 packets on-the-flow >>> import os >>> filename = scapy_path("/test/pcaps/netflowv9.pcap") >>> >>> dissected_packets = [] >>> def callback(pkt): ... dissected_packets.append(pkt) ... >>> sniff(offline=filename, session=NetflowSession, prn=callback) 8 {} 12 {} 5 {} 4 {'enum': } 7 {} 11 {} 32 {} 16 {} 17 {} 18 {} 22 {'use_msec': True} 21 {'use_msec': True} 15 {} 9 {} 13 {} 6 {} 60 {} 5 {} 36 {} 37 {} 34 {} 35 {} >>> records = dissected_packets[3][NetflowDataflowsetV9].records >>> assert len(records) == 24 >>> assert records[0].IPV4_SRC_ADDR == '20.0.1.174' >>> assert records[0].IPV4_NEXT_HOP == '10.100.103.1' >>> >>> dscp_flowset = NetflowFlowsetV9( ... templates=[ ... NetflowTemplateV9( ... template_fields=[ ... NetflowTemplateFieldV9(fieldType=195), ... ], ... templateID=273, ... ) ... ], ... flowSetID=2, ... ) >>> >>> recordClass = GetNetflowRecordV9(dscp_flowset, templateID=273) 195 {} >>> >>> dscp_dataset = NetflowDataflowsetV9( ... templateID=273, ... records=[ ... recordClass( ... IP_DSCP=42, ... ), ... ], ... ) >>> >>> assert(raw(dscp_dataset) == b'\x01\x11\x00\x08\x2a\x00\x00\x00') NTLM tests ━ Run at 04:12:31 from [test/scapy/layers/ntlm.uts] by UTscapy in 0.29303622245788574 └ Passed=26 └ Failed=0 ###### ## [MS-NLMP] tests ###### ###(000)=[passed] [MS-NLMP] 4.2.1 - Common Values >>> User = "User" >>> UserDom = "Domain" >>> Passwd = "Password" >>> ServerName = "Server" >>> WorkstationName = "COMPUTER" >>> RandomSessionKey = b"UUUUUUUUUUUUUUUU" >>> Time = 0 >>> ClientChallenge = b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' >>> ServerChallenge = b'\x01\x23\x45\x67\x89\xab\xcd\xef' ###(001)=[passed] [MS-NLMP] 4.2.4 >>> NegotiateFlags = 0xe28a8233 >>> AVPairs1 = "Server" >>> AVPairs2 = "Domain" ###(002)=[passed] [MS-NLMP] 4.2.4.1.1 NTOWFv2() >>> ResponseKeyNT = NTOWFv2(Passwd, User, UserDom) >>> assert ResponseKeyNT == b'\x0c\x86\x8a@;\xfdz\x93\xa3\x00\x1e\xf2.\xf0.?' ###(003)=[passed] Build NTLMv2_RESPONSE >>> ntlm_response = NTLMv2_RESPONSE( ... TimeStamp=Time, ... ChallengeFromClient=ClientChallenge, ... AvPairs=[ ... AV_PAIR(AvId="MsvAvNbDomainName", Value=AVPairs2), ... AV_PAIR(AvId="MsvAvNbComputerName", Value=AVPairs1), ... AV_PAIR(AvId="MsvAvEOL"), # Windows does this (samba does not) ... AV_PAIR(AvId="MsvAvEOL"), ... ] ... ) ###(004)=[passed] [MS-NLMP] 4.2.4.2.2 NTLMv2 Response >>> ntlm_response.NTProofStr = ntlm_response.computeNTProofStr( ... ResponseKeyNT, ... ServerChallenge, ... ) >>> assert ntlm_response.NTProofStr == b'h\xcd\n\xb8Q\xe5\x1c\x96\xaa\xbc\x92{\xeb\xefj\x1c' ###(005)=[passed] [MS-NLMP] 4.2.4.1.2 Session Base Key >>> ExportedSessionKey = SessionBaseKey = NTLMv2_ComputeSessionBaseKey( ... ResponseKeyNT, ... ntlm_response.NTProofStr, ... ) >>> assert SessionBaseKey == b'\x8d\xe4\x0c\xca\xdb\xc1J\x82\xf1\\\xb0\xad\r\xe9\\\xa3' ###(006)=[passed] [MS-NLMP] 4.2.4.2.3 Encrypted Session Key >>> EncryptedRandomSessionKey = RC4K(SessionBaseKey, RandomSessionKey) >>> assert EncryptedRandomSessionKey == b'\xc5\xda\xd2TO\xc9y\x90\x94\xce\x1c\xe9\x0b\xc9\xd0>' ###(007)=[passed] [MS-NLMP] 4.2.4.3 Messages >>> ntlm_nego = NTLM_NEGOTIATE( ... NegotiateFlags=NegotiateFlags, ... ProductMajorVersion=5, ... ProductMinorVersion=1, ... ProductBuild=2600, ... ) >>> ntlm_nego.DomainName = UserDom >>> ntlm_nego.WorkstationName = WorkstationName >>> >>> >>> ntlm_auth = NTLM_Header(b'NTLMSSP\x00\x03\x00\x00\x00\x18\x00\x18\x00l\x00\x00\x00T\x00T\x00\x84\x00\x00\x00\x0c\x00\x0c\x00H\x00\x00\x00\x08\x00\x08\x00T\x00\x00\x00\x10\x00\x10\x00\\\x00\x00\x00\x10\x00\x10\x00\xd8\x00\x00\x005\x82\x88\xe2\x05\x01(\n\x00\x00\x00\x0fD\x00o\x00m\x00a\x00i\x00n\x00U\x00s\x00e\x00r\x00C\x00O\x00M\x00P\x00U\x00T\x00E\x00R\x00\x86\xc3P\x97\xac\x9c\xec\x10%TvJW\xcc\xcc\x19\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaah\xcd\n\xb8Q\xe5\x1c\x96\xaa\xbc\x92{\xeb\xefj\x1c\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x02\x00\x0c\x00D\x00o\x00m\x00a\x00i\x00n\x00\x01\x00\x0c\x00S\x00e\x00r\x00v\x00e\x00r\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xda\xd2TO\xc9y\x90\x94\xce\x1c\xe9\x0b\xc9\xd0>') >>> >>> assert ntlm_auth.MIC is None ###(008)=[passed] [MS-NLMP] 4.2.4.4 GSS_WrapEx >>> SeqNum = 0 >>> Plaintext = b'P\x00l\x00a\x00i\x00n\x00t\x00e\x00x\x00t\x00' >>> >>> SealKey = SEALKEY(ntlm_nego.NegotiateFlags, RandomSessionKey, "Client") >>> assert SealKey == b'Y\xf6\x00\x97<\xc4\x96\n%H\n|\x19nLX' >>> >>> SignKey = SIGNKEY(ntlm_nego.NegotiateFlags, RandomSessionKey, "Client") >>> assert SignKey == b'G\x88\xdc\x86\x1bG\x82\xf3]C\xfd\x98\xfe\x1a-9' >>> >>> ssp = NTLMSSP() >>> ctx = NTLMSSP.CONTEXT(IsAcceptor=False) >>> ctx.SendSeqNum = SeqNum >>> ctx.SendSignKey = SignKey >>> ctx.SendSealKey = SealKey >>> ctx.SendSealHandle = RC4Init(SealKey) >>> >>> _msgs, sig = ssp.GSS_WrapEx(ctx, [ ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=Plaintext), ... ]) >>> s = _msgs[0].data >>> >>> assert s == b'T\xe5\x01e\xbf\x196\xdc\x99` \xc1\x81\x1b\x0f\x06\xfb_' >>> assert sig.Checksum == b'\x7f\xb3\x8e\xc5\xc5]Iv' >>> >>> assert bytes(sig) == b'\x01\x00\x00\x00\x7f\xb3\x8e\xc5\xc5]Iv\x00\x00\x00\x00' ###### ## GSS-API SPNEGO: SPNEGOSSP tests ###### ###(009)=[passed] Create randomness-mock context manager >>> from unittest import mock >>> >>> def fake_urandom(x): ... # wow, impressive entropy ... return b"0" * x ... >>> _patches = [ ... # Patch all the random ... mock.patch('scapy.layers.ntlm.os.urandom', side_effect=fake_urandom), ... ] >>> >>> class NTLMRandomPatcher: ... def __enter__(self): ... for p in _patches: ... p.start() ... def __exit__(self, *args, **kwargs): ... for p in _patches: ... p.stop() ... ###(010)=[passed] Create client and server SPNEGOSSPs >>> from scapy.layers.ntlm import NTLM_NEGOTIATE >>> from scapy.layers.spnego import SPNEGO_negTokenInit, SPNEGO_negTokenResp, SPNEGO_Token, SPNEGO_negToken, SPNEGO_MechListMIC, SPNEGOSSP >>> >>> client = SPNEGOSSP([ ... NTLMSSP( ... UPN="User1", ... PASSWORD="Password1", ... ), ... ]) >>> server = SPNEGOSSP([ ... NTLMSSP( ... IDENTITIES={ ... "User1": MD4le("Password1"), ... }, ... NTLM_VALUES={ ... "NetbiosDomainName": "DOMAIN", ... "NetbiosComputerName": "WIN10", ... "DnsDomainName": "domain.local", ... "DnsComputerName": "WIN10.domain.local", ... "DnsTreeName": "domain.local", ... }, ... ) ... ]) ###(011)=[passed] GSS_Init_sec_context (negTokenInit: NTLM_NEGOTIATE) >>> clicontext, tok, negResult = client.GSS_Init_sec_context( ... None, ... req_flags=( ... GSS_C_FLAGS.GSS_C_MUTUAL_FLAG | ... GSS_C_FLAGS.GSS_C_INTEG_FLAG | ... GSS_C_FLAGS.GSS_C_CONF_FLAG ... ) ... ) >>> assert negResult == 1 >>> assert isinstance(tok, GSSAPI_BLOB) >>> tok = GSSAPI_BLOB(bytes(tok)) >>> assert tok.MechType.val == '1.3.6.1.5.5.2' >>> assert isinstance(tok.innerToken.token, SPNEGO_negTokenInit) >>> assert len(tok.innerToken.token.mechTypes) == 1 >>> assert tok.innerToken.token.mechTypes[0].oid == '1.3.6.1.4.1.311.2.2.10' >>> assert tok.innerToken.token.reqFlags is None >>> assert tok.innerToken.token.negHints is None >>> assert tok.innerToken.token.mechListMIC is None >>> assert tok.innerToken.token._mechListMIC is None >>> >>> ntlm_nego = tok.innerToken.token.mechToken.value >>> assert isinstance(ntlm_nego, NTLM_NEGOTIATE) >>> assert ntlm_nego.Payload == [] >>> assert ntlm_nego.MessageType == 1 >>> assert ntlm_nego.NegotiateFlags.NEGOTIATE_UNICODE and ntlm_nego.NegotiateFlags.NEGOTIATE_SIGN and ntlm_nego.NegotiateFlags.NEGOTIATE_KEY_EXCH >>> assert ntlm_nego.NegotiateFlags == 0xe2898235 >>> assert ntlm_nego.ProductMajorVersion == 10 >>> assert ntlm_nego.ProductMinorVersion == 0 >>> assert ntlm_nego.ProductBuild == 19041 >>> assert bytes(ntlm_nego) == b'NTLMSSP\x00\x01\x00\x00\x005\x82\x89\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00aJ\x00\x00\x00\x0f' ###(012)=[passed] GSS_Accept_sec_context (SPNEGO_negTokenResp: NTLM_NEGOTIATE->NTLM_CHALLENGE) >>> with NTLMRandomPatcher(): ... srvcontext, tok, negResult = server.GSS_Accept_sec_context(None, tok) ... >>> assert negResult == 1 >>> assert isinstance(tok, SPNEGO_negToken) >>> tok = SPNEGO_negToken(bytes(tok)) >>> assert isinstance(tok.token, SPNEGO_negTokenResp) >>> assert tok.token.negResult == 1 >>> assert tok.token.supportedMech.oid == '1.3.6.1.4.1.311.2.2.10' >>> assert isinstance(tok.token.responseToken, SPNEGO_Token) >>> assert tok.token.mechListMIC is None >>> >>> ntlm_chall = tok.token.responseToken.value >>> assert isinstance(ntlm_chall, NTLM_CHALLENGE) >>> assert ntlm_chall.NegotiateFlags == 0xe2898235 >>> assert ntlm_chall.getAv(2).Value == "DOMAIN" >>> assert ntlm_chall.getAv(1).Value == "WIN10" >>> assert ntlm_chall.getAv(4).Value == "domain.local" >>> assert ntlm_chall.getAv(3).Value == "WIN10.domain.local" >>> assert ntlm_chall.getAv(5).Value == "domain.local" >>> assert ntlm_chall.getAv(0) ###(013)=[passed] GSS_Init_sec_context (SPNEGO_negToken: NTLM_CHALLENGE->NTLM_AUTHENTICATE) >>> with NTLMRandomPatcher(): ... clicontext, tok, negResult = client.GSS_Init_sec_context(clicontext, tok) ... >>> assert isinstance(tok, SPNEGO_negToken) >>> tok = SPNEGO_negToken(bytes(tok)) >>> assert isinstance(tok.token, SPNEGO_negTokenResp) >>> assert tok.token.negResult is None >>> assert tok.token.supportedMech is None >>> assert isinstance(tok.token.mechListMIC, SPNEGO_MechListMIC) >>> sig = NTLMSSP_MESSAGE_SIGNATURE(tok.token.mechListMIC.value.val) >>> assert sig.Version == 1 >>> assert sig.SeqNum == 0 >>> assert isinstance(tok.token.responseToken, SPNEGO_Token) >>> >>> ntlm_auth = NTLM_Header(tok.token.responseToken.value.val) >>> assert isinstance(ntlm_auth, NTLM_AUTHENTICATE_V2) >>> assert ntlm_auth.NegotiateFlags == 0xe2898235 >>> assert ntlm_auth.UserName == "User1" >>> assert ntlm_auth.DomainName == "DOMAIN" >>> assert ntlm_auth.Workstation == "WIN10" >>> assert ntlm_chall.TargetInfo[:6] == ntlm_auth.NtChallengeResponse.AvPairs[:6] >>> assert ntlm_auth.NtChallengeResponse.TimeStamp == ntlm_chall.getAv(7).Value >>> assert ntlm_auth.NtChallengeResponse.getAv(6).Value == 2 >>> assert ntlm_auth.NtChallengeResponse.getAv(9).Value == "host/WIN10" ###(014)=[passed] GSS_Accept_sec_context (SPNEGO_negToken: NTLM_AUTHENTICATE->OK) >>> srvcontext, tok, negResult = server.GSS_Accept_sec_context(srvcontext, tok) >>> assert negResult == 0 # success :p >>> assert isinstance(tok, SPNEGO_negToken) >>> assert isinstance(tok.token, SPNEGO_negTokenResp) >>> assert tok.token.negResult == 0 >>> assert tok.token.supportedMech is None >>> assert tok.token.responseToken is None >>> assert isinstance(tok.token.mechListMIC, SPNEGO_MechListMIC) >>> sig = NTLMSSP_MESSAGE_SIGNATURE(tok.token.mechListMIC.value.val) >>> assert sig.Version == 1 >>> assert sig.SeqNum == 0 >>> >>> assert srvcontext.SessionKey == clicontext.SessionKey >>> assert clicontext.SessionKey == b"0000000000000000" ###(015)=[passed] GSS_WrapEx/GSS_UnwrapEx: client sends a encrypted payload >>> data_header = b"header" # signed but not encrypted >>> data = b"testAAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEE" # encrypted >>> >>> with NTLMRandomPatcher(): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> encrypted = _msgs[1].data >>> assert bytes(encrypted) == b'\x9c_\xe9\xf2D\xc3\xe9^\xcd\x939\xff\xac\xa8\x16Y7\xcb \x80mS\xee.3\x85\x90\xfe\xb1_l\xcc\xcc\x7fl\x1ae,\x8b\xb3\x1cK\xd7zT\x1b\xd4W9Z' >>> assert sig.Checksum == b'\x91\xca\x9d\x0c\x15\x1e\xc5"' >>> >>> decrypted = server.GSS_UnwrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(016)=[passed] GSS_WrapEx/GSS_UnwrapEx: server answers back >>> with NTLMRandomPatcher(): ... _msgs, sig = server.GSS_WrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> re_encrypted = _msgs[1].data >>> assert bytes(re_encrypted) == b'\x8f@s\x9c\xa5[\xd4\xee\xb6\x9b,\x96\xe6\x94\x8e\x8d\x1565\x81\xd0E\xe9WI\xd0\\\x80\x9fD\x1f\xee\xfb\xe5\xc6s\x0c+\t\xba,\xf1\xa2Zj\xd6\x0e\xe4C\x02' >>> assert sig.Checksum == b'\x11l/\xeaO\xb8\x08z' >>> >>> decrypted = client.GSS_UnwrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=re_encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(017)=[passed] GSS_WrapEx/GSS_UnwrapEx: client continues with seqnum 2 >>> with NTLMRandomPatcher(): ... _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) ... >>> encrypted = _msgs[1].data >>> assert bytes(encrypted) == b'\x96\xc2\xa8>\xa8\xc0\xb8\xc6\xb6\x8a\xe3\xc2\x84\x8a\xd4e\xeb?"s\xf9\x1drfC\xb9\xbe\xe8\x1e9\xfe\xa1\xa8^\xbe\x0e\x98\xb3]\xa0\x906\xf6`\xdfn\x88d_L' >>> assert sig.Checksum == b'\xc5t\xfa\xba\x1c\x9d-\xa1' >>> >>> assert sig.SeqNum == 2 >>> decrypted = server.GSS_UnwrapEx( ... srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... )[1].data >>> assert decrypted == data ###(018)=[passed] GSS_WrapEx/GSS_UnwrapEx: inject fault >>> _msgs, sig = client.GSS_WrapEx( ... clicontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=data) ... ] ... ) >>> encrypted = _msgs[1].data >>> assert encrypted != data >>> bad_data_header = data_header[:-3] + b"hey" >>> try: ... server.GSS_UnwrapEx(srvcontext, ... [ ... SSP.WRAP_MSG(conf_req_flag=False, sign=True, data=bad_data_header), ... SSP.WRAP_MSG(conf_req_flag=True, sign=True, data=encrypted), ... ], ... sig ... ) ... assert False, "No error was reported, but there should have been one" ... except ValueError: ... pass ... ###### ## GSSAPI - Verify real exchange ###### ###(019)=[passed] Real exchange - Parse token 0 from server >>> from scapy.layers.gssapi import GSSAPI_BLOB >>> >>> tok0 = GSSAPI_BLOB( ... b"\x60\x76\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x6c\x30\x6a\xa0\x3c" \ ... b"\x30\x3a\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x1e\x06\x09" \ ... b"\x2a\x86\x48\x82\xf7\x12\x01\x02\x02\x06\x09\x2a\x86\x48\x86\xf7" \ ... b"\x12\x01\x02\x02\x06\x0a\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x03" \ ... b"\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x0a\xa3\x2a\x30\x28" \ ... b"\xa0\x26\x1b\x24\x6e\x6f\x74\x5f\x64\x65\x66\x69\x6e\x65\x64\x5f" \ ... b"\x69\x6e\x5f\x52\x46\x43\x34\x31\x37\x38\x40\x70\x6c\x65\x61\x73" \ ... b"\x65\x5f\x69\x67\x6e\x6f\x72\x65") ###(020)=[passed] Real exchange - Create server SPNEGOSSP >>> from scapy.layers.ntlm import NTLM_NEGOTIATE, MD4le >>> from scapy.layers.spnego import SPNEGOSSP >>> >>> server = SPNEGOSSP( ... [ ... NTLMSSP( ... IDENTITIES={ ... "User1": MD4le("Password1!"), ... }, ... ), ... ], ... force_supported_mechtypes=tok0.innerToken.token.mechTypes ... ) ###(021)=[passed] Real exchange - Parse token 1 from client >>> tok1 = GSSAPI_BLOB( ... b"\x60\x48\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x3e\x30\x3c\xa0\x0e" \ ... b"\x30\x0c\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x0a\xa2\x2a" \ ... b"\x04\x28\x4e\x54\x4c\x4d\x53\x53\x50\x00\x01\x00\x00\x00\x97\x82" \ ... b"\x08\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ ... b"\x00\x00\x0a\x00\x61\x4a\x00\x00\x00\x0f") >>> >>> srvcontext, _, negResult = server.GSS_Accept_sec_context(None, tok1) >>> assert negResult == 1 ###(022)=[passed] Real exchange - Inject token 2 from server >>> tok2 = GSSAPI_BLOB( ... b"\xa1\x81\xca\x30\x81\xc7\xa0\x03\x0a\x01\x01\xa1\x0c\x06\x0a\x2b" \ ... b"\x06\x01\x04\x01\x82\x37\x02\x02\x0a\xa2\x81\xb1\x04\x81\xae\x4e" \ ... b"\x54\x4c\x4d\x53\x53\x50\x00\x02\x00\x00\x00\x0c\x00\x0c\x00\x38" \ ... b"\x00\x00\x00\x15\x82\x89\xe2\xdd\x92\xcd\x56\xcf\x74\xc6\x03\x00" \ ... b"\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x6a\x00\x44\x00\x00\x00\x0a" \ ... b"\x00\x63\x45\x00\x00\x00\x0f\x44\x00\x4f\x00\x4d\x00\x41\x00\x49" \ ... b"\x00\x4e\x00\x02\x00\x0c\x00\x44\x00\x4f\x00\x4d\x00\x41\x00\x49" \ ... b"\x00\x4e\x00\x01\x00\x06\x00\x44\x00\x43\x00\x31\x00\x04\x00\x18" \ ... b"\x00\x64\x00\x6f\x00\x6d\x00\x61\x00\x69\x00\x6e\x00\x2e\x00\x6c" \ ... b"\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x03\x00\x20\x00\x44\x00\x43" \ ... b"\x00\x31\x00\x2e\x00\x64\x00\x6f\x00\x6d\x00\x61\x00\x69\x00\x6e" \ ... b"\x00\x2e\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x07\x00\x08" \ ... b"\x00\x02\xea\x8e\xe8\xd2\x8d\xd9\x01\x00\x00\x00\x00") >>> >>> tok2.token.responseToken.value.show() ###[ NTLM Challenge ]### Signature = b'NTLMSSP' MessageType= CHALLENGE_MESSAGE TargetNameLen= 12 TargetNameMaxLen= 12 TargetNameBufferOffset= 56 NegotiateFlags= NEGOTIATE_UNICODE+REQUEST_TARGET+NEGOTIATE_SIGN+NEGOTIATE_NTLM+NEGOTIATE_ALWAYS_SIGN+TARGET_TYPE_DOMAIN+NEGOTIATE_EXTENDED_SESSIONSECURITY+NEGOTIATE_TARGET_INFO+NEGOTIATE_VERSION+NEGOTIATE_128+NEGOTIATE_KEY_EXCH+NEGOTIATE_56 ServerChallenge= dd92cd56cf74c603 Reserved = 0000000000000000 TargetInfoLen= 106 TargetInfoMaxLen= 106 TargetInfoBufferOffset= 68 ProductMajorVersion= 10 ProductMinorVersion= 0 ProductBuild= 17763 res_ver = 0 NTLMRevisionCurrent= v15 Payload = TargetName= DOMAIN \TargetInfo\ |###[ NTLM AV Pair ]### | AvId = MsvAvNbDomainName | AvLen = 12 | Value = DOMAIN |###[ NTLM AV Pair ]### | AvId = MsvAvNbComputerName | AvLen = 6 | Value = DC1 |###[ NTLM AV Pair ]### | AvId = MsvAvDnsDomainName | AvLen = 24 | Value = domain.local |###[ NTLM AV Pair ]### | AvId = MsvAvDnsComputerName | AvLen = 32 | Value = DC1.domain.local |###[ NTLM AV Pair ]### | AvId = MsvAvTimestamp | AvLen = 8 | Value = Wed, 24 May 2023 00:01:36 (1684886496) |###[ NTLM AV Pair ]### | AvId = MsvAvEOL | AvLen = 0 | Value = >>> >>> srvcontext.sub_context.chall_tok = tok2.token.responseToken.value ###(023)=[passed] Real exchange - Parse token 3 from client >>> tok3 = GSSAPI_BLOB( ... b"\xa1\x82\x01\xd7\x30\x82\x01\xd3\xa0\x03\x0a\x01\x01\xa2\x82\x01" \ ... b"\xb6\x04\x82\x01\xb2\x4e\x54\x4c\x4d\x53\x53\x50\x00\x03\x00\x00" \ ... b"\x00\x18\x00\x18\x00\x78\x00\x00\x00\x12\x01\x12\x01\x90\x00\x00" \ ... b"\x00\x0c\x00\x0c\x00\x58\x00\x00\x00\x0a\x00\x0a\x00\x64\x00\x00" \ ... b"\x00\x0a\x00\x0a\x00\x6e\x00\x00\x00\x10\x00\x10\x00\xa2\x01\x00" \ ... b"\x00\x15\x82\x88\xe2\x0a\x00\x61\x4a\x00\x00\x00\x0f\x6c\xf5\x94" \ ... b"\xd3\x4b\x59\x37\x72\x4a\x63\xe0\xb8\xf1\x2e\xf7\x39\x44\x00\x4f" \ ... b"\x00\x4d\x00\x41\x00\x49\x00\x4e\x00\x55\x00\x73\x00\x65\x00\x72" \ ... b"\x00\x31\x00\x57\x00\x49\x00\x4e\x00\x31\x00\x30\x00\x00\x00\x00" \ ... b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ ... b"\x00\x00\x00\x00\x00\xd7\x44\x98\xd1\xdf\xdf\xd0\x5f\xaf\x33\xbe" \ ... b"\x69\x12\xdf\x7f\x6d\x01\x01\x00\x00\x00\x00\x00\x00\x02\xea\x8e" \ ... b"\xe8\xd2\x8d\xd9\x01\x24\x0a\x3b\xc1\x49\x92\xcc\x1e\x00\x00\x00" \ ... b"\x00\x02\x00\x0c\x00\x44\x00\x4f\x00\x4d\x00\x41\x00\x49\x00\x4e" \ ... b"\x00\x01\x00\x06\x00\x44\x00\x43\x00\x31\x00\x04\x00\x18\x00\x64" \ ... b"\x00\x6f\x00\x6d\x00\x61\x00\x69\x00\x6e\x00\x2e\x00\x6c\x00\x6f" \ ... b"\x00\x63\x00\x61\x00\x6c\x00\x03\x00\x20\x00\x44\x00\x43\x00\x31" \ ... b"\x00\x2e\x00\x64\x00\x6f\x00\x6d\x00\x61\x00\x69\x00\x6e\x00\x2e" \ ... b"\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x07\x00\x08\x00\x02" \ ... b"\xea\x8e\xe8\xd2\x8d\xd9\x01\x06\x00\x04\x00\x02\x00\x00\x00\x08" \ ... b"\x00\x30\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ ... b"\x20\x00\x00\xc5\xb6\xc9\x62\xcc\x25\x74\x2d\xc9\x64\xc0\xcb\x01" \ ... b"\xe8\xae\x03\x12\x56\xa9\xfa\x84\xcb\x37\xcd\xa6\xae\x6e\x5b\xe2" \ ... b"\x16\x52\xbb\x0a\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ ... b"\x00\x00\x00\x00\x00\x00\x00\x09\x00\x24\x00\x63\x00\x69\x00\x66" \ ... b"\x00\x73\x00\x2f\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36" \ ... b"\x00\x38\x00\x2e\x00\x30\x00\x2e\x00\x31\x00\x30\x00\x30\x00\x00" \ ... b"\x00\x00\x00\x00\x00\x00\x00\x2a\xdf\x42\x60\xc7\x4b\xac\x30\xa0" \ ... b"\x47\xdc\xcd\xb5\x5e\x13\x62\xa3\x12\x04\x10\x01\x00\x00\x00\x0f" \ ... b"\x96\x54\xbb\x55\xd0\x6c\xcb\x00\x00\x00\x00") >>> >>> srvcontext, tok, negResult = server.GSS_Accept_sec_context(srvcontext, tok3) >>> assert negResult == 0 ###(024)=[passed] Real exchange - Check mechListMIC against token 4 from server >>> tok4 = GSSAPI_BLOB( ... b"\xa1\x1b\x30\x19\xa0\x03\x0a\x01\x00\xa3\x12\x04\x10\x01\x00\x00" \ ... b"\x00\xe3\x39\x61\x56\xbc\x42\x23\xdc\x00\x00\x00\x00") >>> >>> tok.show() ###[ SPNEGO_negToken ]### \token \ |###[ SPNEGO_negTokenResp ]### | negResult = 0 | supportedMech= None | responseToken= None | \mechListMIC\ | |###[ SPNEGO_MechListMIC ]### | | value = >>> tok4.show() ###[ SPNEGO_negToken ]### \token \ |###[ SPNEGO_negTokenResp ]### | negResult = 'accept-completed' 0x0 | supportedMech= None | responseToken= None | \mechListMIC\ | |###[ SPNEGO_MechListMIC ]### | | value = >>> assert tok.token.mechListMIC == tok4.token.mechListMIC ###(025)=[passed] MISC - Dissect legacy formed NTLM messages >>> data = b'NTLMSSP\x00\x01\x00\x00\x00\x05\x02\x88\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> pkt = NTLM_Header(data) >>> assert pkt.WorkstationNameLen == 0 >>> assert pkt.ProductMajorVersion is None >>> >>> pkt.clear_cache() >>> assert bytes(pkt) == data >>> >>> >>> >>> data = b'NTLMSSP\x00\x03\x00\x00\x00\x18\x00\x18\x00d\x00\x00\x00\xb6\x00\xb6\x00|\x00\x00\x00\x08\x00\x08\x00@\x00\x00\x00\x10\x00\x10\x00H\x00\x00\x00\x0c\x00\x0c\x00X\x00\x00\x00\x00\x00\x00\x002\x01\x00\x005\x82\x89\x00C\x00O\x00U\x00S\x00B\x00A\x00N\x00A\x00N\x00A\x00N\x00A\x00G\x00O\x00U\x00R\x00D\x00E\x00\x91\xe9\xa2\xd8\xefE\xcd!2\xe8r\xae\x17*\xbfq\xbe8\x0b4\x90\x98\x12\x00s\x9e\x9e\xdc\nj(q\x1f\x84\xf8\xd3\x90e\xa7\xb3\x01\x01\x00\x00\x00\x00\x00\x00\x80\x8ax\xeeXc\xda\x01\xbe8\x0b4\x90\x98\x12W\x00\x00\x00\x00\x01\x00\x06\x00S\x00R\x00V\x00\x02\x00\x0c\x00D\x00O\x00M\x00A\x00I\x00N\x00\x03\x00 \x00s\x00r\x00v\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x04\x00\x18\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x05\x00\x18\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x07\x00\x08\x00\x90\xa8;}Qc\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00' >>> >>> pkt = NTLM_Header(data) >>> assert pkt.Workstation == "GOURDE" >>> assert pkt.DomainName == "COUS" >>> assert pkt.UserName == "BANANANA" >>> >>> pkt.clear_cache() >>> assert bytes(pkt) == data NTP regression tests for Scapy ━ Run at 04:12:32 from [test/scapy/layers/ntp.uts] by UTscapy in 0.4310038089752197 └ Passed=75 └ Failed=0 ###### ## Basic tests ###### ###(000)=[passed] specific haslayer and getlayer implementations for NTP >>> pkt = IP() / UDP() / NTPHeader() >>> assert NTP in pkt >>> assert pkt.haslayer(NTP) >>> assert isinstance(pkt[NTP], NTPHeader) >>> assert isinstance(pkt.getlayer(NTP), NTPHeader) ###### ## NTP module tests ###### ###(001)=[passed] NTP - Layers (1) >>> p = NTPHeader() >>> assert NTPHeader in p >>> assert not NTPControl in p >>> assert not NTPPrivate in p >>> assert NTP in p >>> assert p.mysummary() == "NTP v4, client" >>> ls(p) leap : BitEnumField = 0 ('0') version : BitField (3 bits) = 4 ('4') mode : BitEnumField = 3 ('3') stratum : BitField (8 bits) = 2 ('2') poll : SignedByteField = 10 ('10') precision : SignedByteField = 0 ('0') delay : FixedPointField (32 bits) = Decimal('0') ('0') dispersion : FixedPointField (32 bits) = Decimal('0') ('0') id : IPField (Cond) = '127.0.0.1' ("'127.0.0.1'") ref_id : StrFixedLenEnumField (Cond) = None ("b''") ref : TimeStampField (64 bits) = Decimal('0') ('0') orig : TimeStampField (64 bits) = None ('None') recv : TimeStampField (64 bits) = Decimal('0') ('0') sent : TimeStampField (64 bits) = None ('None') >>> >>> p = NTPControl() >>> assert not NTPHeader in p >>> assert NTPControl in p >>> assert not NTPPrivate in p >>> assert NTP in p >>> assert p.mysummary() == "NTP v2, NTP control message" >>> ls(p) leap : BitEnumField = 0 ('0') version : BitField (3 bits) = 2 ('2') mode : BitEnumField = 6 ('6') response : BitField (1 bit) = 0 ('0') err : BitField (1 bit) = 0 ('0') more : BitField (1 bit) = 0 ('0') op_code : BitEnumField = 0 ('0') sequence : ShortField = 0 ('0') status : MultipleTypeField (ShortField, NTPControlStatusField) = 0 ('\x1b[0m<\x1b[0m\x1b[31m\x1b[1mNTPSystemStatusPacket\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m') association_id : ShortField = 0 ('0') offset : ShortField = 0 ('0') count : FieldLenField = None ('None') data : MayEnd = b'' ('None') authenticator : PacketField = b'' ("b''") >>> >>> p = NTPPrivate() >>> assert not NTPHeader in p >>> assert not NTPControl in p >>> assert NTPPrivate in p >>> assert NTP in p >>> assert p.mysummary() == "NTP v2, reserved for private use" >>> ls(p) response : BitField (1 bit) = 0 ('0') more : BitField (1 bit) = 0 ('0') version : BitField (3 bits) = 2 ('2') mode : BitEnumField = 7 ('7') auth : BitField (1 bit) = 0 ('0') seq : BitField (7 bits) = 0 ('0') implementation : ByteEnumField = 0 ('0') request_code : ByteEnumField = 0 ('0') err : BitEnumField = 0 ('0') nb_items : BitField (12 bits) = 0 ('0') mbz : BitField (4 bits) = 0 ('0') data_item_size : BitField (12 bits) = 0 ('0') req_data : NTPPrivateReqPacketListField (Cond) = [] ('[]') data : NTPPrivateRespPacketListField (Cond) = None ('[]') authenticator : PacketField (Cond) = None ("b''") ###(002)=[passed] NTP - Layers (2) >>> p = NTPHeader() >>> assert type(p[NTP]) == NTPHeader >>> p = NTPControl() >>> assert type(p[NTP]) == NTPControl >>> p = NTPPrivate() >>> assert type(p[NTP]) == NTPPrivate ###(003)=[passed] NTP - sessions (1) >>> p = IP()/TCP()/NTP() >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 ###(004)=[passed] NTP - sessions (2) >>> p = IP()/UDP()/NTP() >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 ###### ## NTPHeader tests ###### ###(005)=[passed] NTPHeader - Basic checks >>> len(raw(NTP())) == 48 True ###(006)=[passed] NTPHeader - Dissection >>> s = b"!\x0b\x06\xea\x00\x00\x00\x00\x00\x00\xf2\xc1\x7f\x7f\x01\x00\xdb9\xe8\xa21\x02\xe6\xbc\xdb9\xe8\x81\x02U8\xef\xdb9\xe8\x80\xdcl+\x06\xdb9\xe8\xa91\xcbI\xbf\x00\x00\x00\x01\xady\xf3\xa1\xe5\xfc\xd02\xd2j\x1e'\xc3\xc1\xb6\x0e" >>> p = NTP(s) >>> assert isinstance(p, NTPHeader) >>> assert p[NTPAuthenticator].key_id == 1 >>> assert bytes_hex(p[NTPAuthenticator].dgst) == b'ad79f3a1e5fcd032d26a1e27c3c1b60e' ###(007)=[passed] NTPHeader - High precision >>> pkt = NTP(b'#\x02\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xe3\xaaz\xf7\xb4\x07\xaa\xea\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x0f+\xe2X>\xb8\x00') >>> assert NTP(raw(NTP(orig=pkt.orig))).orig == pkt.orig >>> assert str(pkt.orig) == '3819600631.703241999' ###(008)=[passed] NTPHeader - KoD >>> s = b'\xe4\x00\x06\xe8\x00\x00\x00\x00\x00\x00\x02\xcaINIT\x00\x00\x00\x00\x00\x00\x00\x00\xdb@\xe3\x9eH\xa3pj\xdb@\xe3\x9eH\xf0\xc3\\\xdb@\xe3\x9eH\xfaL\xac\x00\x00\x00\x01B\x86)\xc1Q4\x8bW8\xe7Q\xda\xd0Z\xbc\xb8' >>> p = NTP(s) >>> assert isinstance(p, NTPHeader) >>> assert p.leap == 3 >>> assert p.version == 4 >>> assert p.mode == 4 >>> assert p.stratum == 0 >>> assert p.ref_id == b'INIT' ###(009)=[passed] NTPHeader - Extension dissection test >>> s = b'#\x02\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xdbM\xdf\x19e\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdbM\xdf\x19e\x89\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPHeader) >>> assert p.leap == 0 >>> assert p.version == 4 >>> assert p.mode == 3 >>> assert p.stratum == 2 ###(010)=[passed] NTPAuthenticator >>> s = hex_bytes("000c2962f268d094666d23750800450000640db640004011a519c0a80364c0a80305a51e007b0050731a2300072000000000000000000000000000000000000000000000000000000000000000000000000052c7bc1dda64b97d0000000bcdc3825dbf6b7ad02886ff45aa8b2eaf7ac78bc1") >>> p = Ether(s) >>> assert NTPAuthenticator in p and p[NTPAuthenticator].key_id == 3452142173 ###### ## NTP Control (mode 6) tests ###### ###(011)=[passed] NTP Control (mode 6) - CTL_OP_READSTAT (1) - request >>> s = b'\x16\x01\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 1 >>> assert p.sequence == 12 >>> assert p.status == 0 >>> assert p.association_id == 0 >>> assert p.offset == 0 >>> assert p.count == 0 >>> assert p.data == b"" ###(012)=[passed] NTP Control (mode 6) - CTL_OP_READSTAT (2) - response >>> s = b'\x16\x81\x00\x0c\x06d\x00\x00\x00\x00\x00\x04\xe5\xfc\xf6$' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 1 >>> assert p.sequence == 12 >>> assert isinstance(p.status, NTPSystemStatusPacket) >>> assert p.status.leap_indicator == 0 >>> assert p.status.clock_source == 6 >>> assert p.status.system_event_counter == 6 >>> assert p.status.system_event_code == 4 >>> assert p.association_id == 0 >>> assert p.offset == 0 >>> assert p.count == 4 >>> assert isinstance(p.data[0], NTPPeerStatusDataPacket) >>> assert p.data[0].association_id == 58876 >>> assert isinstance(p.data[0].peer_status, NTPPeerStatusPacket) >>> assert p.data[0].peer_status.configured == 1 >>> assert p.data[0].peer_status.auth_enabled == 1 >>> assert p.data[0].peer_status.authentic == 1 >>> assert p.data[0].peer_status.reachability == 1 >>> assert p.data[0].peer_status.reserved == 0 >>> assert p.data[0].peer_status.peer_sel == 6 >>> assert p.data[0].peer_status.peer_event_counter == 2 >>> assert p.data[0].peer_status.peer_event_code == 4 ###(013)=[passed] NTP Control (mode 6) - CTL_OP_READSTAT (3) - multi >>> s = b'\x16\x81\x00\x0f\x00\x14\x00\x00\x00\x00\x008Et\x00\x11Es\x00\x11Er\x00\x11Eq\x00\x11Ep6\x1aEo4\x14En3\x14Em4\x14El4\x1aEk4\x14Ej\x88\x11Ei\x88\x11Eh\x88\x11Eg\x88\x11' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.response == 1 >>> assert isinstance(p.status, NTPSystemStatusPacket) >>> assert p.count == 56 >>> assert len(p.data) == 14 >>> assert all(isinstance(x, NTPPeerStatusDataPacket) for x in p.data) >>> assert p.data[0].association_id == 17780 >>> assert p.data[10].association_id == 17770 >>> assert p.data[13].association_id == 17767 >>> assert p.data[13].peer_status.peer_event_counter == 1 >>> assert not p.authenticator ###(014)=[passed] NTP Control (mode 6) - CTL_OP_READVAR (1) - request >>> s = b'\x16\x02\x00\x12\x00\x00\xfc\x8f\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.op_code == 2 >>> assert p.sequence == 18 >>> assert p.status == 0 >>> assert p.association_id == 64655 >>> assert p.data == b"" ###(015)=[passed] NTP Control (mode 6) - CTL_OP_READVAR (2) - response (1st packet) >>> s = b'\xd6\xa2\x00\x12\xc0\x11\xfc\x8f\x00\x00\x01\xd4srcadr=192.168.122.1, srcport=123, dstadr=192.168.122.100, dstport=123,\r\nleap=3, stratum=16, precision=-24, rootdelay=0.000, rootdisp=0.000,\r\nrefid=INIT, reftime=0x00000000.00000000, rec=0x00000000.00000000,\r\nreach=0x0, unreach=5, hmode=1, pmode=0, hpoll=6, ppoll=10, headway=62,\r\nflash=0x1200, keyid=1, offset=0.000, delay=0.000, dispersion=15937.500,\r\njitter=0.000, xleave=0.240,\r\nfiltdelay= 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00,\r\nfiltoffset= 0.00 0.00 0.00 0.00 ' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 1 >>> assert p.op_code == 2 >>> assert p.sequence == 18 >>> assert isinstance(p.status, NTPPeerStatusPacket) >>> assert p.status.configured == 1 >>> assert p.status.auth_enabled == 1 >>> assert p.status.authentic == 0 >>> assert p.status.reachability == 0 >>> assert p.status.peer_sel == 0 >>> assert p.status.peer_event_counter == 1 >>> assert p.status.peer_event_code == 1 >>> assert p.association_id == 64655 >>> assert p.offset == 0 >>> assert p.count == 468 >>> assert p.data == b'srcadr=192.168.122.1, srcport=123, dstadr=192.168.122.100, dstport=123,\r\nleap=3, stratum=16, precision=-24, rootdelay=0.000, rootdisp=0.000,\r\nrefid=INIT, reftime=0x00000000.00000000, rec=0x00000000.00000000,\r\nreach=0x0, unreach=5, hmode=1, pmode=0, hpoll=6, ppoll=10, headway=62,\r\nflash=0x1200, keyid=1, offset=0.000, delay=0.000, dispersion=15937.500,\r\njitter=0.000, xleave=0.240,\r\nfiltdelay= 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00,\r\nfiltoffset= 0.00 0.00 0.00 0.00 ' ###(016)=[passed] NTP Control (mode 6) - CTL_OP_READVAR (3) - response (2nd packet) >>> s = b'\xd6\x82\x00\x12\xc0\x11\xfc\x8f\x01\xd4\x00i0.00 0.00 0.00 0.00,\r\nfiltdisp= 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00\r\n' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 2 >>> assert p.sequence == 18 >>> assert isinstance(p.status, NTPPeerStatusPacket) >>> assert p.association_id == 64655 >>> assert p.offset == 468 >>> assert p.count == 105 >>> assert p.data == b'0.00 0.00 0.00 0.00,\r\nfiltdisp= 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00 16000.00\r\n' ###(017)=[passed] NTP Control (mode 6) - CTL_OP_READVAR (4) - request >>> s = b'\x16\x02\x00\x13\x00\x00s\xb5\x00\x00\x00\x0btest1,test2\x00\x00\x00\x00\x01=\xc2;\xc7\xed\xb9US9\xd6\x89\x08\xc8\xaf\xa6\x12' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 2 >>> assert p.data == b"test1,test2" >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'3dc23bc7edb9555339d68908c8afa612' ###(018)=[passed] NTP Control (mode 6) - CTL_OP_READVAR (5) - response >>> s = b'\xd6\xc2\x00\x13\x05\x00s\xb5\x00\x00\x00\x00\x00\x00\x00\x01\x97(\x02I\xdb\xa0s8\xedr(`\xdbJX\n' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 1 >>> assert p.more == 0 >>> assert p.op_code == 2 >>> assert not p.data >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'97280249dba07338ed722860db4a580a' ###(019)=[passed] NTP Control (mode 6) - CTL_OP_WRITEVAR (1) - request >>> s = b'\x16\x03\x00\x11\x00\x00\x00\x00\x00\x00\x00\x0btest1,test2\x00\x00\x00\x00\x01\xaf\xf1\x0c\xb4\xc9\x94m\xfcM\x90\tJ\xa1p\x94J' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 3 >>> assert p.data == b"test1,test2" >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'aff10cb4c9946dfc4d90094aa170944a' ###(020)=[passed] NTP Control (mode 6) - CTL_OP_WRITEVAR (2) - response >>> s = b'\xd6\xc3\x00\x11\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80z\x80\xfb\xaf\xc4pg\x98S\xa8\xe5xe\x81\x1c' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 1 >>> assert p.more == 0 >>> assert p.op_code == 3 >>> assert hasattr(p, 'status') >>> assert isinstance(p.status, NTPErrorStatusPacket) >>> assert p.status.error_code == 5 >>> assert not p.data >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'807a80fbafc470679853a8e57865811c' ###(021)=[passed] NTP Control (mode 6) - CTL_OP_CONFIGURE (1) - request >>> s = b'\x16\x08\x00\x16\x00\x00\x00\x00\x00\x00\x00\x0ccontrolkey 1\x00\x00\x00\x01\xea\xa7\xac\xa8\x1bj\x9c\xdbX\xe1S\r6\xfb\xef\xa4' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 8 >>> assert p.count == 12 >>> assert p.data == b'controlkey 1' >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'eaa7aca81b6a9cdb58e1530d36fbefa4' ###(022)=[passed] NTP Control (mode 6) - CTL_OP_CONFIGURE (2) - response >>> s = b'\xd6\x88\x00\x16\x00\x00\x00\x00\x00\x00\x00\x12Config Succeeded\r\n\x00\x00\x00\x00\x00\x01\xbf\xa6\xd8_\xf9m\x1e2l)<\xac\xee\xc2\xa59' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 8 >>> assert p.count == 18 >>> assert p.data == b'Config Succeeded\r\n' >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'bfa6d85ff96d1e326c293caceec2a539' ###(023)=[passed] NTP Control (mode 6) - CTL_OP_SAVECONFIG (1) - request >>> s = b'\x16\t\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x0fntp.test.2.conf\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc9\xfb\x8a\xbe<`_\xfa6\xd2\x18\xc3\xb7d\x89#' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 9 >>> assert p.count == 15 >>> assert p.data == b'ntp.test.2.conf' >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'c9fb8abe3c605ffa36d218c3b7648923' ###(024)=[passed] NTP Control (mode 6) - CTL_OP_SAVECONFIG (2) - response >>> s = b"\xd6\x89\x00\x1d\x00\x00\x00\x00\x00\x00\x00*Configuration saved to 'ntp.test.2.conf'\r\n\x00\x00\x00\x00\x00\x012\xc2\xbaY\xc53\xfe(\xf5P\xe5\xa0\x86\x02\x95\xd9" >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 9 >>> assert p.count == 42 >>> assert p.data == b"Configuration saved to 'ntp.test.2.conf'\r\n" >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'32c2ba59c533fe28f550e5a0860295d9' ###(025)=[passed] NTP Control (mode 6) - CTL_OP_REQ_NONCE (1) - request >>> s = b'\x16\x0c\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 12 >>> assert p.data == b'' >>> assert not p.authenticator ###(026)=[passed] NTP Control (mode 6) - CTL_OP_REQ_NONCE (2) - response >>> s = b'\xd6\x8c\x00\x07\x00\x00\x00\x00\x00\x00\x00 nonce=db4186a2e1d9022472e24bc9\r\n' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.more == 0 >>> assert p.op_code == 12 >>> assert p.data == b'nonce=db4186a2e1d9022472e24bc9\r\n' >>> assert not p.authenticator ###(027)=[passed] NTP Control (mode 6) - CTL_OP_READ_MRU (1) - request >>> s = b'\x16\n\x00\x08\x00\x00\x00\x00\x00\x00\x00(nonce=db4186a2e1d9022472e24bc9, frags=32' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 0 >>> assert p.err == 0 >>> assert p.op_code == 10 >>> assert p.count == 40 >>> assert p.data == b'nonce=db4186a2e1d9022472e24bc9, frags=32' >>> assert not p.authenticator ###(028)=[passed] NTP Control (mode 6) - CTL_OP_READ_MRU (2) - response >>> s = b'\xd6\x8a\x00\x08\x00\x00\x00\x00\x00\x00\x00\xe9nonce=db4186a2e2073198b93c6419, addr.0=192.168.122.100:123,\r\nfirst.0=0xdb418673.323e1a89, last.0=0xdb418673.323e1a89, ct.0=1,\r\nmv.0=36, rs.0=0x0, WWQ.0=18446744073709509383, now=0xdb4186a2.e20ff8f4,\r\nlast.newest=0xdb418673.323e1a89\r\n\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPControl) >>> assert p.version == 2 >>> assert p.mode == 6 >>> assert p.response == 1 >>> assert p.err == 0 >>> assert p.op_code == 10 >>> assert p.count == 233 >>> assert p.data == b'nonce=db4186a2e2073198b93c6419, addr.0=192.168.122.100:123,\r\nfirst.0=0xdb418673.323e1a89, last.0=0xdb418673.323e1a89, ct.0=1,\r\nmv.0=36, rs.0=0x0, WWQ.0=18446744073709509383, now=0xdb4186a2.e20ff8f4,\r\nlast.newest=0xdb418673.323e1a89\r\n' >>> assert not p.authenticator ###### ## NTP Private (mode 7) tests ###### ###(029)=[passed] NTP Private (mode 7) - error - Dissection >>> s = b'\x97\x00\x03\x1d@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 29 >>> assert p.err == 4 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(030)=[passed] NTP Private (mode 7) - REQ_PEER_LIST (1) - request >>> s = b'\x17\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 0 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(031)=[passed] NTP Private (mode 7) - REQ_PEER_LIST (2) - response >>> s = b'\x97\x00\x03\x00\x00\x01\x00 \x7f\x7f\x01\x00\x00{\x03\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 0 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 32 >>> assert type(p.data[0]) == NTPInfoPeerList >>> assert p.data[0].addr == "127.127.1.0" >>> assert p.data[0].port == 123 ###(032)=[passed] NTP Private (mode 7) - REQ_PEER_INFO (1) - request >>> s = b'\x17\x00\x03\x02\x00\x01\x00 \xc0\xa8zf\x00{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 2 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 32 >>> assert isinstance(p.req_data[0], NTPInfoPeerList) >>> assert p.req_data[0].addr == "192.168.122.102" >>> assert p.req_data[0].port == 123 ###(033)=[passed] NTP Private (mode 7) - REQ_PEER_INFO (2) - response >>> s = b'\x97\x00\x03\x02\x00\x01\x01\x18\xc0\xa8zf\xc0\xa8ze\x00{\x01\x03\x01\x00\x10\x06\n\xea\x04\x00\x00\xaf"\x00"\x16\x04\xb3\x01\x00\x00\x00\x00\x00\x00\x00INIT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x82\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb<\x8d\xc5\xde\x7fB\x89\xdb<\x8d\xc5\xde\x7fB\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 2 >>> assert isinstance(p.data[0], NTPInfoPeer) >>> repr(p.data[0]) '\x1b[0m<\x1b[0m\x1b[31m\x1b[1mNTPInfoPeer\x1b[0m \x1b[34mdstaddr\x1b[0m\x1b[0m=\x1b[0m\x1b[35m192.168.122.102\x1b[0m \x1b[34msrcaddr\x1b[0m\x1b[0m=\x1b[0m\x1b[35m192.168.122.101\x1b[0m \x1b[34msrcport\x1b[0m\x1b[0m=\x1b[0m\x1b[35m123\x1b[0m \x1b[34mflags\x1b[0m\x1b[0m=\x1b[0m\x1b[35mINFO_FLAG_CONFIG\x1b[0m \x1b[34mleap\x1b[0m\x1b[0m=\x1b[0m\x1b[35m3\x1b[0m \x1b[34mhmode\x1b[0m\x1b[0m=\x1b[0m\x1b[35msymmetric active\x1b[0m \x1b[34mpmode\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mstratum\x1b[0m\x1b[0m=\x1b[0m\x1b[35m16\x1b[0m \x1b[34mppoll\x1b[0m\x1b[0m=\x1b[0m\x1b[35m6\x1b[0m \x1b[34mhpoll\x1b[0m\x1b[0m=\x1b[0m\x1b[35m10\x1b[0m \x1b[34mprecision\x1b[0m\x1b[0m=\x1b[0m\x1b[35m-22\x1b[0m \x1b[34mversion\x1b[0m\x1b[0m=\x1b[0m\x1b[35m4\x1b[0m \x1b[34munused8\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mreach\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munreach\x1b[0m\x1b[0m=\x1b[0m\x1b[35m175\x1b[0m \x1b[34mflash\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0x22\x1b[0m \x1b[34mttl\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mflash2\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0x1622\x1b[0m \x1b[34massocid\x1b[0m\x1b[0m=\x1b[0m\x1b[35m1203\x1b[0m \x1b[34mkeyid\x1b[0m\x1b[0m=\x1b[0m\x1b[35m1\x1b[0m \x1b[34mpkeyid\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mrefid\x1b[0m\x1b[0m=\x1b[0m\x1b[35m73.78.73.84\x1b[0m \x1b[34mtimer\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mrootdelay\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mrootdispersion\x1b[0m\x1b[0m=\x1b[0m\x1b[35m1.5102\x1b[0m \x1b[34mreftime\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34morg\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mrec\x1b[0m\x1b[0m=\x1b[0m\x1b[35mFri, 22 Jul 2016 12:19:17 +0000\x1b[0m \x1b[34mxmt\x1b[0m\x1b[0m=\x1b[0m\x1b[35mFri, 22 Jul 2016 12:19:17 +0000\x1b[0m \x1b[34mfiltdelay\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[0, 0, 0, 0, 0, 0, 0, 0]\x1b[0m \x1b[34mfiltoffset\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[0, 0, 0, 0, 0, 0, 0, 0]\x1b[0m \x1b[34morder\x1b[0m\x1b[0m=\x1b[0m\x1b[35m[0, 1, 2, 3, 4, 5, 6, 7]\x1b[0m \x1b[34mdelay\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mdispersion\x1b[0m\x1b[0m=\x1b[0m\x1b[35m3.9922\x1b[0m \x1b[34moffset\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mselectdisp\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused1\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused2\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused3\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused4\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused5\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused6\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused7\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mestbdelay\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mv6_flag\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34munused9\x1b[0m\x1b[0m=\x1b[0m\x1b[35m0\x1b[0m \x1b[34mdstaddr6\x1b[0m\x1b[0m=\x1b[0m\x1b[35m::\x1b[0m \x1b[34msrcaddr6\x1b[0m\x1b[0m=\x1b[0m\x1b[35m::\x1b[0m \x1b[0m|\x1b[0m\x1b[0m>\x1b[0m' >>> assert p.data[0].dstaddr == "192.168.122.102" >>> assert p.data[0].srcaddr == "192.168.122.101" >>> assert p.data[0].srcport == 123 >>> assert p.data[0].associd == 1203 >>> assert p.data[0].keyid == 1 ###(034)=[passed] NTP Private (mode 7) - REQ_PEER_LIST_SUM (1) - request >>> s = b'\x17\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 1 ###(035)=[passed] NTP Private (mode 7) - REQ_PEER_LIST_SUM (2) - response (1st packet) >>> s = b'\xd7\x00\x03\x01\x00\x06\x00H\n\x00\x02\x0f\xc0\x00\x02\x01\x00{\x10\x06\n\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x02\x0f\xc0\x00\x02\x02\x00{\x10\x06\n\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x01\x02\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x02\x0f\xc0\xa8d\x01\x00{\x10\x07\n\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth0\xc0\xa8zg\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x02\x0f\xc0\xa8d\x02\x00{\x10\x07\n\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x02\xc0\xa8zh\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\n\x00\x02\x0f\xc0\xa8d\r\x00{\x10\x07\n\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8zk\x00{\x01\x01\xc0\xa8ze\xc0\xa8zf\x00{\x0b\x06\x07\xf4\x83\x01\x00\x00\x07\x89\x00\x00\x00\x007\xb1\x00h\x00\x00o?\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8zm\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 1 >>> assert (isinstance(x, NTPInfoPeerSummary) for x in p.data) >>> assert p.data[0].srcaddr == "192.0.2.1" ###(036)=[passed] NTP Private (mode 7) - REQ_PEER_LIST_SUM (3) - response (2nd packet) >>> s = b'\xd7\x01\x03\x01\x00\x06\x00H\xc0\xa8ze\xc0\xa8zg\x00{\x10\x08\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8ze\xc0\xa8zg\x00{\x10\x08\n\x00\x11\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x01\x02\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8ze\xc0\xa8zh\x00{\x10\x08\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth0\xc0\xa8zg\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8ze\xc0\xa8zi\x00{\x10\x07\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x02\xc0\xa8zh\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xc0\xa8ze\xc0\xa8zj\x00{\x10\x07\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8zk\x00{\x01\x01\xc0\xa8ze\xc0\xa8zk\x00{\x10\x07\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8zm\x00{\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 1 >>> assert (isinstance(x, NTPInfoPeerSummary) for x in p.data) >>> assert p.data[0].srcaddr == "192.168.122.103" ###(037)=[passed] NTP Private (mode 7) - REQ_PEER_LIST_SUM (3) - response (3rd packet) >>> s = b'\x97\x02\x03\x01\x00\x02\x00H\xc0\xa8ze\xc0\xa8zl\x00{\x10\x07\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8ze\xc0\xa8zm\x00{\x10\x07\n\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfd\xff\x00\x00\x00\x00\x00\x00\x01\x02\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 1 >>> assert (isinstance(x, NTPInfoPeerSummary) for x in p.data) >>> assert p.data[0].srcaddr == "192.168.122.108" ###(038)=[passed] NTP Private (mode 7) - REQ_PEER_STATS (1) - request >>> s = b'\x17\x00\x03\x03\x00\x01\x00 \xc0\xa8ze\x00{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 3 >>> assert isinstance(p.req_data[0], NTPInfoPeerList) ###(039)=[passed] NTP Private (mode 7) - REQ_PEER_STATS (2) - response >>> s = b'\x97\x00\x03\x03\x00\x01\x00x\xc0\xa8zf\xc0\xa8ze\x00{\x00\x01\x01\x00\x10\x06\x00\x00\x00)\x00\x00\x00\x1e\x00\x02\xda|\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x0b\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x07\x00\x00\x00\x00\xde\x7fB\x89\x00<\x8d\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 3 >>> assert (isinstance(x, NTPInfoPeerStats) for x in p.data) ###(040)=[passed] NTP Private (mode 7) - REQ_SYS_INFO (1) - request >>> s = b'\x17\x00\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 4 ###(041)=[passed] NTP Private (mode 7) - REQ_SYS_INFO (2) - response >>> s = b'\x97\x00\x03\x04\x00\x01\x00P\x7f\x7f\x01\x00\x03\x00\x0b\xf0\x00\x00\x00\x00\x00\x00\x03\x06\x7f\x7f\x01\x00\xdb<\xca\xf3\xa1\x92\xe1\xf7\x06\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x07\x00\x00\x00\x00\xde\x7fB\x89\x00<\x8d\xc5' >>> p = NTP(s) >>> >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 4 >>> assert isinstance(p.data[0], NTPInfoSys) >>> assert p.data[0].peer == "127.127.1.0" >>> assert p.data[0].peer_mode == 3 >>> assert p.data[0].leap == 0 >>> assert p.data[0].stratum == 11 >>> assert p.data[0].precision == -16 >>> assert p.data[0].refid == "127.127.1.0" ###(042)=[passed] NTP Private (mode 7) - REQ_SYS_STATS (1) - request >>> s = b'\x17\x00\x03\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 5 ###(043)=[passed] NTP Private (mode 7) - REQ_SYS_STATS (2) - response >>> s = b'\x97\x00\x03\x05\x00\x01\x00,\x00\x02\xe2;\x00\x02\xe2;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b%\x00\x00\x00\x00\x00\x00\x0b=\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 5 >>> assert isinstance(p.data[0], NTPInfoSysStats) >>> assert p.data[0].timeup == 188987 >>> assert p.data[0].received == 2877 ###(044)=[passed] NTP Private (mode 7) - REQ_IO_STATS (1) - request >>> s = b'\x17\x00\x03\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 6 ###(045)=[passed] NTP Private (mode 7) - REQ_IO_STATS (2) - response >>> s = b'\x97\x00\x03\x06\x00\x01\x00(\x00\x00\x03\x04\x00\n\x00\t\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00J\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00J\x00\x00\x00J' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 6 >>> assert p.data[0].timereset == 772 >>> assert p.data[0].sent == 217 ###(046)=[passed] NTP Private (mode 7) - REQ_MEM_STATS (1) - request >>> s = b'\x17\x00\x03\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 7 ###(047)=[passed] NTP Private (mode 7) - REQ_MEM_STATS (2) - response >>> s = b'\x97\x00\x03\x07\x00\x01\x00\x94\x00\x00\n\xee\x00\x0f\x00\r\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 7 >>> assert p.data[0].timereset == 2798 >>> assert p.data[0].totalpeermem == 15 >>> assert p.data[0].freepeermem == 13 >>> assert p.data[0].findpeer_calls == 60 >>> assert p.data[0].hashcount[25] == 1 and p.data[0].hashcount[89] == 1 ###(048)=[passed] NTP Private (mode 7) - REQ_LOOP_INFO (1) - request >>> s = b'\x17\x00\x03\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 8 ###(049)=[passed] NTP Private (mode 7) - REQ_LOOP_INFO (2) - response >>> s = b'\x97\x00\x03\x08\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x04' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 8 >>> assert p.data[0].last_offset == 0.0 >>> assert p.data[0].watchdog_timer == 4 ###(050)=[passed] NTP Private (mode 7) - REQ_TIMER_STATS (1) - request >>> s = b'\x17\x00\x03\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 9 ###(051)=[passed] NTP Private (mode 7) - REQ_TIMER_STATS (2) - response >>> s = b'\x97\x00\x03\t\x00\x01\x00\x10\x00\x00\x01h\x00\x00\x01h\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 9 >>> assert p.data[0].timereset == 360 >>> assert p.data[0].alarms == 360 ###(052)=[passed] NTP Private (mode 7) - REQ_CONFIG (1) - request >>> s = b'\x17\x80\x03\n\x00\x01\x00\xa8\xc0\xa8zm\x01\x03\x06\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xec\x93\xb1\xa8\xa0a\x00\x00\x00\x01Z\xba\xfe\x01\x1cr\x05d\xa1\x14\xb1)\xe9vD\x8d' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 10 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 168 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfPeer) >>> assert p.req_data[0].peeraddr == "192.168.122.109" >>> assert p.req_data[0].hmode == 1 >>> assert p.req_data[0].version == 3 >>> assert p.req_data[0].minpoll == 6 >>> assert p.req_data[0].maxpoll == 10 >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'5abafe011c720564a114b129e976448d' ###(053)=[passed] NTP Private (mode 7) - REQ_CONFIG (2) - response >>> s = b'\x97\x00\x03\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 10 >>> assert p.err == 0 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(054)=[passed] NTP Private (mode 7) - REQ_UNCONFIG (1) - request >>> s = b'\x17\x80\x03\x0b\x00\x01\x00\x18\xc0\xa8zk\x00\x00\x00\x00X\x88P\xb1\xff\x7f\x00\x008\x88P\xb1\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xf0\x1bq\xc8\xe5\xa6\x00\x00\x00\x01\x1dM;\xfeZ~]Z\xe3Ea\x92\x9aE\xd8%' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 11 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 24 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfUnpeer) >>> assert p.req_data[0].peeraddr == "192.168.122.107" >>> assert p.req_data[0].v6_flag == 0 >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'1d4d3bfe5a7e5d5ae34561929a45d825' ###(055)=[passed] NTP Private (mode 7) - REQ_UNCONFIG (2) - response >>> s = b'\x97\x00\x03\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 11 >>> assert p.err == 0 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(056)=[passed] NTP Private (mode 7) - REQ_RESADDFLAGS (1) - request >>> s = b'\x17\x80\x03\x11\x00\x01\x000\xc0\xa8zi\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xf0V\xa9"\xe6_\x00\x00\x00\x01>=\xb70Tp\xee\xae\xe1\xad4b\xef\xe3\x80\xc8' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 17 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 48 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfRestrict) >>> assert p.req_data[0].addr == "192.168.122.105" >>> assert p.req_data[0].mask == "255.255.255.255" >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'3e3db7305470eeaee1ad3462efe380c8' ###(057)=[passed] NTP Private (mode 7) - REQ_RESSUBFLAGS (1) - request >>> s = b'\x17\x80\x03\x12\x00\x01\x000\xc0\xa8zi\xff\xff\xff\xff\x00\x10\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xf0F\xe0C\xa9@\x00\x00\x00\x01>e\r\xdf\xdb\x1e1h\xd0\xca)L\x07k\x90\n' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 18 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 48 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfRestrict) >>> assert p.req_data[0].addr == "192.168.122.105" >>> assert p.req_data[0].mask == "255.255.255.255" >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'3e650ddfdb1e3168d0ca294c076b900a' ###(058)=[passed] NTP Private (mode 7) - REQ_RESET_PEER (1) - request >>> s = b"\x17\x80\x03\x16\x00\x01\x00\x18\xc0\xa8zf\x00\x00\x00\x00X\x88P\xb1\xff\x7f\x00\x008\x88P\xb1\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xef!\x99\x88\xa3\xf1\x00\x00\x00\x01\xb1\xff\xe8\xefB=\xa9\x96\xdc\xe3\x13'\xb3\xfc\xc2\xf5" >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 22 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 24 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfUnpeer) >>> assert p.req_data[0].peeraddr == "192.168.122.102" >>> assert p.req_data[0].v6_flag == 0 ###(059)=[passed] NTP Private (mode 7) - REQ_AUTHINFO (1) - response >>> s = b'\x97\x00\x03\x1c\x00\x01\x00$\x00\x00\x01\xdd\x00\x00\x00\x02\x00\x00\x00\n\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00/\x00\x00\x00\x00\x00\x00\x00\x01' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 28 >>> assert p.err == 0 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 36 >>> assert hasattr(p, 'data') >>> assert isinstance(p.data[0], NTPInfoAuth) >>> assert p.data[0].timereset == 477 >>> assert p.data[0].numkeys == 2 >>> assert p.data[0].numfreekeys == 10 >>> assert p.data[0].keylookups == 96 >>> assert p.data[0].keynotfound == 0 >>> assert p.data[0].encryptions == 9 >>> assert p.data[0].decryptions == 47 >>> assert p.data[0].expired == 0 >>> assert p.data[0].keyuncached == 1 ###(060)=[passed] NTP Private (mode 7) - REQ_ADD_TRAP (1) - request >>> s = b'\x17\x80\x03\x1e\x00\x01\x000\x00\x00\x00\x00\xc0\x00\x02\x03H\x0f\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xedB\xdd\xda\x7f\x97\x00\x00\x00\x01b$\xb8IM.\xa61\xd0\x85I\x8f\xa7\'\x89\x92' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 1 >>> assert p.request_code == 30 >>> assert p.err == 0 >>> assert p.nb_items == 1 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfTrap) >>> assert p.req_data[0].trap_address == '192.0.2.3' >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'6224b8494d2ea631d085498fa7278992' ###(061)=[passed] NTP Private (mode 7) - REQ_ADD_TRAP (2) - response >>> s = b'\x97\x00\x03\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 30 >>> assert p.err == 0 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(062)=[passed] NTP Private (mode 7) - REQ_CLR_TRAP (1) - request >>> s = b'\x17\x80\x03\x1f\x00\x01\x000\x00\x00\x00\x00\xc0\x00\x02\x03H\x0f\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xedb\xb3\x18\x1c\x00\x00\x00\x00\x01\xa5_V\x9e\xb8qD\x92\x1b\x1c>Z\xad]*\x89' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 1 >>> assert p.request_code == 31 >>> assert p.err == 0 >>> assert p.nb_items == 1 >>> assert hasattr(p, 'req_data') >>> assert isinstance(p.req_data[0], NTPConfTrap) >>> assert p.req_data[0].trap_address == '192.0.2.3' >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'a55f569eb87144921b1c3e5aad5d2a89' ###(063)=[passed] NTP Private (mode 7) - REQ_CLR_TRAP (2) - response >>> s = b'\x97\x00\x03\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 31 >>> assert p.err == 0 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(064)=[passed] NTP Private (mode 7) - REQ_GET_CTLSTATS - response >>> s = b'\x97\x00\x03"\x00\x01\x00<\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 34 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 60 >>> assert type(p.data[0]) == NTPInfoControl >>> assert p.data[0].ctltimereset == 237 ###(065)=[passed] NTP Private (mode 7) - REQ_GET_KERNEL (1) - request >>> s = b'\x17\x00\x03&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 38 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(066)=[passed] NTP Private (mode 7) - REQ_GET_KERNEL (2) - response >>> s = b'\x97\x00\x03&\x00\x01\x00<\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4$\x00\x00\xf4$\x00 A\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x01\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 38 >>> assert p.nb_items == 1 >>> assert p.data_item_size == 60 >>> assert isinstance(p.data[0], NTPInfoKernel) >>> assert p.data[0].maxerror == 16000000 >>> assert p.data[0].esterror == 16000000 >>> assert p.data[0].status == 8257 >>> assert p.data[0].constant == 3 >>> assert p.data[0].precision == 1 >>> assert p.data[0].tolerance == 32768000 ###(067)=[passed] NTP Private (mode 7) - REQ_MON_GETLIST_1 (1) - request >>> s = b'\x17\x00\x03*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 42 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 ###(068)=[passed] NTP Private (mode 7) - REQ_MON_GETLIST_1 (2) - response >>> s = b'\xd7\x00\x03*\x00\x06\x00H\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\x94mw\xe9\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\x13\xb6\xa9J\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\xbb]\x81\xea\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\xfc\xbf\xd5a\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\xbe\x10x\xa8\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;\x00\x00\x00;\x00\x00\x01\xd0\x00\x00\x00\x01\xde[ng\xc0\xa8zg\x00\x00\x00\x01\x00{\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.request_code == 42 >>> assert p.nb_items == 6 >>> assert p.data_item_size == 72 ###(069)=[passed] NTP Private (mode 7) - REQ_IF_STATS (1) - request >>> s = b'\x17\x80\x03,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xeb\xdd\x8cH\xefe\x00\x00\x00\x01\x8b\xfb\x90u\xa8ad\xe8\x87\xca\xbf\x96\xd2\x9d\xddI' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 1 >>> assert p.request_code == 44 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'8bfb9075a86164e887cabf96d29ddd49' ###(070)=[passed] NTP Private (mode 7) - REQ_IF_STATS (2) - response >>> s = b"\xd7\x00\x03,\x00\x03\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x01lo\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x00\x00\n\x00\x01\x00\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\n\x00'\xff\xfe\xe3\x81r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x00\x00\n\x00\x01\x00\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\n\x00'\xff\xfe\xa0\x1d\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01eth1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x05\x00\x00\x00\x00\x00\n\x00\x01\x00\x00\x00\x00" >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 44 >>> assert p.err == 0 >>> assert p.nb_items == 3 >>> assert p.data_item_size == 136 >>> assert isinstance(p.data[0], NTPInfoIfStatsIPv6) >>> assert p.data[0].unaddr == "::1" >>> assert p.data[0].unmask == "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" >>> assert p.data[0].ifname.startswith(b"lo") ###(071)=[passed] NTP Private (mode 7) - REQ_IF_STATS (3) - response >>> s = b'\xd7\x01\x03,\x00\x03\x00\x88\xc0\xa8ze\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8z\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00eth1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x02\x00\x01\x00\x00\x00\x00\n\x00\x02\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x02\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00eth0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00lo\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 44 >>> assert p.err == 0 >>> assert p.nb_items == 3 >>> assert p.data_item_size == 136 >>> assert isinstance(p.data[0], NTPInfoIfStatsIPv4) >>> assert p.data[0].unaddr == "192.168.122.101" >>> assert p.data[0].unmask == "255.255.255.0" >>> assert p.data[0].ifname.startswith(b"eth1") ###(072)=[passed] NTP Private (mode 7) - REQ_IF_RELOAD (1) - request >>> s = b'\x17\x80\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb9\xed\xa3\xdc\x7f\xc6\x11\x00\x00\x00\x01\xfb>\x96*\xe7O\xf7\x8feh\xd4\x07L\xc0\x08\xcb' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 0 >>> assert p.more == 0 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 1 >>> assert p.request_code == 45 >>> assert p.nb_items == 0 >>> assert p.data_item_size == 0 >>> assert hasattr(p, 'authenticator') >>> assert p.authenticator.key_id == 1 >>> assert bytes_hex(p.authenticator.dgst) == b'fb3e962ae74ff78f6568d4074cc008cb' ###(073)=[passed] NTP Private (mode 7) - REQ_IF_RELOAD (2) - response >>> s = b'\xd7\x00\x03-\x00\x03\x00\x88\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00lo\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\n\x00\x02\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x02\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00eth0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x05\x00\x02\x00\x01\x00\x00\x00\x00\xc0\xa8ze\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8z\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00eth1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=\x00\x00\x00}\x00\x00\x00\x00\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\t\x00\x02\x00\x01\x00\x00\x00\x00' >>> p = NTP(s) >>> assert isinstance(p, NTPPrivate) >>> assert p.response == 1 >>> assert p.more == 1 >>> assert p.version == 2 >>> assert p.mode == 7 >>> assert p.auth == 0 >>> assert p.request_code == 45 >>> assert p.err == 0 >>> assert p.nb_items == 3 >>> assert p.data_item_size == 136 >>> assert isinstance(p.data[0], NTPInfoIfStatsIPv4) >>> assert p.data[0].unaddr == "127.0.0.1" >>> assert p.data[0].unmask == "255.0.0.0" >>> assert p.data[0].ifname.startswith(b"lo") ###### ## RawVal tests ###### ###(074)=[passed] Build an NTP packet using RawVal >>> from decimal import Decimal >>> >>> precision = b"\xec" # -20 >>> dispersion = b"\x00\x00\xf2\xce" # 0.948455810546875 >>> time_stamp = b"\xe6}gt\x00\x00\x00\x00" # Sat, 16 Jul 2022 16:36:04 +0000 >>> >>> pkt_1 = NTP( ... precision=RawVal(precision), ... dispersion=RawVal(dispersion), ... orig=RawVal(time_stamp), ... sent=RawVal(time_stamp), ... ) >>> >>> pkt_1.recv = RawVal(time_stamp) >>> >>> assert (isinstance(pkt_1.precision, RawVal)), type(pkt_1.precision) >>> assert (isinstance(pkt_1.dispersion, RawVal)), type(pkt_1.dispersion) >>> assert (isinstance(pkt_1.orig, RawVal)), type(pkt_1.orig) >>> assert (isinstance(pkt_1.sent, RawVal)), type(pkt_1.sent) >>> assert (isinstance(pkt_1.recv, RawVal)), type(pkt_1.recv) >>> >>> assert pkt_1.precision.val == precision, pkt_1.precision.val >>> assert pkt_1.dispersion.val == dispersion, pkt_1.dispersion.val >>> assert pkt_1.orig.val == time_stamp, pkt_1.orig.val >>> assert pkt_1.sent.val == time_stamp, pkt_1.sent.val >>> assert pkt_1.recv.val == time_stamp, pkt_1.recv.val >>> >>> time_stamp_hex = 0x00000000e67d6774 >>> pkt_2 = NTP( ... precision=-20, ... dispersion=Decimal('0.948455810546875'), ... orig=time_stamp_hex, ... sent=time_stamp_hex, ... recv=time_stamp_hex ... ) >>> >>> raw_pkt = (b"#\x02\n\xec\x00\x00\x00\x00\x00\x00\xf2\xce\x7f\x00\x00\x01\x00" ... b"\x00\x00\x00\x00\x00\x00\x00\xe6}gt\x00\x00\x00\x00\xe6}gt\x00" ... b"\x00\x00\x00\xe6}gt\x00\x00\x00\x00") >>> >>> assert raw(pkt_1) == raw(pkt_2) == raw_pkt Regression tests for the PFLog layer ━ Run at 04:12:32 from [test/scapy/layers/pflog.uts] by UTscapy in 0.05761313438415527 └ Passed=9 └ Failed=0 ###### ## Multiple operations of PFLog packets dissections ###### ###(000)=[passed] Load module >>> load_layer("pflog") >>> from io import BytesIO ###(001)=[passed] Dissect PFLog packet of a IP()/TCP() dropped packet >>> pcap_pflog_tcp = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00\x89*\xce_}\xcf\x07\x00\xa4\x00\x00\x00\xa4\x00\x00\x00d\x02\x01\x00vio0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\x84S\x01\x00\x01\x00\x02\x00\n\xc8\xc8\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xc8\xc8\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xbd\x00\x17E\x00\x00@c\xae@\x00@\x06/\xe1\n\xc8\xc8\xfe\n\xc8\xc8\x9a\xa3\xbd\x00\x17\xc8\xc9\xd9\xf2\x00\x00\x00\x00\xb0\x02@\x00.l\x00\x00\x02\x04\x05\xb4\x01\x01\x04\x02\x01\x03\x03\x06\x01\x01\x08\n\x86\xb8S\x1c\x00\x00\x00\x00') >>> pflog_tcp_packets = rdpcap(pcap_pflog_tcp) >>> assert pflog_tcp_packets[0][PFLog].hdrlen == 100 >>> assert pflog_tcp_packets[0][PFLog].addrfamily == 2 # IPv4 >>> assert pflog_tcp_packets[0][PFLog].action == 1 # drop >>> assert pflog_tcp_packets[0][PFLog].saddr == '10.200.200.254' >>> assert pflog_tcp_packets[0][PFLog].daddr == '10.200.200.154' >>> assert pflog_tcp_packets[0][IP].proto == 6 >>> assert pflog_tcp_packets[0][IP].src == '10.200.200.254' >>> assert pflog_tcp_packets[0][IP].dst == '10.200.200.154' >>> assert pflog_tcp_packets[0][TCP].dport == 23 ###(002)=[passed] Dissect PFLog packet of a IP()/UDP() dropped packet >>> pcap_pflog_udp = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00O*\xce_?\x1d\x05\x00\x82\x00\x00\x00\x82\x00\x00\x00d\x02\x01\x00vio0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00{\xdb\x00\x00\x01\x00\x02\x00\n\xc8\xc8\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xc8\xc8\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x0b\x00\x17E\x00\x00\x1e\xdd\x1c\x00\x00@\x11\xf6\x89\n\xc8\xc8\xfe\n\xc8\xc8\x9a\xa9\x0b\x00\x17\x00\nN\x84') >>> pflog_udp_packets = rdpcap(pcap_pflog_udp) >>> assert pflog_udp_packets[0][PFLog].hdrlen == 100 >>> assert pflog_udp_packets[0][PFLog].addrfamily == 2 # IPv4 >>> assert pflog_udp_packets[0][PFLog].action == 1 # drop >>> assert pflog_udp_packets[0][PFLog].saddr == '10.200.200.254' >>> assert pflog_udp_packets[0][PFLog].daddr == '10.200.200.154' >>> assert pflog_udp_packets[0][IP].proto == 17 >>> assert pflog_udp_packets[0][IP].src == '10.200.200.254' >>> assert pflog_udp_packets[0][IP].dst == '10.200.200.154' >>> assert pflog_udp_packets[0][UDP].dport == 23 ###(003)=[passed] Dissect PFLog packet of a IP()/ICMP() echo-request dropped packet >>> pcap_pflog_icmp = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00\x8d*\xce_\x16[\x0c\x00\xb8\x00\x00\x00\xb8\x00\x00\x00d\x02\x01\x00vio0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\x84S\x01\x00\x01\x00\x02\x00\n\xc8\xc8\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xc8\xc8\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16K\x00\x08E\x00\x00T.\x88\x00\x00\xff\x01\xe5\xf7\n\xc8\xc8\xfe\n\xc8\xc8\x9a\x08\x00\xabD\x16K\x00\x00') >>> pflog_icmp_packets = rdpcap(pcap_pflog_icmp) >>> assert pflog_icmp_packets[0][PFLog].hdrlen == 100 >>> assert pflog_icmp_packets[0][PFLog].addrfamily == 2 # IPv4 >>> assert pflog_icmp_packets[0][PFLog].action == 1 # drop >>> assert pflog_icmp_packets[0][PFLog].saddr == '10.200.200.254' >>> assert pflog_icmp_packets[0][PFLog].daddr == '10.200.200.154' >>> assert pflog_icmp_packets[0][IP].proto == 1 >>> assert pflog_icmp_packets[0][IP].src == '10.200.200.254' >>> assert pflog_icmp_packets[0][IP].dst == '10.200.200.154' >>> assert pflog_icmp_packets[0][ICMP].type == 8 and pflog_icmp_packets[0][ICMP].code == 0 ###(004)=[passed] Dissect PFLog packet of a IPv6()/TCP() dropped packet >>> pcap_pflog_tcp_ipv6_drop = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00\x9dA\xce_\x98P\x08\x00\xb8\x00\x00\x00\xb8\x00\x00\x00d\x18\x01\x00vlan3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\xd9\x08\x00\x00\x01\x00\x18\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x04\xe9\x00\x17`\n\xb8\x13\x00,\x06@\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x04\xe9\x00\x17\xd6\xc3:\xd6\x00\x00\x00\x00\xb0\x02@\x00\xf7\xeb\x00\x00\x02\x04\x05\xa0\x01\x01\x04\x02\x01\x03\x03\x06\x01\x01\x08\nS\xd6,P\x00\x00\x00\x00') >>> pflog_tcp_ipv6_drop_packets = rdpcap(pcap_pflog_tcp_ipv6_drop) >>> assert pflog_tcp_ipv6_drop_packets[0][PFLog].hdrlen == 100 >>> assert pflog_tcp_ipv6_drop_packets[0][PFLog].addrfamily == 24 # IPv6 >>> assert pflog_tcp_ipv6_drop_packets[0][PFLog].action == 1 >>> assert pflog_tcp_ipv6_drop_packets[0][PFLog].saddr == '1111:1111:1111::1' >>> assert pflog_tcp_ipv6_drop_packets[0][PFLog].daddr == '1111:1111:1111::fc' >>> assert pflog_tcp_ipv6_drop_packets[0][IPv6].nh == 6 >>> assert pflog_tcp_ipv6_drop_packets[0][IPv6].src == '1111:1111:1111::1' >>> assert pflog_tcp_ipv6_drop_packets[0][IPv6].dst == '1111:1111:1111::fc' >>> assert pflog_tcp_ipv6_drop_packets[0][TCP].dport == 23 ###(005)=[passed] Dissect PFLog packet of a IPv6()/TCP() passed packet >>> pcap_pflog_tcp_ipv6_pass = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00$B\xce_\x8e\xc1\x01\x00\xb8\x00\x00\x00\xb8\x00\x00\x00d\x18\x00\x00vlan3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\xa4\x85\x00\x00\x01\x00\x18\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfczw\x00\x16`\x02\x82\x85\x00,\x06@\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfczw\x00\x16\xa3\x9d\x059\x00\x00\x00\x00\xb0\x02@\x00\xd9\xf1\x00\x00\x02\x04\x05\xa0\x01\x01\x04\x02\x01\x03\x03\x06\x01\x01\x08\nu[\x1b\xfb\x00\x00\x00\x00') >>> pflog_tcp_ipv6_pass_packets = rdpcap(pcap_pflog_tcp_ipv6_pass) >>> assert pflog_tcp_ipv6_pass_packets[0][PFLog].hdrlen == 100 >>> assert pflog_tcp_ipv6_pass_packets[0][PFLog].addrfamily == 24 # IPv6 >>> assert pflog_tcp_ipv6_pass_packets[0][PFLog].action == 0 >>> assert pflog_tcp_ipv6_pass_packets[0][PFLog].saddr == '1111:1111:1111::1' >>> assert pflog_tcp_ipv6_pass_packets[0][PFLog].daddr == '1111:1111:1111::fc' >>> assert pflog_tcp_ipv6_pass_packets[0][IPv6].nh == 6 >>> assert pflog_tcp_ipv6_pass_packets[0][IPv6].src == '1111:1111:1111::1' >>> assert pflog_tcp_ipv6_pass_packets[0][IPv6].dst == '1111:1111:1111::fc' >>> assert pflog_tcp_ipv6_pass_packets[0][TCP].dport == 22 ###(006)=[passed] Dissect PFLog packet of a IPv6()/UDP() dropped packet >>> pcap_pflog_udp_ipv6_drop = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00\xccA\xce_\xf8\x10\x03\x00\x95\x00\x00\x00\x95\x00\x00\x00d\x18\x01\x00vlan3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\xd9\x08\x00\x00\x01\x00\x18\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc[U\x00\x16`\x0f\x1b\x84\x00\t\x11@\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc[U\x00\x16\x00\t\xe4\xeeX') >>> pflog_udp_ipv6_drop_packets = rdpcap(pcap_pflog_udp_ipv6_drop) >>> assert pflog_udp_ipv6_drop_packets[0][PFLog].hdrlen == 100 >>> assert pflog_udp_ipv6_drop_packets[0][PFLog].addrfamily == 24 # IPv6 >>> assert pflog_udp_ipv6_drop_packets[0][PFLog].action == 1 >>> assert pflog_udp_ipv6_drop_packets[0][PFLog].saddr == '1111:1111:1111::1' >>> assert pflog_udp_ipv6_drop_packets[0][PFLog].daddr == '1111:1111:1111::fc' >>> assert pflog_udp_ipv6_drop_packets[0][IPv6].nh == 17 >>> assert pflog_udp_ipv6_drop_packets[0][IPv6].src == '1111:1111:1111::1' >>> assert pflog_udp_ipv6_drop_packets[0][IPv6].dst == '1111:1111:1111::fc' >>> assert pflog_udp_ipv6_drop_packets[0][UDP].dport == 22 ###(007)=[passed] Dissect PFLog packet of a IPv6()/ICMP6() dropped packet >>> pcap_pflog_icmp6_drop = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x005A\xce_\xa5\x06\x05\x00\xac\x00\x00\x00\xac\x00\x00\x00d\x18\x01\x00vlan3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\x89\xa0\x00\x00\x01\x00\x18\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x00\x00\xfc\x11\xed\x00\x87`\x00\x00\x00\x00 :\xff\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x00\x00\xfc\x87\x00\xf0\xf2\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x01\x01RT\x00]\xcd\x9b') >>> pflog_icmp6_drop_packets = rdpcap(pcap_pflog_icmp6_drop) >>> assert pflog_icmp6_drop_packets[0][PFLog].hdrlen == 100 >>> assert pflog_icmp6_drop_packets[0][PFLog].addrfamily == 24 # IPv6 >>> assert pflog_icmp6_drop_packets[0][PFLog].action == 1 >>> assert pflog_icmp6_drop_packets[0][PFLog].saddr == '1111:1111:1111::1' >>> assert pflog_icmp6_drop_packets[0][PFLog].daddr == 'ff02::1:ff00:fc' >>> assert pflog_icmp6_drop_packets[0][IPv6].nh == 58 >>> assert pflog_icmp6_drop_packets[0][IPv6].src == '1111:1111:1111::1' >>> assert pflog_icmp6_drop_packets[0][IPv6].dst == 'ff02::1:ff00:fc' >>> assert pflog_icmp6_drop_packets[0][ICMPv6ND_NS].type == 135 and pflog_icmp6_drop_packets[0][ICMPv6ND_NS].code == 0 >>> assert pflog_icmp6_drop_packets[0][ICMPv6ND_NS].tgt == '1111:1111:1111::fc' ###(008)=[passed] Dissect PFLog packet of a IPv6()/ICMP6() passed packet >>> pcap_pflog_icmp6_pass = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00u\x00\x00\x00 B\xce_\xf4\x05\x05\x00\xac\x00\x00\x00\xac\x00\x00\x00d\x18\x00\x00vlan3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x86\x01\x00\x00\x00\x00\x00\xa4\x85\x00\x00\x01\x00\x18\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x11\xed\x00\x87`\x00\x00\x00\x00 :\xff\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x87\x00\xbb\xc4\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x01\x01RT\x00]\xcd\x9b') >>> pflog_icmp6_pass_packets = rdpcap(pcap_pflog_icmp6_pass) >>> assert pflog_icmp6_pass_packets[0][PFLog].hdrlen == 100 >>> assert pflog_icmp6_pass_packets[0][PFLog].addrfamily == 24 # IPv6 >>> assert pflog_icmp6_pass_packets[0][PFLog].action == 0 >>> assert pflog_icmp6_pass_packets[0][PFLog].saddr == '1111:1111:1111::1' >>> assert pflog_icmp6_pass_packets[0][PFLog].daddr == '1111:1111:1111::fc' >>> assert pflog_icmp6_pass_packets[0][IPv6].nh == 58 >>> assert pflog_icmp6_pass_packets[0][IPv6].src == '1111:1111:1111::1' >>> assert pflog_icmp6_pass_packets[0][IPv6].dst == '1111:1111:1111::fc' >>> assert pflog_icmp6_pass_packets[0][ICMPv6ND_NS].type == 135 and pflog_icmp6_pass_packets[0][ICMPv6ND_NS].code == 0 >>> assert pflog_icmp6_pass_packets[0][ICMPv6ND_NS].tgt == '1111:1111:1111::fc' Scapy PPP layer tests ━ Run at 04:12:32 from [test/scapy/layers/ppp.uts] by UTscapy in 0.09397339820861816 └ Passed=8 └ Failed=0 ###### ## PPP tests ###### ###(000)=[passed] PPPoE >>> p=Ether(b'\xff\xff\xff\xff\xff\xff\x08\x00\x27\xf3<5\x88c\x11\x09\x00\x00\x00\x0c\x01\x01\x00\x00\x01\x03\x00\x04\x01\x02\x03\x04\x00\x00\x00\x00') >>> p , ] |>>> >>> assert p[Ether].type==0x8863 >>> assert PPPoED in p >>> assert p[PPPoED].version==1 >>> assert p[PPPoED].type==1 >>> assert p[PPPoED].code==0x09 >>> assert PPPoED_Tags in p >>> q=p[PPPoED_Tags] >>> assert q.tag_list is not None >>> r=q.tag_list >>> assert len(r) == 2 >>> assert r[0].tag_type==0x0101 >>> assert r[1].tag_type==0x0103 >>> assert r[1].tag_len==4 >>> assert r[1].tag_value==b'\x01\x02\x03\x04' >>> >>> assert Padding in p and len(p[Padding]) == 4 ###(001)=[passed] PPPoE with tags (appended) >>> eth = Ether(dst="ff:ff:ff:ff:ff:ff", src="12:12:12:12:12:12", type=0x8863) >>> pppoed = PPPoED(version=1, type=1, code=0x9, sessionid=0, len=8) >>> server_name = PPPoETag(tag_type=0x0101, tag_len=0) >>> end_of_list = PPPoETag(tag_type=0, tag_len=0) >>> >>> original = eth / pppoed / server_name / end_of_list >>> dissected = Ether(original.build()) >>> assert PPPoED_Tags in dissected >>> assert dissected[PPPoED_Tags].tag_list[0].tag_type == 0x0101 >>> assert dissected[PPPoED_Tags].tag_list[1].tag_type == 0 ###(002)=[passed] PPPoE with padding >>> p = CookedLinux(b'\x00\x00\x00\x01\x00\x06\x00\x1d\xaa\x00\x00\x00\x00\x00\x88c\x11\xa7\x08\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xf3\x9d\xf1\xc5C\xbe\xde') >>> assert p.summary() == 'CookedLinux / PPPoE Active Discovery Terminate (PADT) / Padding' >>> assert p[PPPoED].len == 0 >>> assert len(p[Padding].load) == 44 ###(003)=[passed] PPP/HDLC >>> p = HDLC()/PPP()/PPP_IPCP() >>> p >> >>> s = raw(p) >>> s b'\xff\x03\x80!\x01\x00\x00\x04' >>> assert s == b'\xff\x03\x80!\x01\x00\x00\x04' >>> p = PPP(s) >>> p >> >>> assert HDLC in p >>> assert p[HDLC].control==3 >>> assert p[PPP].proto==0x8021 >>> q = PPP(s[2:]) >>> q > >>> assert HDLC not in q >>> assert q[PPP].proto==0x8021 ###(004)=[passed] PPP IPCP >>> p = PPP(b'\x80!\x01\x01\x00\x10\x03\x06\xc0\xa8\x01\x01\x02\x06\x00-\x0f\x01') >>> p , ] |>> >>> assert p[PPP_IPCP].code == 1 >>> assert p[PPP_IPCP_Option_IPAddress].data=="192.168.1.1" >>> assert p[PPP_IPCP_Option].data == b'\x00-\x0f\x01' >>> p=PPP()/PPP_IPCP(options=[PPP_IPCP_Option_DNS1(data="1.2.3.4"),PPP_IPCP_Option_DNS2(data="5.6.7.8"),PPP_IPCP_Option_NBNS2(data="9.10.11.12")]) >>> r = raw(p) >>> r b'\x80!\x01\x00\x00\x16\x81\x06\x01\x02\x03\x04\x83\x06\x05\x06\x07\x08\x84\x06\t\n\x0b\x0c' >>> assert r == b'\x80!\x01\x00\x00\x16\x81\x06\x01\x02\x03\x04\x83\x06\x05\x06\x07\x08\x84\x06\t\n\x0b\x0c' >>> q = PPP(r) >>> q , , ] |>> >>> assert raw(p) == raw(q) >>> assert PPP(raw(q))==q >>> p = PPP()/PPP_IPCP(options=[PPP_IPCP_Option_DNS1(data="1.2.3.4"),PPP_IPCP_Option_DNS2(data="5.6.7.8"),PPP_IPCP_Option(type=123,data="ABCDEFG"),PPP_IPCP_Option_NBNS2(data="9.10.11.12")]) >>> p , , , ] |>> >>> r = raw(p) >>> r b'\x80!\x01\x00\x00\x1f\x81\x06\x01\x02\x03\x04\x83\x06\x05\x06\x07\x08{\tABCDEFG\x84\x06\t\n\x0b\x0c' >>> assert r == b'\x80!\x01\x00\x00\x1f\x81\x06\x01\x02\x03\x04\x83\x06\x05\x06\x07\x08{\tABCDEFG\x84\x06\t\n\x0b\x0c' >>> q = PPP(r) >>> q , , , ] |>> >>> assert q[PPP_IPCP_Option].type == 123 >>> assert q[PPP_IPCP_Option].data == b"ABCDEFG" >>> assert q[PPP_IPCP_Option_NBNS2].data == '9.10.11.12' ###(005)=[passed] PPP ECP >>> p = PPP()/PPP_ECP(options=[PPP_ECP_Option_OUI(oui=0x58595a)]) >>> p ] |>> >>> r = raw(p) >>> r b'\x80S\x01\x00\x00\n\x00\x06XYZ\x00' >>> assert r == b'\x80S\x01\x00\x00\n\x00\x06XYZ\x00' >>> q = PPP(r) >>> q ] |>> >>> assert raw(p) == raw(q) >>> p = PPP()/PPP_ECP(options=[PPP_ECP_Option_OUI(oui=0x58595a),PPP_ECP_Option(type=1,data="ABCDEFG")]) >>> p , ] |>> >>> r = raw(p) >>> r b'\x80S\x01\x00\x00\x13\x00\x06XYZ\x00\x01\tABCDEFG' >>> assert r == b'\x80S\x01\x00\x00\x13\x00\x06XYZ\x00\x01\tABCDEFG' >>> q = PPP(r) >>> q , ] |>> >>> assert raw(p) == raw(q) >>> assert q[PPP_ECP_Option].data == b"ABCDEFG" ###(006)=[passed] PPP IP check that default protocol length is 2 bytes >>> p = PPP()/IP() >>> p > >>> r = raw(p) >>> r b'\x00!E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01' >>> assert r.startswith(b'\x00\x21') >>> assert len(r) == 22 ###(007)=[passed] PPP check parsing with only one byte for protocol >>> assert len(raw(PPP(proto=b'\x21') / IP())) == 21 >>> >>> p = PPP(b'!E\x00\x00<\x00\x00@\x008\x06\xa5\xce\x85wP)\xc0\xa8Va\x01\xbbd\x8a\xe2}r\xb8O\x95\xb5\x84\xa0\x12q \xc8\x08\x00\x00\x02\x04\x02\x18\x04\x02\x08\nQ\xdf\xd6\xb0\x00\x07LH\x01\x03\x03\x07Ao') >>> assert IP in p >>> assert TCP in p >>> >>> assert PPP(b"\x00\x21" + raw(IP())) == PPP(b"\x21" + raw(IP())) PPTP Related regression tests ━ Run at 04:12:32 from [test/scapy/layers/pptp.uts] by UTscapy in 0.3332645893096924 └ Passed=36 └ Failed=0 ###### ## GRE Tests ###### ###(000)=[passed] Test IP/GRE v0 decoding >>> data = hex_bytes('45c00064000f0000ff2f1647c0a80c01c0a8170300000800') >>> pkt = IP(data) >>> assert GRE in pkt >>> gre = pkt[GRE] >>> assert gre.chksum_present == 0 >>> assert gre.routing_present == 0 >>> assert gre.key_present == 0 >>> assert gre.seqnum_present == 0 >>> assert gre.strict_route_source == 0 >>> assert gre.recursion_control == 0 >>> assert gre.flags == 0 >>> assert gre.version == 0 >>> assert gre.proto == 0x800 ###(001)=[passed] Test IP/GRE v1 decoding with PPP LCP >>> data = hex_bytes('4500003c18324000402f0e5a0a0000020a0000063001880b001c9bf500000000ff03'\ ... 'c021010100180206000000000304c2270506fbb8831007020802') >>> pkt = IP(data) >>> assert GRE_PPTP in pkt >>> gre_pptp = pkt[GRE_PPTP] >>> assert gre_pptp.chksum_present == 0 >>> assert gre_pptp.routing_present == 0 >>> assert gre_pptp.key_present == 1 >>> assert gre_pptp.seqnum_present == 1 >>> assert gre_pptp.strict_route_source == 0 >>> assert gre_pptp.recursion_control == 0 >>> assert gre_pptp.acknum_present == 0 >>> assert gre_pptp.flags == 0 >>> assert gre_pptp.version == 1 >>> assert gre_pptp.proto == 0x880b >>> assert gre_pptp.payload_len == 28 >>> assert gre_pptp.call_id == 39925 >>> assert gre_pptp.sequence_number == 0x0 >>> >>> assert HDLC in pkt >>> assert PPP in pkt >>> assert PPP_LCP_Configure in pkt ###(002)=[passed] Test IP/GRE v1 encoding/decoding with PPP LCP Echo >>> pkt = IP(src='192.168.0.1', dst='192.168.0.2') /\ ... GRE_PPTP(seqnum_present=1, acknum_present=1, sequence_number=47, ack_number=42) /\ ... HDLC() / PPP() / PPP_LCP_Echo(id=42, magic_number=4242, data='abcdef') >>> pkt_data = raw(pkt) >>> pkt_data_ref = hex_bytes('4500003600010000402ff944c0a80001c0a800023081880b001200000000002f000000'\ ... '2aff03c021092a000e00001092616263646566') >>> assert (pkt_data == pkt_data_ref) >>> pkt_decoded = IP(pkt_data_ref) >>> assert IP in pkt >>> assert GRE_PPTP in pkt >>> assert HDLC in pkt >>> assert PPP in pkt >>> assert PPP_LCP_Echo in pkt >>> >>> assert pkt[IP].proto == 47 >>> assert pkt[GRE_PPTP].chksum_present == 0 >>> assert pkt[GRE_PPTP].routing_present == 0 >>> assert pkt[GRE_PPTP].key_present == 1 >>> assert pkt[GRE_PPTP].seqnum_present == 1 >>> assert pkt[GRE_PPTP].acknum_present == 1 >>> assert pkt[GRE_PPTP].sequence_number == 47 >>> assert pkt[GRE_PPTP].ack_number == 42 >>> assert pkt[PPP].proto == 0xc021 >>> assert pkt[PPP_LCP_Echo].code == 9 >>> assert pkt[PPP_LCP_Echo].id == 42 >>> assert pkt[PPP_LCP_Echo].magic_number == 4242 >>> assert pkt[PPP_LCP_Echo].data == b'abcdef' ###### ## PPP LCP Tests ###### ###(003)=[passed] Test LCP Echo Request / Reply >>> lcp_echo_request_data = hex_bytes('c021090700080000002a') >>> lcp_echo_reply_data = raw(PPP()/PPP_LCP_Echo(code=10, id=7, magic_number=77, data='defgh')) >>> >>> lcp_echo_request_pkt = PPP(lcp_echo_request_data) >>> lcp_echo_reply_pkt = PPP(lcp_echo_reply_data) >>> >>> assert lcp_echo_reply_pkt.answers(lcp_echo_request_pkt) >>> assert not lcp_echo_request_pkt.answers(lcp_echo_reply_pkt) >>> >>> lcp_echo_non_reply_data = raw(PPP()/PPP_LCP_Echo(code=10, id=3, magic_number=77)) >>> lcp_echo_non_reply_pkt = PPP(lcp_echo_non_reply_data) >>> >>> assert not lcp_echo_non_reply_pkt.answers(lcp_echo_request_pkt) >>> >>> lcp_echo_non_reply_data = raw(PPP()/PPP_LCP_Echo(id=7, magic_number=42)) >>> lcp_echo_non_reply_pkt = PPP(lcp_echo_non_reply_data) >>> >>> assert not lcp_echo_non_reply_pkt.answers(lcp_echo_request_pkt) ###(004)=[passed] Test LCP Configure Request >>> conf_req = PPP() / PPP_LCP_Configure(id=42, options=[PPP_LCP_Magic_Number_Option(magic_number=4242)]) >>> conf_req_ref_data = hex_bytes('c021012a000a050600001092') >>> >>> assert raw(conf_req) == conf_req_ref_data >>> >>> conf_req_pkt = PPP(conf_req_ref_data) >>> >>> assert PPP_LCP_Configure in conf_req_pkt >>> assert conf_req_pkt[PPP_LCP_Configure].code == 1 >>> assert conf_req_pkt[PPP_LCP_Configure].id == 42 >>> assert len(conf_req_pkt[PPP_LCP_Configure].options) == 1 >>> assert isinstance(conf_req_pkt[PPP_LCP_Configure].options[0], PPP_LCP_Magic_Number_Option) >>> assert conf_req_pkt[PPP_LCP_Configure].options[0].magic_number == 4242 ###(005)=[passed] Test LCP Configure Ack >>> conf_ack = PPP() / PPP_LCP_Configure(code='Configure-Ack', id=42, ... options=[PPP_LCP_Magic_Number_Option(magic_number=4242)]) >>> conf_ack_ref_data = hex_bytes('c021022a000a050600001092') >>> >>> assert (raw(conf_ack) == conf_ack_ref_data) >>> >>> conf_ack_pkt = PPP(conf_ack_ref_data) >>> >>> assert PPP_LCP_Configure in conf_ack_pkt >>> assert conf_ack_pkt[PPP_LCP_Configure].code == 2 >>> assert conf_ack_pkt[PPP_LCP_Configure].id == 42 >>> assert len(conf_ack_pkt[PPP_LCP_Configure].options) == 1 >>> assert isinstance(conf_ack_pkt[PPP_LCP_Configure].options[0], PPP_LCP_Magic_Number_Option) >>> assert conf_ack_pkt[PPP_LCP_Configure].options[0].magic_number == 4242 >>> >>> conf_req_pkt = PPP(hex_bytes('c021012a000a050600001092')) >>> >>> assert conf_ack_pkt.answers(conf_req_pkt) >>> assert not conf_req_pkt.answers(conf_ack_pkt) ###(006)=[passed] Test LCP Configure Nak >>> conf_nak = PPP() / PPP_LCP_Configure(code='Configure-Nak', id=42, ... options=[PPP_LCP_MRU_Option(), PPP_LCP_ACCM_Option(accm=0xffff0000)]) >>> conf_nak_ref_data = hex_bytes('c021032a000e010405dc0206ffff0000') >>> >>> assert raw(conf_nak) == conf_nak_ref_data >>> >>> conf_nak_pkt = PPP(conf_nak_ref_data) >>> >>> assert PPP_LCP_Configure in conf_nak_pkt >>> assert conf_nak_pkt[PPP_LCP_Configure].code == 3 >>> assert conf_nak_pkt[PPP_LCP_Configure].id == 42 >>> assert len(conf_nak_pkt[PPP_LCP_Configure].options) == 2 >>> assert isinstance(conf_nak_pkt[PPP_LCP_Configure].options[0], PPP_LCP_MRU_Option) >>> assert conf_nak_pkt[PPP_LCP_Configure].options[0].max_recv_unit == 1500 >>> assert isinstance(conf_nak_pkt[PPP_LCP_Configure].options[1], PPP_LCP_ACCM_Option) >>> assert conf_nak_pkt[PPP_LCP_Configure].options[1].accm == 0xffff0000 >>> >>> conf_req_pkt = PPP(hex_bytes('c021012a000e010405dc0206ffff0000')) >>> >>> assert conf_nak_pkt.answers(conf_req_pkt) >>> assert not conf_req_pkt.answers(conf_nak_pkt) ###(007)=[passed] Test LCP Configure Reject >>> conf_reject = PPP() / PPP_LCP_Configure(code='Configure-Reject', id=42, ... options=[PPP_LCP_Callback_Option(operation='Location identifier', ... message='test')]) >>> conf_reject_ref_data = hex_bytes('c021042a000b0d070274657374') >>> >>> assert raw(conf_reject) == conf_reject_ref_data >>> >>> conf_reject_pkt = PPP(conf_reject_ref_data) >>> >>> assert PPP_LCP_Configure in conf_reject_pkt >>> assert conf_reject_pkt[PPP_LCP_Configure].code == 4 >>> assert conf_reject_pkt[PPP_LCP_Configure].id == 42 >>> assert len(conf_reject_pkt[PPP_LCP_Configure].options) == 1 >>> assert isinstance(conf_reject_pkt[PPP_LCP_Configure].options[0], PPP_LCP_Callback_Option) >>> assert conf_reject_pkt[PPP_LCP_Configure].options[0].operation == 2 >>> assert conf_reject_pkt[PPP_LCP_Configure].options[0].message == b'test' >>> >>> conf_req_pkt = PPP(hex_bytes('c021012a000b0d070274657374')) >>> >>> assert conf_reject_pkt.answers(conf_req_pkt) >>> assert not conf_req_pkt.answers(conf_reject_pkt) ###(008)=[passed] Test LCP Configure options >>> conf_req = PPP() / PPP_LCP_Configure(id=42, options=[PPP_LCP_MRU_Option(max_recv_unit=5000), ... PPP_LCP_ACCM_Option(accm=0xf0f0f0f0), ... PPP_LCP_Auth_Protocol_Option(), ... PPP_LCP_Quality_Protocol_Option(data='test'), ... PPP_LCP_Magic_Number_Option(magic_number=4242), ... PPP_LCP_Callback_Option(operation='Distinguished name',message='test')]) >>> conf_req_ref_data = hex_bytes('c021012a0027010413880206f0f0f0f00304c0230408c025746573740506000010920d070474657374') >>> >>> assert raw(conf_req) == conf_req_ref_data >>> >>> conf_req_pkt = PPP(conf_req_ref_data) >>> >>> assert PPP_LCP_Configure in conf_req_pkt >>> options = conf_req_pkt[PPP_LCP_Configure].options >>> assert len(options) == 6 >>> assert isinstance(options[0], PPP_LCP_MRU_Option) >>> assert options[0].max_recv_unit == 5000 >>> assert isinstance(options[1], PPP_LCP_ACCM_Option) >>> assert options[1].accm == 0xf0f0f0f0 >>> assert isinstance(options[2], PPP_LCP_Auth_Protocol_Option) >>> assert options[2].auth_protocol == 0xc023 >>> assert isinstance(options[3], PPP_LCP_Quality_Protocol_Option) >>> assert options[3].quality_protocol == 0xc025 >>> assert options[3].data == b'test' >>> assert isinstance(options[4], PPP_LCP_Magic_Number_Option) >>> assert options[4].magic_number == 4242 >>> assert isinstance(options[5], PPP_LCP_Callback_Option) >>> assert options[5].operation == 4 >>> assert options[5].message == b'test' ###(009)=[passed] Test LCP Auth option >>> pap = PPP_LCP_Auth_Protocol_Option() >>> pap_ref_data = hex_bytes('0304c023') >>> >>> assert raw(pap) == pap_ref_data >>> >>> pap_pkt = PPP_LCP_Option(pap_ref_data) >>> assert isinstance(pap_pkt, PPP_LCP_Auth_Protocol_Option) >>> assert pap_pkt.auth_protocol == 0xc023 >>> >>> chap_sha1 = PPP_LCP_Auth_Protocol_Option(auth_protocol='Challenge-response authentication protocol', algorithm="SHA1") >>> chap_sha1_ref_data = hex_bytes('0305c22306') >>> >>> assert raw(chap_sha1) == chap_sha1_ref_data >>> >>> chap_sha1_pkt = PPP_LCP_Option(chap_sha1_ref_data) >>> assert isinstance(chap_sha1_pkt, PPP_LCP_Auth_Protocol_Option) >>> assert chap_sha1_pkt.auth_protocol == 0xc223 >>> assert chap_sha1_pkt.algorithm == 6 >>> >>> eap = PPP_LCP_Auth_Protocol_Option(auth_protocol='PPP Extensible authentication protocol', data='test') >>> eap_ref_data = hex_bytes('0308c22774657374') >>> >>> assert raw(eap) == eap_ref_data >>> >>> eap_pkt = PPP_LCP_Option(eap_ref_data) >>> assert isinstance(eap_pkt, PPP_LCP_Auth_Protocol_Option) >>> assert eap_pkt.auth_protocol == 0xc227 >>> assert eap_pkt.data == b'test' ###(010)=[passed] Test LCP Code-Reject >>> code_reject = PPP() / PPP_LCP_Code_Reject(id=42, rejected_packet=PPP_LCP(code=42, id=7, data='unknown_data')) >>> code_reject_ref_data = hex_bytes('c021072a00142a070010756e6b6e6f776e5f64617461') >>> >>> assert raw(code_reject) == code_reject_ref_data >>> >>> code_reject_pkt = PPP(code_reject_ref_data) >>> assert PPP_LCP_Code_Reject in code_reject_pkt >>> assert code_reject_pkt[PPP_LCP_Code_Reject].id == 42 >>> assert isinstance(code_reject_pkt[PPP_LCP_Code_Reject].rejected_packet, PPP_LCP) >>> assert code_reject[PPP_LCP_Code_Reject].rejected_packet.code == 42 >>> assert code_reject[PPP_LCP_Code_Reject].rejected_packet.id == 7 >>> assert code_reject[PPP_LCP_Code_Reject].rejected_packet.data == b'unknown_data' ###(011)=[passed] Test LCP Protocol-Reject >>> protocol_reject = PPP() / PPP_LCP_Protocol_Reject(id=42, rejected_protocol=0x8039, ... rejected_information=Packet(hex_bytes('0305c22306'))) >>> protocol_reject_ref_data = hex_bytes('c021082a000b80390305c22306') >>> >>> assert raw(protocol_reject) == protocol_reject_ref_data >>> >>> protocol_reject_pkt = PPP(protocol_reject_ref_data) >>> assert PPP_LCP_Protocol_Reject in protocol_reject_pkt >>> assert protocol_reject_pkt[PPP_LCP_Protocol_Reject].id == 42 >>> assert protocol_reject_pkt[PPP_LCP_Protocol_Reject].rejected_protocol == 0x8039 >>> assert len(protocol_reject_pkt[PPP_LCP_Protocol_Reject].rejected_information) == 5 ###(012)=[passed] Test LCP Discard Request >>> discard_request = PPP() / PPP_LCP_Discard_Request(id=7, magic_number=4242, data='test') >>> discard_request_ref_data = hex_bytes('c0210b07000c0000109274657374') >>> >>> assert raw(discard_request) == discard_request_ref_data >>> >>> discard_request_pkt = PPP(discard_request_ref_data) >>> assert PPP_LCP_Discard_Request in discard_request_pkt >>> assert discard_request_pkt[PPP_LCP_Discard_Request].id == 7 >>> assert discard_request_pkt[PPP_LCP_Discard_Request].magic_number == 4242 >>> assert discard_request_pkt[PPP_LCP_Discard_Request].data == b'test' ###(013)=[passed] Test LCP Terminate-Request/Terminate-Ack >>> terminate_request = PPP() / PPP_LCP_Terminate(id=7, data='test') >>> terminate_request_ref_data = hex_bytes('c0210507000874657374') >>> >>> assert raw(terminate_request) == terminate_request_ref_data >>> >>> terminate_request_pkt = PPP(terminate_request_ref_data) >>> assert PPP_LCP_Terminate in terminate_request_pkt >>> assert terminate_request_pkt[PPP_LCP_Terminate].code == 5 >>> assert terminate_request_pkt[PPP_LCP_Terminate].id == 7 >>> assert terminate_request_pkt[PPP_LCP_Terminate].data == b'test' >>> >>> terminate_ack = PPP() / PPP_LCP_Terminate(code='Terminate-Ack', id=7) >>> terminate_ack_ref_data = hex_bytes('c02106070004') >>> >>> assert raw(terminate_ack) == terminate_ack_ref_data >>> >>> terminate_ack_pkt = PPP(terminate_ack_ref_data) >>> assert PPP_LCP_Terminate in terminate_ack_pkt >>> assert terminate_ack_pkt[PPP_LCP_Terminate].code == 6 >>> assert terminate_ack_pkt[PPP_LCP_Terminate].id == 7 >>> >>> assert terminate_ack_pkt.answers(terminate_request_pkt) >>> assert not terminate_request_pkt.answers(terminate_ack_pkt) ###### ## PPP PAP Tests ###### ###(014)=[passed] Test PPP PAP Request >>> pap_request = PPP() / PPP_PAP_Request(id=42, username='administrator', password='secret_password') >>> pap_request_ref_data = hex_bytes('c023012a00220d61646d696e6973747261746f720f7365637265745f70617373776f7264') >>> >>> assert raw(pap_request) == pap_request_ref_data >>> >>> pap_request_pkt = PPP(pap_request_ref_data) >>> assert PPP_PAP_Request in pap_request_pkt >>> assert pap_request_pkt[PPP_PAP_Request].code == 1 >>> assert pap_request_pkt[PPP_PAP_Request].id == 42 >>> assert pap_request_pkt[PPP_PAP_Request].username == b'administrator' >>> assert pap_request_pkt[PPP_PAP_Request].password == b'secret_password' >>> assert pap_request_pkt[PPP_PAP_Request].summary() in ['PAP-Request username=\'administrator\' password=\'secret_password\'', ... 'PAP-Request username=b\'administrator\' password=b\'secret_password\''] ###(015)=[passed] Test PPP PAP Authenticate-Ack >>> pap_response = PPP() / PPP_PAP(code='Authenticate-Ack', id=42) >>> pap_response_ref_data = hex_bytes('c023022a000500') >>> >>> assert raw(pap_response) == pap_response_ref_data >>> >>> pap_response_pkt = PPP(pap_response_ref_data) >>> assert PPP_PAP_Response in pap_response_pkt >>> assert pap_response_pkt[PPP_PAP_Response].code == 2 >>> assert pap_response_pkt[PPP_PAP_Response].id == 42 >>> assert pap_response_pkt[PPP_PAP_Response].msg_len == 0 >>> assert pap_response_pkt[PPP_PAP_Response].message == b'' >>> assert pap_response_pkt[PPP_PAP_Response].summary() == 'PAP-Ack' >>> >>> pap_request_pkt = PPP(hex_bytes('c023012a00220d61646d696e6973747261746f720f7365637265745f70617373776f7264')) >>> assert pap_response_pkt.answers(pap_request_pkt) >>> assert not pap_request_pkt.answers(pap_response_pkt) ###(016)=[passed] Test PPP PAP Authenticate-Nak >>> pap_response = PPP() / PPP_PAP(code=3, id=42, message='Bad password') >>> pap_response_ref_data = hex_bytes('c023032a00110c4261642070617373776f7264') >>> >>> assert raw(pap_response) == pap_response_ref_data >>> >>> pap_response_pkt = PPP(pap_response_ref_data) >>> assert PPP_PAP_Response in pap_response_pkt >>> assert pap_response_pkt[PPP_PAP_Response].code == 3 >>> assert pap_response_pkt[PPP_PAP_Response].id == 42 >>> assert pap_response_pkt[PPP_PAP_Response].msg_len == len('Bad password') >>> assert pap_response_pkt[PPP_PAP_Response].message == b'Bad password' >>> assert pap_response_pkt[PPP_PAP_Response].summary() in ['PAP-Nak msg=\'Bad password\'', 'PAP-Nak msg=b\'Bad password\''] >>> >>> pap_request_pkt = PPP(hex_bytes('c023012a00220d61646d696e6973747261746f720f7365637265745f70617373776f7264')) >>> assert pap_response_pkt.answers(pap_request_pkt) >>> assert not pap_request_pkt.answers(pap_response_pkt) ###### ## PPP CHAP Tests ###### ###(017)=[passed] Test PPP CHAP Challenge >>> chap_challenge = PPP() / PPP_CHAP(code=1, id=47, value=b'B' * 7, ... optional_name='server') >>> chap_challenge_ref_data = hex_bytes('c223012f00120742424242424242736572766572') >>> >>> assert raw(chap_challenge) == chap_challenge_ref_data >>> >>> chap_challenge_pkt = PPP(chap_challenge_ref_data) >>> assert PPP_CHAP_ChallengeResponse in chap_challenge_pkt >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].code == 1 >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].id == 47 >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].value_size == 7 >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].value == b'B' * 7 >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].optional_name == b'server' >>> assert chap_challenge_pkt[PPP_CHAP_ChallengeResponse].summary() in ['CHAP challenge=0x42424242424242 optional_name=\'server\'', ... 'CHAP challenge=0x42424242424242 optional_name=b\'server\''] ###(018)=[passed] Test PPP CHAP Response >>> chap_response = PPP() / PPP_CHAP(code='Response', id=47, value=b'\x00' * 16, optional_name='client') >>> chap_response_ref_data = hex_bytes('c223022f001b1000000000000000000000000000000000636c69656e74') >>> >>> assert raw(chap_response) == chap_response_ref_data >>> >>> chap_response_pkt = PPP(chap_response_ref_data) >>> assert PPP_CHAP_ChallengeResponse in chap_response_pkt >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].code == 2 >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].id == 47 >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].value_size == 16 >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].value == b'\x00' * 16 >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].optional_name == b'client' >>> assert chap_response_pkt[PPP_CHAP_ChallengeResponse].summary() in ['CHAP response=0x00000000000000000000000000000000 optional_name=\'client\'', ... 'CHAP response=0x00000000000000000000000000000000 optional_name=b\'client\''] >>> >>> chap_request = PPP(hex_bytes('c223012f00120742424242424242736572766572')) >>> >>> assert chap_response.answers(chap_challenge) >>> assert not chap_challenge.answers(chap_response) ###(019)=[passed] Test PPP CHAP Success >>> chap_success = PPP() / PPP_CHAP(code='Success', id=47) >>> chap_success_ref_data = hex_bytes('c223032f0004') >>> >>> assert raw(chap_success) == chap_success_ref_data >>> >>> chap_success_pkt = PPP(chap_success_ref_data) >>> assert PPP_CHAP in chap_success_pkt >>> assert chap_success_pkt[PPP_CHAP].code == 3 >>> assert chap_success_pkt[PPP_CHAP].id == 47 >>> assert chap_success_pkt[PPP_CHAP].data == b'' >>> assert chap_success_pkt[PPP_CHAP].summary() in ['CHAP Success message=\'\'', 'CHAP Success message=b\'\''] >>> >>> chap_response_pkt = PPP(hex_bytes('c223022f001b1000000000000000000000000000000000636c69656e74')) >>> >>> assert chap_success_pkt.answers(chap_response_pkt) >>> assert not chap_response_pkt.answers(chap_success_pkt) ###(020)=[passed] Test PPP CHAP Failure >>> chap_failure = PPP() / PPP_CHAP(code='Failure', id=47, data='Go away') >>> chap_failure_ref_data = hex_bytes('c223042f000b476f2061776179') >>> >>> assert raw(chap_failure) == chap_failure_ref_data >>> >>> chap_failure_pkt = PPP(chap_failure_ref_data) >>> assert PPP_CHAP in chap_failure_pkt >>> assert chap_failure_pkt[PPP_CHAP].code == 4 >>> assert chap_failure_pkt[PPP_CHAP].id == 47 >>> assert chap_failure_pkt[PPP_CHAP].data == b'Go away' >>> assert chap_failure_pkt[PPP_CHAP].summary() in ['CHAP Failure message=\'Go away\'', 'CHAP Failure message=b\'Go away\''] >>> >>> chap_response_pkt = PPP(hex_bytes('c223022f001b1000000000000000000000000000000000636c69656e74')) >>> >>> assert chap_failure_pkt.answers(chap_response_pkt) >>> assert not chap_failure_pkt.answers(chap_success_pkt) ###### ## PPTP Tests ###### ###(021)=[passed] Test PPTP Start-Control-Connection-Request >>> start_control_connection = PPTPStartControlConnectionRequest(framing_capabilities='Asynchronous Framing supported', ... bearer_capabilities='Digital access supported', ... maximum_channels=42, ... firmware_revision=47, ... host_name='test host name', ... vendor_string='test vendor string') >>> start_control_connection_ref_data = hex_bytes('009c00011a2b3c4d00010000010000000000000100000002002a00'\ ... '2f7465737420686f7374206e616d65000000000000000000000000'\ ... '000000000000000000000000000000000000000000000000000000'\ ... '0000000000000000000000746573742076656e646f722073747269'\ ... '6e6700000000000000000000000000000000000000000000000000'\ ... '000000000000000000000000000000000000000000') >>> >>> assert raw(start_control_connection) == start_control_connection_ref_data >>> >>> start_control_connection_pkt = PPTP(start_control_connection_ref_data) >>> >>> assert isinstance(start_control_connection_pkt, PPTPStartControlConnectionRequest) >>> assert start_control_connection_pkt.magic_cookie == 0x1a2b3c4d >>> assert start_control_connection_pkt.protocol_version == 0x0100 >>> assert start_control_connection_pkt.framing_capabilities == 1 >>> assert start_control_connection_pkt.bearer_capabilities == 2 >>> assert start_control_connection_pkt.maximum_channels == 42 >>> assert start_control_connection_pkt.firmware_revision == 47 >>> assert start_control_connection_pkt.host_name == b'test host name' + b'\0' * (64-len('test host name')) >>> assert start_control_connection_pkt.vendor_string == b'test vendor string' + b'\0' * (64-len('test vendor string')) ###(022)=[passed] Test PPTP Start-Control-Connection-Reply >>> start_control_connection_reply = PPTPStartControlConnectionReply(result_code='General error', ... error_code='Not-Connected', ... framing_capabilities='Synchronous Framing supported', ... bearer_capabilities='Analog access supported', ... vendor_string='vendor') >>> start_control_connection_reply_ref_data = hex_bytes('009c00011a2b3c4d00020000010002010000000200000001ffff0'\ ... '1006c696e75780000000000000000000000000000000000000000'\ ... '00000000000000000000000000000000000000000000000000000'\ ... '000000000000000000000000076656e646f720000000000000000'\ ... '00000000000000000000000000000000000000000000000000000'\ ... '00000000000000000000000000000000000000000000000') >>> >>> assert raw(start_control_connection_reply) == start_control_connection_reply_ref_data >>> >>> start_control_connection_reply_pkt = PPTP(start_control_connection_reply_ref_data) >>> >>> assert isinstance(start_control_connection_reply_pkt, PPTPStartControlConnectionReply) >>> assert start_control_connection_reply_pkt.magic_cookie == 0x1a2b3c4d >>> assert start_control_connection_reply_pkt.protocol_version == 0x0100 >>> assert start_control_connection_reply_pkt.result_code == 2 >>> assert start_control_connection_reply_pkt.error_code == 1 >>> assert start_control_connection_reply_pkt.framing_capabilities == 2 >>> assert start_control_connection_reply_pkt.bearer_capabilities == 1 >>> assert start_control_connection_reply_pkt.host_name == b'linux' + b'\0' * (64-len('linux')) >>> assert start_control_connection_reply_pkt.vendor_string == b'vendor' + b'\0' * (64-len('vendor')) >>> >>> start_control_connection_request = PPTPStartControlConnectionRequest() >>> >>> assert start_control_connection_reply_pkt.answers(start_control_connection_request) >>> assert not start_control_connection_request.answers(start_control_connection_reply_pkt) ###(023)=[passed] Test PPTP Stop-Control-Connection-Request >>> stop_control_connection = PPTPStopControlConnectionRequest(reason='Stop-Local-Shutdown') >>> stop_control_connection_ref_data = hex_bytes('001000011a2b3c4d0003000003000000') >>> >>> assert raw(stop_control_connection) == stop_control_connection_ref_data >>> >>> stop_control_connection_pkt = PPTP(stop_control_connection_ref_data) >>> >>> assert isinstance(stop_control_connection_pkt, PPTPStopControlConnectionRequest) >>> assert stop_control_connection_pkt.magic_cookie == 0x1a2b3c4d >>> assert stop_control_connection_pkt.reason == 3 ###(024)=[passed] Test PPTP Stop-Control-Connection-Reply >>> stop_control_connection_reply = PPTPStopControlConnectionReply(result_code='General error',error_code='PAC-Error') >>> stop_control_connection_reply_ref_data = hex_bytes('001000011a2b3c4d0004000002060000') >>> >>> assert raw(stop_control_connection_reply) == stop_control_connection_reply_ref_data >>> >>> stop_control_connection_reply_pkt = PPTP(stop_control_connection_reply_ref_data) >>> >>> assert isinstance(stop_control_connection_reply_pkt, PPTPStopControlConnectionReply) >>> assert stop_control_connection_reply_pkt.magic_cookie == 0x1a2b3c4d >>> assert stop_control_connection_reply_pkt.result_code == 2 >>> assert stop_control_connection_reply_pkt.error_code == 6 >>> >>> stop_control_connection_request = PPTPStopControlConnectionRequest() >>> >>> assert stop_control_connection_reply_pkt.answers(stop_control_connection_request) >>> assert not stop_control_connection_request.answers(stop_control_connection_reply_pkt) ###(025)=[passed] Test PPTP Echo-Request >>> echo_request = PPTPEchoRequest(identifier=42) >>> echo_request_ref_data = hex_bytes('001000011a2b3c4d000500000000002a') >>> >>> assert raw(echo_request) == echo_request_ref_data >>> >>> echo_request_pkt = PPTP(echo_request_ref_data) >>> >>> assert isinstance(echo_request_pkt, PPTPEchoRequest) >>> assert echo_request_pkt.magic_cookie == 0x1a2b3c4d >>> assert echo_request_pkt.identifier == 42 ###(026)=[passed] Test PPTP Echo-Reply >>> echo_reply = PPTPEchoReply(identifier=42, result_code='OK') >>> echo_reply_ref_data = hex_bytes('001400011a2b3c4d000600000000002a01000000') >>> >>> assert raw(echo_reply) == echo_reply_ref_data >>> >>> echo_reply_pkt = PPTP(echo_reply_ref_data) >>> >>> assert isinstance(echo_reply_pkt, PPTPEchoReply) >>> assert echo_reply_pkt.magic_cookie == 0x1a2b3c4d >>> assert echo_reply_pkt.identifier == 42 >>> assert echo_reply_pkt.result_code == 1 >>> assert echo_reply_pkt.error_code == 0 >>> >>> echo_request = PPTPEchoRequest(identifier=42) >>> >>> assert echo_reply_pkt.answers(echo_request) >>> assert not echo_request.answers(echo_reply) >>> >>> echo_request_incorrect = PPTPEchoRequest(identifier=47) >>> >>> assert not echo_reply_pkt.answers(echo_request_incorrect) >>> assert not echo_request_incorrect.answers(echo_reply_pkt) ###(027)=[passed] Test PPTP Outgoing-Call-Request >>> outgoing_call = PPTPOutgoingCallRequest(call_id=4242, call_serial_number=47, ... minimum_bps=1000, maximum_bps=10000, ... bearer_type='Digital channel', ... pkt_window_size=16, pkt_proc_delay=1, ... phone_number_len=9, phone_number='123456789', ... subaddress='test') >>> outgoing_call_ref_data = hex_bytes('00a800011a2b3c4d000700001092002f000003e8000027100000000200'\ ... '0000030010000100090000313233343536373839000000000000000000'\ ... '0000000000000000000000000000000000000000000000000000000000'\ ... '0000000000000000000000000000000000746573740000000000000000'\ ... '0000000000000000000000000000000000000000000000000000000000'\ ... '0000000000000000000000000000000000000000000000') >>> >>> assert raw(outgoing_call) == outgoing_call_ref_data >>> >>> outgoing_call_pkt = PPTP(outgoing_call_ref_data) >>> >>> assert isinstance(outgoing_call_pkt, PPTPOutgoingCallRequest) >>> assert outgoing_call_pkt.magic_cookie == 0x1a2b3c4d >>> assert outgoing_call_pkt.call_id == 4242 >>> assert outgoing_call_pkt.call_serial_number == 47 >>> assert outgoing_call_pkt.minimum_bps == 1000 >>> assert outgoing_call_pkt.maximum_bps == 10000 >>> assert outgoing_call_pkt.bearer_type == 2 >>> assert outgoing_call_pkt.framing_type == 3 >>> assert outgoing_call_pkt.pkt_window_size == 16 >>> assert outgoing_call_pkt.pkt_proc_delay == 1 >>> assert outgoing_call_pkt.phone_number_len == 9 >>> assert outgoing_call_pkt.phone_number == b'123456789' + b'\0' * (64-len('123456789')) >>> assert outgoing_call_pkt.subaddress == b'test' + b'\0' * (64-len('test')) ###(028)=[passed] Test PPTP Outgoing-Call-Reply >>> outgoing_call_reply = PPTPOutgoingCallReply(call_id=4243, peer_call_id=4242, ... result_code='Busy', error_code='No-Resource', ... cause_code=42, connect_speed=5000, ... pkt_window_size=32, pkt_proc_delay=3, ... channel_id=42) >>> outgoing_call_reply_ref_data = hex_bytes('002000011a2b3c4d00080000109310920404002a00001388002000030000002a') >>> >>> assert raw(outgoing_call_reply) == outgoing_call_reply_ref_data >>> >>> outgoing_call_reply_pkt = PPTP(outgoing_call_reply_ref_data) >>> >>> assert isinstance(outgoing_call_reply_pkt, PPTPOutgoingCallReply) >>> assert outgoing_call_reply_pkt.magic_cookie == 0x1a2b3c4d >>> assert outgoing_call_reply_pkt.call_id == 4243 >>> assert outgoing_call_reply_pkt.peer_call_id == 4242 >>> assert outgoing_call_reply_pkt.result_code == 4 >>> assert outgoing_call_reply_pkt.error_code == 4 >>> assert outgoing_call_reply_pkt.cause_code == 42 >>> assert outgoing_call_reply_pkt.connect_speed == 5000 >>> assert outgoing_call_reply_pkt.pkt_window_size == 32 >>> assert outgoing_call_reply_pkt.pkt_proc_delay == 3 >>> assert outgoing_call_reply_pkt.channel_id == 42 >>> >>> outgoing_call_request = PPTPOutgoingCallRequest(call_id=4242) >>> >>> assert outgoing_call_reply_pkt.answers(outgoing_call_request) >>> assert not outgoing_call_request.answers(outgoing_call_reply_pkt) >>> >>> outgoing_call_request_incorrect = PPTPOutgoingCallRequest(call_id=5656) >>> >>> assert not outgoing_call_reply_pkt.answers(outgoing_call_request_incorrect) >>> assert not outgoing_call_request_incorrect.answers(outgoing_call_reply_pkt) ###(029)=[passed] Test PPTP Incoming-Call-Request >>> incoming_call = PPTPIncomingCallRequest(call_id=4242, call_serial_number=47, bearer_type='Digital channel', ... channel_id=12, dialed_number_len=9, dialing_number_len=10, ... dialed_number='123456789', dialing_number='0123456789', ... subaddress='test') >>> incoming_call_ref_data = hex_bytes('00dc00011a2b3c4d000900001092002f000000020000000c0009000a313233343536373839'\ ... '00000000000000000000000000000000000000000000000000000000000000000000000000'\ ... '00000000000000000000000000000000000030313233343536373839000000000000000000'\ ... '00000000000000000000000000000000000000000000000000000000000000000000000000'\ ... '00000000000000007465737400000000000000000000000000000000000000000000000000'\ ... '0000000000000000000000000000000000000000000000000000000000000000000000') >>> >>> assert raw(incoming_call) == incoming_call_ref_data >>> >>> incoming_call_pkt = PPTP(incoming_call_ref_data) >>> >>> assert isinstance(incoming_call_pkt, PPTPIncomingCallRequest) >>> assert incoming_call_pkt.magic_cookie == 0x1a2b3c4d >>> assert incoming_call_pkt.call_id == 4242 >>> assert incoming_call_pkt.call_serial_number == 47 >>> assert incoming_call_pkt.bearer_type == 2 >>> assert incoming_call_pkt.channel_id == 12 >>> assert incoming_call_pkt.dialed_number_len == 9 >>> assert incoming_call_pkt.dialing_number_len == 10 >>> assert incoming_call_pkt.dialed_number == b'123456789' + b'\0' * (64-len('123456789')) >>> assert incoming_call_pkt.dialing_number == b'0123456789' + b'\0' * (64-len('0123456879')) >>> assert incoming_call_pkt.subaddress == b'test' + b'\0' * (64-len('test')) ###(030)=[passed] Test PPTP Incoming-Call-Reply >>> incoming_call_reply = PPTPIncomingCallReply(call_id=4243, peer_call_id=4242, result_code='Connected', ... error_code='None', pkt_window_size=16, pkt_transmit_delay=42) >>> incoming_call_reply_ref_data = hex_bytes('009400011a2b3c4d000a00001093109201000010002a0000') >>> >>> assert raw(incoming_call_reply) == incoming_call_reply_ref_data >>> >>> incoming_call_reply_pkt = PPTP(incoming_call_reply_ref_data) >>> assert isinstance(incoming_call_reply_pkt, PPTPIncomingCallReply) >>> assert incoming_call_reply_pkt.magic_cookie == 0x1a2b3c4d >>> assert incoming_call_reply_pkt.call_id == 4243 >>> assert incoming_call_reply_pkt.peer_call_id == 4242 >>> assert incoming_call_reply_pkt.result_code == 1 >>> assert incoming_call_reply_pkt.error_code == 0 >>> assert incoming_call_reply_pkt.pkt_window_size == 16 >>> assert incoming_call_reply_pkt.pkt_transmit_delay == 42 >>> >>> incoming_call_req = PPTPIncomingCallRequest(call_id=4242) >>> >>> assert incoming_call_reply_pkt.answers(incoming_call_req) >>> assert not incoming_call_req.answers(incoming_call_reply) >>> >>> incoming_call_req_incorrect = PPTPIncomingCallRequest(call_id=4343) >>> assert not incoming_call_reply_pkt.answers(incoming_call_req_incorrect) >>> assert not incoming_call_req_incorrect.answers(incoming_call_reply_pkt) ###(031)=[passed] Test PPTP Incoming-Call-Connected >>> incoming_call_connected = PPTPIncomingCallConnected(peer_call_id=4242, connect_speed=47474747, ... pkt_window_size=16, pkt_transmit_delay=7, ... framing_type='Any type of framing') >>> incoming_call_connected_ref_data = hex_bytes('001c00011a2b3c4d000b00001092000002d4683b0010000700000003') >>> >>> assert raw(incoming_call_connected) == incoming_call_connected_ref_data >>> >>> incoming_call_connected_pkt = PPTP(incoming_call_connected_ref_data) >>> assert isinstance(incoming_call_connected_pkt, PPTPIncomingCallConnected) >>> assert incoming_call_connected_pkt.magic_cookie == 0x1a2b3c4d >>> assert incoming_call_connected_pkt.peer_call_id == 4242 >>> assert incoming_call_connected_pkt.connect_speed == 47474747 >>> assert incoming_call_connected_pkt.pkt_window_size == 16 >>> assert incoming_call_connected_pkt.pkt_transmit_delay == 7 >>> assert incoming_call_connected_pkt.framing_type == 3 >>> >>> incoming_call_reply = PPTPIncomingCallReply(call_id=4242) >>> >>> assert incoming_call_connected_pkt.answers(incoming_call_reply) >>> assert not incoming_call_reply.answers(incoming_call_connected_pkt) >>> >>> incoming_call_reply_incorrect = PPTPIncomingCallReply(call_id=4243) >>> >>> assert not incoming_call_connected_pkt.answers(incoming_call_reply_incorrect) >>> assert not incoming_call_reply_incorrect.answers(incoming_call_connected_pkt) ###(032)=[passed] Test PPTP Call-Clear-Request >>> call_clear_request = PPTPCallClearRequest(call_id=4242) >>> call_clear_request_ref_data = hex_bytes('001000011a2b3c4d000c000010920000') >>> >>> assert raw(call_clear_request) == call_clear_request_ref_data >>> >>> call_clear_request_pkt = PPTP(call_clear_request_ref_data) >>> >>> assert isinstance(call_clear_request_pkt, PPTPCallClearRequest) >>> assert call_clear_request_pkt.magic_cookie == 0x1a2b3c4d >>> assert call_clear_request_pkt.call_id == 4242 ###(033)=[passed] Test PPTP Call-Disconnect-Notify >>> call_disconnect_notify = PPTPCallDisconnectNotify(call_id=4242, result_code='Admin Shutdown', error_code='None', ... cause_code=47, call_statistic='some description') >>> call_disconnect_notify_ref_data = hex_bytes('009400011a2b3c4d000d000010920300002f0000736f6d65206465736372697074696'\ ... 'f6e000000000000000000000000000000000000000000000000000000000000000000'\ ... '000000000000000000000000000000000000000000000000000000000000000000000'\ ... '000000000000000000000000000000000000000000000000000000000000000000000'\ ... '00000000000000000000') >>> >>> assert raw(call_disconnect_notify) == call_disconnect_notify_ref_data >>> >>> call_disconnect_notify_pkt = PPTP(call_disconnect_notify_ref_data) >>> >>> assert isinstance(call_disconnect_notify_pkt, PPTPCallDisconnectNotify) >>> assert call_disconnect_notify_pkt.magic_cookie == 0x1a2b3c4d >>> assert call_disconnect_notify_pkt.call_id == 4242 >>> assert call_disconnect_notify_pkt.result_code == 3 >>> assert call_disconnect_notify_pkt.error_code == 0 >>> assert call_disconnect_notify_pkt.cause_code == 47 >>> assert call_disconnect_notify_pkt.call_statistic == b'some description' + b'\0' * (128-len('some description')) ###(034)=[passed] Test PPTP WAN-Error-Notify >>> wan_error_notify = PPTPWANErrorNotify(peer_call_id=4242, crc_errors=1, framing_errors=2, ... hardware_overruns=3, buffer_overruns=4, time_out_errors=5, ... alignment_errors=6) >>> wan_error_notify_ref_data = hex_bytes('002800011a2b3c4d000e000010920000000000010000000200000003000000040000000500000006') >>> >>> assert raw(wan_error_notify) == wan_error_notify_ref_data >>> >>> wan_error_notify_pkt = PPTP(wan_error_notify_ref_data) >>> >>> assert isinstance(wan_error_notify_pkt, PPTPWANErrorNotify) >>> assert wan_error_notify_pkt.magic_cookie == 0x1a2b3c4d >>> assert wan_error_notify_pkt.peer_call_id == 4242 >>> assert wan_error_notify_pkt.crc_errors == 1 >>> assert wan_error_notify_pkt.framing_errors == 2 >>> assert wan_error_notify_pkt.hardware_overruns == 3 >>> assert wan_error_notify_pkt.buffer_overruns == 4 ###(035)=[passed] Test PPTP Set-Link-Info >>> set_link_info = PPTPSetLinkInfo(peer_call_id=4242, send_accm=0x0f0f0f0f, receive_accm=0xf0f0f0f0) >>> set_link_info_ref_data = hex_bytes('001800011a2b3c4d000f0000109200000f0f0f0ff0f0f0f0') >>> >>> assert raw(set_link_info) == set_link_info_ref_data >>> >>> set_link_info_pkt = PPTP(set_link_info_ref_data) >>> >>> assert isinstance(set_link_info_pkt, PPTPSetLinkInfo) >>> assert set_link_info_pkt.magic_cookie == 0x1a2b3c4d >>> assert set_link_info_pkt.peer_call_id == 4242 >>> assert set_link_info_pkt.send_accm == 0x0f0f0f0f >>> assert set_link_info_pkt.receive_accm == 0xf0f0f0f0 FIXME TODO: THIS IS VERY INCOMPLETE. ━ Run at 04:12:32 from [test/scapy/layers/quic.uts] by UTscapy in 0.05782818794250488 └ Passed=7 └ Failed=0 ###### ## QUIC dissection / build ###### ###(000)=[passed] QUIC - Dissect Client Initial Packet >>> from scapy.layers.quic import * >>> >>> pkt = QUIC(bytes.fromhex("c00000000108000102030405060705635f636964004103001c36a7ed78716be9711ba498b7ed868443bb2e0c514d4d848eadcc7a00d25ce9f9afa483978088de836be68c0b32a24595d7813ea5414a9199329a6d9f7f760dd8bb249bf3f53d9a77fbb7b395b8d66d7879a51fe59ef9601f79998eb3568e1fdc789f640acab3858a82ef2930fa5ce14b5b9ea0bdb29f4572da85aa3def39b7efafffa074b9267070d50b5d07842e49bba3bc787ff295d6ae3b514305f102afe5a047b3fb4c99eb92a274d244d60492c0e2e6e212cef0f9e3f62efd0955e71c768aa6bb3cd80bbb3755c8b7ebee32712f40f2245119487021b4b84e1565e3ca31967ac8604d4032170dec280aeefa095d08b3b7241ef6646a6c86e5c62ce08be099")) >>> assert QUIC_Initial in pkt >>> assert pkt.LongPacketType == 0 >>> assert pkt.DstConnID == b"\x00\x01\x02\x03\x04\x05\x06\x07" >>> assert pkt.SrcConnID == b"c_cid" >>> assert pkt.Length == 259 >>> assert len(pkt.load) + 1 == 259 >>> assert pkt.PacketNumber == 0 ###(001)=[passed] QUIC - Dissect Server Initial Packet >>> from scapy.layers.quic import * >>> >>> pkt = QUIC(bytes.fromhex("c00000000105635f63696405735f63696400407500836855d5d9c823d07c616882ca770279249864b556e51632257e2d8ab1fd0dc04b18b9203fb919d8ef5a33f378a627db674d3c7fce6ca5bb3e8cf90109cbb955665fc1a4b93d05f6eb83252f6631bcadc7402c10f65c52ed15b4429c9f64d84d64fa406cf0b517a926d62a54a9294136b143b033")) >>> assert QUIC_Initial in pkt >>> assert pkt.LongPacketType == 0 >>> assert pkt.DstConnID == b"c_cid" >>> assert pkt.SrcConnID == b"s_cid" >>> assert pkt.Length == 117 >>> assert len(pkt.load) + 1 == 117 >>> assert pkt.PacketNumber == 0 ###(002)=[passed] QUIC - Dissect Server Handshake Packet >>> from scapy.layers.quic import * >>> >>> pkt = QUIC(bytes.fromhex("e00000000105635f63696405735f63696440cf014420f919681c3f0f102a30f5e647a3399abf54bc8e80453134996ba33099056242f3b8e662bbfce42f3ef2b6ba87159147489f8479e849284e983fd905320a62fc7d67e9587797096ca60101d0b2685d8747811178133ad9172b7ff8ea83fd81a814bae27b953a97d57ebff4b4710dba8df82a6b49d7d7fa3d8179cbdb8683d4bfa832645401e5a56a76535f71c6fb3e616c241bb1f43bc147c296f591402997ed49aa0c55e31721d03e14114af2dc458ae03944de5126fe08d66a6ef3ba2ed1025f98fea6d6024998184687dc06")) >>> assert QUIC_Handshake in pkt >>> assert pkt.LongPacketType == 2 >>> assert pkt.DstConnID == b"c_cid" >>> assert pkt.SrcConnID == b"s_cid" >>> assert pkt.PacketNumber == 1 ###(003)=[passed] QUIC - QuicPacketNumberField / QuicPacketNumberBitFieldLenField - variable lengths >>> from scapy.layers.quic import * >>> >>> pkt = QUIC_Initial(DstConnID=b'p\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR', SrcConnID=b'\xf7\x10Q', PacketNumber=0xFF) >>> assert bytes(pkt) == b'\xc0\x00\x00\x00\x01\x0fp\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR\x03\xf7\x10Q\x00\x00\xff' >>> pkt = QUIC_Initial(bytes(pkt)) >>> assert pkt.DstConnIDLen == 15 >>> assert pkt.SrcConnIDLen == 3 >>> assert pkt.PacketNumberLen == 0 >>> assert pkt.PacketNumber == 0xFF >>> >>> pkt = QUIC_Initial(DstConnID=b'p\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR', SrcConnID=b'\xf7\x10Q', PacketNumber=0xFFFF) >>> assert bytes(pkt) == b'\xc1\x00\x00\x00\x01\x0fp\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR\x03\xf7\x10Q\x00\x00\xff\xff' >>> pkt = QUIC_Initial(bytes(pkt)) >>> assert pkt.PacketNumberLen == 1 >>> assert pkt.PacketNumber == 0xFFFF >>> >>> pkt = QUIC_Initial(DstConnID=b'p\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR', SrcConnID=b'\xf7\x10Q', PacketNumber=0xFFFFFF) >>> assert bytes(pkt) == b'\xc2\x00\x00\x00\x01\x0fp\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR\x03\xf7\x10Q\x00\x00\xff\xff\xff' >>> pkt = QUIC_Initial(bytes(pkt)) >>> assert pkt.PacketNumberLen == 2 >>> assert pkt.PacketNumber == 0xFFFFFF >>> >>> pkt = QUIC_Initial(DstConnID=b'p\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR', SrcConnID=b'\xf7\x10Q', PacketNumber=0xFFFFFFFF) >>> assert bytes(pkt) == b'\xc3\x00\x00\x00\x01\x0fp\xa2\x8e@\x96\xc5}\xd0\xff\xb6\xc3\xd8\x1b\xcaR\x03\xf7\x10Q\x00\x00\xff\xff\xff\xff' >>> pkt = QUIC_Initial(bytes(pkt)) >>> assert pkt.PacketNumberLen == 3 >>> assert pkt.PacketNumber == 0xFFFFFFFF ###(004)=[passed] QUIC - QuicPacketNumberField / QuicPacketNumberBitFieldLenField - Out of range >>> import struct >>> from scapy.layers.quic import * >>> >>> try: ... pkt = QUIC_Initial(PacketNumber=0xFFFFFFFFFF) ... bytes(pkt) ... assert False, "QUIC Packet Number length should fail" ... except struct.error: ... pass ... ###(005)=[passed] QUIC - QuicVarIntField - variable lengths >>> from scapy.layers.quic import * >>> >>> pkt = QUIC_Initial(Length=1) >>> assert bytes(pkt) == b'\xc0\x00\x00\x00\x01\x00\x00\x00\x01\x00' >>> assert QUIC_Initial(bytes(pkt)).Length == 1 >>> >>> pkt = QUIC_Initial(Length=1 << 9) >>> assert bytes(pkt) == b'\xc0\x00\x00\x00\x01\x00\x00\x00B\x00\x00' >>> assert QUIC_Initial(bytes(pkt)).Length == 1 << 9 >>> >>> pkt = QUIC_Initial(Length=1 << 17) >>> assert bytes(pkt) == b'\xc0\x00\x00\x00\x01\x00\x00\x00\x80\x02\x00\x00\x00' >>> assert QUIC_Initial(bytes(pkt)).Length == 1 << 17 >>> >>> pkt = QUIC_Initial(Length=4611686018427387903) >>> assert bytes(pkt) == b'\xc0\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00' >>> assert QUIC_Initial(bytes(pkt)).Length == 4611686018427387903 ###(006)=[passed] QUIC - QuicVarIntField - Out of range >>> import struct >>> from scapy.layers.quic import * >>> >>> try: ... pkt = QUIC_Initial(Length=0xFFFFFFFFFFFFFFFF) ... bytes(pkt) ... assert False, "QUIC Variable length should fail" ... except struct.error: ... pass ... Scapy Radius layer tests ━ Run at 04:12:33 from [test/scapy/layers/radius.uts] by UTscapy in 0.15368127822875977 └ Passed=16 └ Failed=0 ###### ## RADIUS tests ###### ###(000)=[passed] IP/UDP/RADIUS - Build >>> s = raw(IP(src="127.0.0.1", dst="127.0.0.1")/UDP(sport=1812)/Radius(authenticator="scapy")/RadiusAttribute(value="scapy")) >>> s == b'E\x00\x007\x00\x01\x00\x00@\x11|\xb3\x7f\x00\x00\x01\x7f\x00\x00\x01\x07\x14\x07\x14\x00#U\xb3\x01\x00\x00\x1bscapy\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x07scapy' True ###(001)=[passed] IP/UDP/RADIUS - Dissection >>> p = IP(s) >>> Radius in p and len(p[Radius].attributes) == 1 and p[Radius].attributes[0].value == b"scapy" True ###(002)=[passed] RADIUS - Access-Request - Dissection (1) >>> s = b'\x01\xae\x01\x17>k\xd4\xc4\x19V\x0b*1\x99\xc8D\xea\xc2\x94Z\x01\x06leap\x06\x06\x00\x00\x00\x02\x1a\x1b\x00\x00\x00\t\x01\x15service-type=Framed\x0c\x06\x00\x00#\xee\x1e\x13AC-7E-8A-4E-E2-92\x1f\x1300-26-73-9E-0F-D3O\x0b\x02\x01\x00\t\x01leapP\x12U\xbc\x12\xcdM\x00\xf8\xdb4\xf1\x18r\xca_\x8c\xf6f\x02\x1a1\x00\x00\x00\t\x01+audit-session-id=0AC8090E0000001A0354CA00\x1a\x14\x00\x00\x00\t\x01\x0emethod=dot1x\x08\x06\xc0\xa8\n\xb9\x04\x06\xc0\xa8\n\x80\x1a\x1d\x00\x00\x00\t\x02\x17GigabitEthernet1/0/18W\x17GigabitEthernet1/0/18=\x06\x00\x00\x00\x0f\x05\x06\x00\x00\xc3\xc6' >>> radius_packet = Radius(s) >>> assert radius_packet.id == 174 >>> assert radius_packet.len == 279 >>> assert radius_packet.authenticator == b'>k\xd4\xc4\x19V\x0b*1\x99\xc8D\xea\xc2\x94Z' >>> assert len(radius_packet.attributes) == 17 >>> assert radius_packet.attributes[0].type == 1 >>> assert type(radius_packet.attributes[0]) == RadiusAttr_User_Name >>> assert radius_packet.attributes[0].len == 6 >>> assert radius_packet.attributes[0].value == b"leap" >>> assert radius_packet.attributes[1].type == 6 >>> assert type(radius_packet.attributes[1]) == RadiusAttr_Service_Type >>> assert radius_packet.attributes[1].len == 6 >>> assert radius_packet.attributes[1].value == 2 >>> assert radius_packet.attributes[2].type == 26 >>> assert type(radius_packet.attributes[2]) == RadiusAttr_Vendor_Specific >>> assert radius_packet.attributes[2].len == 27 >>> assert radius_packet.attributes[2].vendor_id == 9 >>> assert radius_packet.attributes[2].vendor_type == 1 >>> assert radius_packet.attributes[2].vendor_len == 21 >>> assert radius_packet.attributes[2].value == b"service-type=Framed" >>> assert radius_packet.attributes[6].type == 79 >>> assert type(radius_packet.attributes[6]) == RadiusAttr_EAP_Message >>> assert radius_packet.attributes[6].len == 11 >>> assert radius_packet.attributes[6].value.haslayer(EAP) >>> assert radius_packet.attributes[6].value[EAP].code == 2 >>> assert radius_packet.attributes[6].value[EAP].id == 1 >>> assert radius_packet.attributes[6].value[EAP].len == 9 >>> assert radius_packet.attributes[6].value[EAP].type == 1 >>> assert hasattr(radius_packet.attributes[6].value[EAP], "identity") >>> assert radius_packet.attributes[6].value[EAP].identity == b"leap" >>> assert radius_packet.attributes[7].type == 80 >>> assert type(radius_packet.attributes[7]) == RadiusAttr_Message_Authenticator >>> assert radius_packet.attributes[7].len == 18 >>> assert radius_packet.attributes[7].value == b'U\xbc\x12\xcdM\x00\xf8\xdb4\xf1\x18r\xca_\x8c\xf6' >>> assert radius_packet.attributes[11].type == 8 >>> assert type(radius_packet.attributes[11]) == RadiusAttr_Framed_IP_Address >>> assert radius_packet.attributes[11].len == 6 >>> assert radius_packet.attributes[11].value == '192.168.10.185' >>> assert radius_packet.attributes[16].type == 5 >>> assert type(radius_packet.attributes[16]) == RadiusAttr_NAS_Port >>> assert radius_packet.attributes[16].len == 6 >>> assert radius_packet.attributes[16].value == 50118 >>> >>> f,v = radius_packet.getfield_and_val("authenticator") >>> assert f.i2repr(None, v) == '3e6bd4c419560b2a3199c844eac2945a' ###(003)=[passed] RADIUS - compute_message_authenticator() >>> ram = radius_packet[RadiusAttr_Message_Authenticator] >>> assert ram.compute_message_authenticator(radius_packet, b"dummy bytes", b"scapy") == b'I\x85l\x8f\xa5\xd6\xbc\xb5\x08\xe0<\xebH\x9d\xfb?' ###(004)=[passed] RADIUS - Access-Challenge - Dissection (2) >>> s = b'\x0b\xae\x00[\xc7\xae\xfc6\xa1=\xb5\x99&^\xdf=\xe9\x00\xa6\xe8\x12\rHello, leapO\x16\x01\x02\x00\x14\x11\x01\x00\x08\xb8\xc4\x1a4\x97x\xd3\x82leapP\x12\xd3\x12\x17\xa6\x0c.\x94\x85\x03]t\xd1\xdb\xd0\x13\x8c\x18\x12iQs\xf7iSb@k\x9d,\xa0\x99\x8ehO' >>> radius_packet = Radius(s) >>> assert radius_packet.id == 174 >>> assert radius_packet.len == 91 >>> assert radius_packet.authenticator == b'\xc7\xae\xfc6\xa1=\xb5\x99&^\xdf=\xe9\x00\xa6\xe8' >>> assert len(radius_packet.attributes) == 4 >>> assert radius_packet.attributes[0].type == 18 >>> assert type(radius_packet.attributes[0]) == RadiusAttribute >>> assert radius_packet.attributes[0].len == 13 >>> assert radius_packet.attributes[0].value == b"Hello, leap" >>> assert radius_packet.attributes[1].type == 79 >>> assert type(radius_packet.attributes[1]) == RadiusAttr_EAP_Message >>> assert radius_packet.attributes[1].len == 22 >>> assert radius_packet.attributes[1][EAP].code == 1 >>> assert radius_packet.attributes[1][EAP].id == 2 >>> assert radius_packet.attributes[1][EAP].len == 20 >>> assert radius_packet.attributes[1][EAP].type == 17 >>> assert radius_packet.attributes[2].type == 80 >>> assert type(radius_packet.attributes[2]) == RadiusAttr_Message_Authenticator >>> assert radius_packet.attributes[2].len == 18 >>> assert radius_packet.attributes[2].value == b'\xd3\x12\x17\xa6\x0c.\x94\x85\x03]t\xd1\xdb\xd0\x13\x8c' >>> assert radius_packet.attributes[3].type == 24 >>> assert type(radius_packet.attributes[3]) == RadiusAttr_State >>> assert radius_packet.attributes[3].len == 18 >>> assert radius_packet.attributes[3].value == b'iQs\xf7iSb@k\x9d,\xa0\x99\x8ehO' ###(005)=[passed] RADIUS - Access-Request - Dissection (3) >>> s = b'\x01\xaf\x01DC\xbe!J\x08\xdf\xcf\x9f\x00v~,\xfb\x8e`\xc8\x01\x06leap\x06\x06\x00\x00\x00\x02\x1a\x1b\x00\x00\x00\t\x01\x15service-type=Framed\x0c\x06\x00\x00#\xee\x1e\x13AC-7E-8A-4E-E2-92\x1f\x1300-26-73-9E-0F-D3O&\x02\x02\x00$\x11\x01\x00\x18\rE\xc9\x92\xf6\x9ae\x04\xa2\x06\x13\x8f\x0b#\xf1\xc56\x8eU\xd9\x89\xe5\xa1)leapP\x12|\x1c\x9d[dv\x9c\x19\x96\xc6\xec\xb82\x8f\n f\x02\x1a1\x00\x00\x00\t\x01+audit-session-id=0AC8090E0000001A0354CA00\x1a\x14\x00\x00\x00\t\x01\x0emethod=dot1x\x08\x06\xc0\xa8\n\xb9\x04\x06\xc0\xa8\n\x80\x1a\x1d\x00\x00\x00\t\x02\x17GigabitEthernet1/0/18W\x17GigabitEthernet1/0/18=\x06\x00\x00\x00\x0f\x05\x06\x00\x00\xc3\xc6\x18\x12iQs\xf7iSb@k\x9d,\xa0\x99\x8ehO' >>> radius_packet = Radius(s) >>> assert radius_packet.id == 175 >>> assert radius_packet.len == 324 >>> assert radius_packet.authenticator == b'C\xbe!J\x08\xdf\xcf\x9f\x00v~,\xfb\x8e`\xc8' >>> assert len(radius_packet.attributes) == 18 >>> assert radius_packet.attributes[0].type == 1 >>> assert type(radius_packet.attributes[0]) == RadiusAttr_User_Name >>> assert radius_packet.attributes[0].len == 6 >>> assert radius_packet.attributes[0].value == b"leap" >>> assert radius_packet.attributes[1].type == 6 >>> assert type(radius_packet.attributes[1]) == RadiusAttr_Service_Type >>> assert radius_packet.attributes[1].len == 6 >>> assert radius_packet.attributes[1].value == 2 >>> assert radius_packet.attributes[2].type == 26 >>> assert type(radius_packet.attributes[2]) == RadiusAttr_Vendor_Specific >>> assert radius_packet.attributes[2].len == 27 >>> assert radius_packet.attributes[2].vendor_id == 9 >>> assert radius_packet.attributes[2].vendor_type == 1 >>> assert radius_packet.attributes[2].vendor_len == 21 >>> assert radius_packet.attributes[2].value == b"service-type=Framed" >>> assert radius_packet.attributes[6].type == 79 >>> assert type(radius_packet.attributes[6]) == RadiusAttr_EAP_Message >>> assert radius_packet.attributes[6].len == 38 >>> assert radius_packet.attributes[6].value.haslayer(EAP) >>> assert radius_packet.attributes[6].value[EAP].code == 2 >>> assert radius_packet.attributes[6].value[EAP].id == 2 >>> assert radius_packet.attributes[6].value[EAP].len == 36 >>> assert radius_packet.attributes[6].value[EAP].type == 17 >>> assert radius_packet.attributes[7].type == 80 >>> assert type(radius_packet.attributes[7]) == RadiusAttr_Message_Authenticator >>> assert radius_packet.attributes[7].len == 18 >>> assert radius_packet.attributes[7].value == b'|\x1c\x9d[dv\x9c\x19\x96\xc6\xec\xb82\x8f\n ' >>> assert radius_packet.attributes[11].type == 8 >>> assert type(radius_packet.attributes[11]) == RadiusAttr_Framed_IP_Address >>> assert radius_packet.attributes[11].len == 6 >>> assert radius_packet.attributes[11].value == '192.168.10.185' >>> assert radius_packet.attributes[16].type == 5 >>> assert type(radius_packet.attributes[16]) == RadiusAttr_NAS_Port >>> assert radius_packet.attributes[16].len == 6 >>> assert radius_packet.attributes[16].value == 50118 >>> assert radius_packet.attributes[17].type == 24 >>> assert type(radius_packet.attributes[17]) == RadiusAttr_State >>> assert radius_packet.attributes[17].len == 18 >>> assert radius_packet.attributes[17].value == b'iQs\xf7iSb@k\x9d,\xa0\x99\x8ehO' ###(006)=[passed] RADIUS - Access-Challenge - Dissection (4) >>> s = b'\x0b\xaf\x00K\x82 \x95=\xfd\x80\x05 -l}\xab)\xa5kU\x12\rHello, leapO\x06\x03\x03\x00\x04P\x12l0\xb9\x8d\xca\xfc!\xf3\xa7\x08\x80\xe1\xf6}\x84\xff\x18\x12iQs\xf7hRb@k\x9d,\xa0\x99\x8ehO' >>> radius_packet = Radius(s) >>> assert radius_packet.id == 175 >>> assert radius_packet.len == 75 >>> assert radius_packet.authenticator == b'\x82 \x95=\xfd\x80\x05 -l}\xab)\xa5kU' >>> assert len(radius_packet.attributes) == 4 >>> assert radius_packet.attributes[0].type == 18 >>> assert type(radius_packet.attributes[0]) == RadiusAttribute >>> assert radius_packet.attributes[0].len == 13 >>> assert radius_packet.attributes[0].value == b"Hello, leap" >>> assert radius_packet.attributes[1].type == 79 >>> assert type(radius_packet.attributes[1]) == RadiusAttr_EAP_Message >>> assert radius_packet.attributes[1].len == 6 >>> assert radius_packet.attributes[1][EAP].code == 3 >>> assert radius_packet.attributes[1][EAP].id == 3 >>> assert radius_packet.attributes[1][EAP].len == 4 >>> assert radius_packet.attributes[2].type == 80 >>> assert type(radius_packet.attributes[2]) == RadiusAttr_Message_Authenticator >>> assert radius_packet.attributes[2].len == 18 >>> assert radius_packet.attributes[2].value == b'l0\xb9\x8d\xca\xfc!\xf3\xa7\x08\x80\xe1\xf6}\x84\xff' >>> assert radius_packet.attributes[3].type == 24 >>> assert type(radius_packet.attributes[3]) == RadiusAttr_State >>> assert radius_packet.attributes[3].len == 18 >>> assert radius_packet.attributes[3].value == b'iQs\xf7hRb@k\x9d,\xa0\x99\x8ehO' ###(007)=[passed] RADIUS - Response Authenticator computation >>> s = b'\x01\xae\x01\x17>k\xd4\xc4\x19V\x0b*1\x99\xc8D\xea\xc2\x94Z\x01\x06leap\x06\x06\x00\x00\x00\x02\x1a\x1b\x00\x00\x00\t\x01\x15service-type=Framed\x0c\x06\x00\x00#\xee\x1e\x13AC-7E-8A-4E-E2-92\x1f\x1300-26-73-9E-0F-D3O\x0b\x02\x01\x00\t\x01leapP\x12U\xbc\x12\xcdM\x00\xf8\xdb4\xf1\x18r\xca_\x8c\xf6f\x02\x1a1\x00\x00\x00\t\x01+audit-session-id=0AC8090E0000001A0354CA00\x1a\x14\x00\x00\x00\t\x01\x0emethod=dot1x\x08\x06\xc0\xa8\n\xb9\x04\x06\xc0\xa8\n\x80\x1a\x1d\x00\x00\x00\t\x02\x17GigabitEthernet1/0/18W\x17GigabitEthernet1/0/18=\x06\x00\x00\x00\x0f\x05\x06\x00\x00\xc3\xc6' >>> access_request = Radius(s) >>> s = b'\x0b\xae\x00[\xc7\xae\xfc6\xa1=\xb5\x99&^\xdf=\xe9\x00\xa6\xe8\x12\rHello, leapO\x16\x01\x02\x00\x14\x11\x01\x00\x08\xb8\xc4\x1a4\x97x\xd3\x82leapP\x12\xd3\x12\x17\xa6\x0c.\x94\x85\x03]t\xd1\xdb\xd0\x13\x8c\x18\x12iQs\xf7iSb@k\x9d,\xa0\x99\x8ehO' >>> access_challenge = Radius(s) >>> access_challenge.compute_authenticator(access_request.authenticator, b"radiuskey") == access_challenge.authenticator True ###(008)=[passed] RADIUS - Layers (1) >>> radius_attr = RadiusAttr_EAP_Message(value = EAP()) >>> assert RadiusAttr_EAP_Message in radius_attr >>> assert RadiusAttribute in radius_attr >>> type(radius_attr[RadiusAttribute]) >>> assert type(radius_attr[RadiusAttribute]) == RadiusAttr_EAP_Message >>> assert EAP in radius_attr.value ###(009)=[passed] RADIUS - sessions (1) >>> p = IP()/TCP(sport=1812)/Radius(authenticator="scapy")/RadiusAttribute(value="scapy") >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 ###(010)=[passed] RADIUS - sessions (2) >>> p = IP()/UDP(sport=1812)/Radius(authenticator="scapy")/RadiusAttribute(value="scapy") >>> l = PacketList(p) >>> s = l.sessions() # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e >>> assert len(s) == 1 ###(011)=[passed] Issue GH#1407 >>> s = b"Z\xa5\xaaUZ\xa5\xaaU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xc5\x00\x00\x14'\x02\x00\x00\x001\x9a\xe44\xea4" >>> isinstance(Radius(s), Radius) True ###(012)=[passed] RADIUS - attributes with IPv4 addresses >>> r = raw(RadiusAttr_NAS_IP_Address()) >>> p = RadiusAttr_NAS_IP_Address(r) >>> assert p.type == 4 >>> >>> r = raw(RadiusAttr_Framed_IP_Address()) >>> p = RadiusAttr_Framed_IP_Address(r) >>> assert p.type == 8 ###(013)=[passed] Radius - fragmented EAP - GH2832 >>> conf.contribs["radius"] = {} >>> >>> s = b'\x0b\x1c\x04,%[\xa5\x11\x0b\xdc\x8f\x94\xf2\xe0\x01\x8a\xacNI\x8eO\xff\x01\x97\x00\xff\r\xc0\x00\x1a\x15\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x03\x00P\x12n\x14\xd1\x9f\xa8\xf3\t\xe4\xc0\x82\xd6\x07AB\xd5\xf5\x18\x12\x19\xd6\x9eX\x05A\x93jo\x9a\t:\xa9g_\xc2' >>> >>> pkt = Radius(s) >>> assert len(pkt.attributes) == 3 >>> assert pkt.attributes[0].value.tls_data == b'\0' * 244 >>> assert pkt.attributes[1].type == 80 >>> assert pkt.attributes[1].len == 18 >>> assert pkt.attributes[2].type == 24 >>> assert pkt.attributes[2].len == 18 >>> >>> conf.contribs.setdefault("radius", {})["auto-defrag"] = False >>> >>> with no_debug_dissector(): ... pkt = Radius(s) ... >>> assert len(pkt.attributes) == 4 >>> assert pkt.attributes[0].type == 79 >>> assert pkt.attributes[1].type == 79 >>> assert pkt.attributes[1].value.load == b'\0' >>> assert pkt.attributes[2].type == 80 >>> assert pkt.attributes[2].len == 18 >>> assert pkt.attributes[3].type == 24 >>> assert pkt.attributes[3].len == 18 ###(014)=[passed] RadiusAttr_User_Password - Parse and Decrypt >>> r = b'\x01\x00\x00\x1c0x10x20x30x40x50\x02\x08geheim' >>> p = Radius(r) >>> assert isinstance(p.attributes[0], RadiusAttr_User_Password) >>> >>> p = Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00Z\x00\x8e\x00\x00@\x11|\x03\x7f\x00\x00\x01\x7f\x00\x00\x01\x9f<\x07\x14\x00F\xfeY\x01\xfb\x00>s0\x00\x13\x86x\xd7\x11\xc4\x9e\xe1=\xce&r>> assert isinstance(p.attributes[2], RadiusAttr_User_Password) >>> assert p.attributes[2].decrypt(p[Radius], b"SECRET") == b"password" ###(015)=[passed] Radius - summary >>> pkt = Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00\xado\x90@\x00@\x11\xcc\xad\x7f\x00\x00\x01\x7f\x00\x00\x01\xe1\xea\x07\x14\x00\x99\xfe\xac\x01\x01\x00\x91\xe3\x99\x1b\xec\x1e\x82\x8a\xfcb\xf6\xbf\x824\x13\xc8\x1d\x04\x06\x7f\x00\x01\x01 \x07mynas\x01\x06user\x06\x06\x00\x00\x00\x01\x1a\x18\x00\x00\x017\x0b\x12(\xa0\x18u\x0c\x13\x8c~@\xb71\xa1\xe9\xfd\x1e\xdc\x1a:\x00\x00\x017\x194\x00\x00\xe2\x1fY\xd4O8\x8b\xc6\xf3\x07\xd6\xe5?:3!\x00\x00\x00\x00\x00\x00\x00\x00g-\xd8%\x03\x04\xed\xa7\xc6O\x83"\xdc\xe2\x07\xaa\xf8\x15\xed\xc3~\x08GHP\x12/)\xa2\t\x9dA8\xf9>\xa7V\xba\xf6\xf0LG') >>> assert pkt.summary() == "Ether / IP / UDP / RADIUS Access-Request (User:'user' MS-CHAP2)" >>> >>> pkt = Ether(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00E\x00\x00Z\x00\x8e\x00\x00@\x11|\x03\x7f\x00\x00\x01\x7f\x00\x00\x01\x9f<\x07\x14\x00F\xfeY\x01\xfb\x00>s0\x00\x13\x86x\xd7\x11\xc4\x9e\xe1=\xce&r>> assert pkt.summary() == "Ether / IP / UDP / RADIUS Access-Request (User:'user' PAP)" RIP regression tests for Scapy ━ Run at 04:12:33 from [test/scapy/layers/rip.uts] by UTscapy in 0.023548603057861328 └ Passed=3 └ Failed=0 ###### ## RIP tests ###### ###(000)=[passed] RIP - build >>> s = raw(IP()/UDP(sport=520)/RIP()/RIPEntry()/RIPAuth(authtype=2, password="scapy")) >>> s == b'E\x00\x00H\x00\x01\x00\x00@\x11|\xa2\x7f\x00\x00\x01\x7f\x00\x00\x01\x02\x08\x02\x08\x004\xae\x99\x01\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\xff\x00\x02scapy\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' True ###(001)=[passed] RIP - UDP bindings >>> w = IP(raw(IP()/UDP()/RIP()/RIPEntry()/RIPAuth(authtype=2, password="scapy"))) >>> assert RIPAuth in w >>> assert w[RIPAuth].password.startswith(b"scapy") ###(002)=[passed] RIP - dissection >>> p = IP(s) >>> RIPEntry in p and RIPAuth in p and p[RIPAuth].password.startswith(b"scapy") True RTP regression tests for Scapy ━ Run at 04:12:33 from [test/scapy/layers/rtp.uts] by UTscapy in 0.015960216522216797 └ Passed=3 └ Failed=0 ###### ## RTP tests ###### ###(000)=[passed] test rtp with extension header >>> data = b'\x90o\x14~YY\xf5h\xcc#\xd7\xcfUH\x00\x03\x167116621 \x000\x00' >>> pkt = RTP(data) >>> assert "RTP" in pkt >>> parsed = pkt["RTP"] >>> assert parsed.version == 2 >>> assert parsed.extension >>> assert parsed.numsync == 0 >>> assert not parsed.marker >>> assert parsed.payload_type == 111 >>> assert parsed.sequence == 5246 >>> assert parsed.timestamp == 1499067752 >>> assert parsed.sourcesync == 0xcc23d7cf >>> assert "RTPExtension" in parsed, parsed.show() >>> assert parsed["RTPExtension"].header_id == 0x5548 >>> assert parsed["RTPExtension"].header == [0x16373131,0x36363231,0x20003000] ###(001)=[passed] test layer creation >>> created = RTP(extension=True, payload_type="PCMA", sequence=0x1234, timestamp=12345678, sourcesync=0xabcdef01) >>> created /= RTPExtension(header_id=0x4321, header=[0x11223344]) >>> assert raw(created) == b'\x90\x08\x124\x00\xbcaN\xab\xcd\xef\x01C!\x00\x01\x11"3D' >>> parsed = RTP(raw(created)) >>> assert parsed.payload_type == 8 >>> assert "RTPExtension" in parsed, parsed.show() >>> assert parsed["RTPExtension"].header == [0x11223344] ###(002)=[passed] test RTP without extension >>> created = RTP(extension=False, payload_type="DVI4", sequence=0x1234, timestamp=12345678, sourcesync=0xabcdef01) >>> assert raw(created) == b'\x80\x11\x124\x00\xbcaN\xab\xcd\xef\x01' >>> parsed = RTP(raw(created)) >>> assert parsed.sourcesync == 0xabcdef01 >>> assert "RTPExtension" not in parsed SCTP regression tests for Scapy ━ Run at 04:12:33 from [test/scapy/layers/sctp.uts] by UTscapy in 0.13956141471862793 └ Passed=31 └ Failed=0 ###### ## SCTP ###### ###(000)=[passed] SCTP - Chunk Init - build >>> s = raw(IP()/SCTP()/SCTPChunkInit(params=[SCTPChunkParamIPv4Addr()])) >>> s == b'E\x00\x00<\x00\x01\x00\x00@\x84|;\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00@,\x0b_\x01\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x08\x7f\x00\x00\x01' True ###(001)=[passed] SCTP - Chunk Init - dissection >>> p = IP(s) >>> SCTPChunkParamIPv4Addr in p and p[SCTP].chksum == 0x402c0b5f and p[SCTPChunkParamIPv4Addr].addr == "127.0.0.1" True ###(002)=[passed] SCTP - SCTPChunkSACK - build >>> s = raw(IP()/SCTP()/SCTPChunkSACK(gap_ack_list=["7:28"])) >>> s == b'E\x00\x004\x00\x01\x00\x00@\x84|C\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00;\x01\xd4\x04\x03\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x1c' True ###(003)=[passed] SCTP - SCTPChunkSACK - dissection >>> p = IP(s) >>> SCTPChunkSACK in p and p[SCTP].chksum == 0x3b01d404 and p[SCTPChunkSACK].gap_ack_list[0] == "7:28" True ###(004)=[passed] SCTP - answers >>> (IP()/SCTP()).answers(IP()/SCTP()) == True True ###(005)=[passed] SCTP basic header - Dissection >>> blob = b"\x1A\x85\x26\x94\x00\x00\x00\x0D\x00\x00\x04\xD2" >>> p = SCTP(blob) >>> assert p.dport == 9876 >>> assert p.sport == 6789 >>> assert p.tag == 13 >>> assert p.chksum == 1234 ###(006)=[passed] basic SCTPChunkData - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x61\x74\x61" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkData) >>> assert p.reserved == 0 >>> assert p.delay_sack == 0 >>> assert p.unordered == 0 >>> assert p.beginning == 0 >>> assert p.ending == 0 >>> assert p.tsn == 0 >>> assert p.stream_id == 0 >>> assert p.stream_seq == 0 >>> assert p.len == (len("data") + 16) >>> assert p.data == b"data" ###(007)=[passed] basic SCTPChunkIData - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x64\x61\x74\x61" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkIData) >>> assert p.reserved == 0 >>> assert p.delay_sack == 0 >>> assert p.unordered == 0 >>> assert p.beginning == 1 >>> assert p.ending == 0 >>> assert p.tsn == 0 >>> assert p.stream_id == 0 >>> assert p.reserved_16 == 0 >>> assert p.ppid_fsn == 2 >>> assert p.len == (len("data") + 20) >>> assert p.data == b"data" ###(008)=[passed] basic SCTPChunkForwardTSN - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x10\x00\x00\x1e\x61\x00\x0a\x00\x01\x00\x0b\x00\x02" >>> p = SCTP(blob).lastlayer() >>> skip1 = SCTPForwardSkip(p.skips[0].load[0:4]) >>> skip2 = SCTPForwardSkip(p.skips[0].load[4::]) >>> assert isinstance(p, SCTPChunkForwardTSN) >>> assert p.len == 16 >>> assert p.new_tsn == 7777 >>> assert skip1.stream_id == 10 >>> assert skip1.stream_seq == 1 >>> assert skip2.stream_id == 11 >>> assert skip2.stream_seq == 2 ###(009)=[passed] basic SCTPChunkIForwardTSN - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x18\x00\x00\x1e\x61\x00\x0a\x00\x00\x00\x00\x00\x14\x00\x0b\x00\x01\x00\x00\x00\x15" >>> p = SCTP(blob).lastlayer() >>> skip1 = SCTPIForwardSkip(p.skips[0].load[0:8]) >>> skip2 = SCTPIForwardSkip(p.skips[0].load[8::]) >>> assert isinstance(p, SCTPChunkIForwardTSN) >>> assert p.len == 24 >>> assert p.new_tsn == 7777 >>> assert skip1.stream_id == 10 >>> assert skip1.reserved == 0 >>> assert skip1.unordered == 0 >>> assert skip1.message_id == 20 >>> assert skip2.stream_id == 11 >>> assert skip2.reserved == 0 >>> assert skip2.unordered == 1 >>> assert skip2.message_id == 21 ###(010)=[passed] basic SCTPChunkInit - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkInit) >>> assert p.flags == 0 >>> assert p.len == 20 >>> assert p.init_tag == 0 >>> assert p.a_rwnd == 0 >>> assert p.n_out_streams == 0 >>> assert p.n_in_streams == 0 >>> assert p.init_tsn == 0 >>> assert p.params == [] ###(011)=[passed] SCTPChunkInit multiple valid parameters - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x5C\x00\x00\x00\x65\x00\x00\x00\x66\x00\x67\x00\x68\x00\x00\x00\x69\x00\x0C\x00\x06\x00\x05\x00\x00\x80\x00\x00\x04\xC0\x00\x00\x04\x80\x08\x00\x07\x0F\xC1\x80\x00\x80\x03\x00\x04\x80\x02\x00\x24\x87\x77\x21\x29\x3F\xDA\x62\x0C\x06\x6F\x10\xA5\x39\x58\x60\x98\x4C\xD4\x59\xD8\x8A\x00\x85\xFB\x9E\x2E\x66\xBA\x3A\x23\x54\xEF\x80\x04\x00\x06\x00\x01\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkInit) >>> assert p.flags == 0 >>> assert p.len == 92 >>> assert p.init_tag == 101 >>> assert p.a_rwnd == 102 >>> assert p.n_out_streams == 103 >>> assert p.n_in_streams == 104 >>> assert p.init_tsn == 105 >>> assert len(p.params) == 7 >>> params = {type(param): param for param in p.params} >>> assert (set(params.keys()) == {SCTPChunkParamECNCapable, SCTPChunkParamFwdTSN, ... SCTPChunkParamSupportedExtensions, SCTPChunkParamChunkList, ... SCTPChunkParamRandom, SCTPChunkParamRequestedHMACFunctions, ... SCTPChunkParamSupportedAddrTypes}) >>> assert params[SCTPChunkParamECNCapable] == SCTPChunkParamECNCapable() >>> assert params[SCTPChunkParamFwdTSN] == SCTPChunkParamFwdTSN() >>> assert params[SCTPChunkParamSupportedExtensions] == SCTPChunkParamSupportedExtensions(len=7) >>> assert params[SCTPChunkParamChunkList] == SCTPChunkParamChunkList(len=4) >>> assert params[SCTPChunkParamRandom].len == 4+32 >>> assert len(params[SCTPChunkParamRandom].random) == 32 >>> assert params[SCTPChunkParamRequestedHMACFunctions] == SCTPChunkParamRequestedHMACFunctions(len=6) >>> assert params[SCTPChunkParamSupportedAddrTypes] == SCTPChunkParamSupportedAddrTypes(len=6) ###(012)=[passed] basic SCTPChunkInitAck - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkInitAck) >>> assert p.flags == 0 >>> assert p.len == 20 >>> assert p.init_tag == 0 >>> assert p.a_rwnd == 0 >>> assert p.n_out_streams == 0 >>> assert p.n_in_streams == 0 >>> assert p.init_tsn == 0 >>> assert p.params == [] ###(013)=[passed] SCTPChunkInitAck with state cookie - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x4C\x00\x00\x00\x65\x00\x00\x00\x66\x00\x67\x00\x68\x00\x00\x00\x69\x80\x00\x00\x04\x00\x0B\x00\x0D\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x00\x00\x00\xC0\x00\x00\x04\x80\x08\x00\x07\x0F\xC1\x80\x00\x00\x07\x00\x14\x00\x10\x9E\xB2\x86\xCE\xE1\x7D\x0F\x6A\xAD\xFD\xB3\x5D\xBC\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkInitAck) >>> assert p.flags == 0 >>> assert p.len == 76 >>> assert p.init_tag == 101 >>> assert p.a_rwnd == 102 >>> assert p.n_out_streams == 103 >>> assert p.n_in_streams == 104 >>> assert p.init_tsn == 105 >>> assert len(p.params) == 5 >>> params = {type(param): param for param in p.params} >>> assert (set(params.keys()) == {SCTPChunkParamECNCapable, SCTPChunkParamHostname, ... SCTPChunkParamFwdTSN, SCTPChunkParamSupportedExtensions, ... SCTPChunkParamStateCookie}) >>> assert params[SCTPChunkParamECNCapable] == SCTPChunkParamECNCapable() >>> assert raw(params[SCTPChunkParamHostname]) == raw(SCTPChunkParamHostname(len=13, hostname="localhost")) >>> assert params[SCTPChunkParamFwdTSN] == SCTPChunkParamFwdTSN() >>> assert params[SCTPChunkParamSupportedExtensions] == SCTPChunkParamSupportedExtensions(len=7) >>> assert params[SCTPChunkParamStateCookie].len == 4+16 >>> assert len(params[SCTPChunkParamStateCookie].cookie) == 16 ###(014)=[passed] basic SCTPChunkSACK - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkSACK) >>> assert p.flags == 0 >>> assert p.len == 16 >>> assert p.cumul_tsn_ack == 0 >>> assert p.a_rwnd == 0 >>> assert p.n_gap_ack == 0 >>> assert p.n_dup_tsn == 0 >>> assert p.gap_ack_list == [] >>> assert p.dup_tsn_list == [] ###(015)=[passed] basic SCTPChunkHeartbeatReq - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkHeartbeatReq) >>> assert p.flags == 0 >>> assert p.len == 4 >>> assert p.params == [] ###(016)=[passed] basic SCTPChunkHeartbeatAck - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkHeartbeatAck) >>> assert p.flags == 0 >>> assert p.len == 4 >>> assert p.params == [] ###(017)=[passed] basic SCTPChunkAbort - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkAbort) >>> assert p.reserved == 0 >>> assert p.TCB == 0 >>> assert p.len == 4 >>> assert p.error_causes == b"" ###(018)=[passed] basic SCTPChunkShutDown - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x08\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkShutdown) >>> assert p.flags == 0 >>> assert p.len == 8 >>> assert p.cumul_tsn_ack == 0 ###(019)=[passed] basic SCTPChunkShutDownAck - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkShutdownAck) >>> assert p.flags == 0 >>> assert p.len == 4 ###(020)=[passed] basic SCTPChunkError - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkError) >>> assert p.flags == 0 >>> assert p.len == 4 >>> assert p.error_causes == b"" ###(021)=[passed] basic SCTPChunkCookieEcho - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0A\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkCookieEcho) >>> assert p.flags == 0 >>> assert p.len == 4 >>> assert p.cookie == b"" ###(022)=[passed] basic SCTPChunkCookieAck - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkCookieAck) >>> assert p.flags == 0 >>> assert p.len == 4 ###(023)=[passed] basic SCTPChunkShutdownComplete - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0E\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkShutdownComplete) >>> assert p.reserved == 0 >>> assert p.TCB == 0 >>> assert p.len == 4 ###(024)=[passed] basic SCTPChunkAuthentication - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x08\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkAuthentication) >>> assert p.flags == 0 >>> assert p.len == 8 >>> assert p.shared_key_id == 0 >>> assert p.HMAC_function == 0 ###(025)=[passed] basic SCTPChunkAddressConf - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\x00\x08\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkAddressConf) >>> assert p.flags == 0 >>> assert p.len == 8 >>> assert p.seq == 0 >>> assert p.params == [] ###(026)=[passed] basic SCTPChunkAddressConfAck - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkAddressConfAck) >>> assert p.flags == 0 >>> assert p.len == 8 >>> assert p.seq == 0 >>> assert p.params == [] ###(027)=[passed] basic SCTPChunkPad - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x0b\x70\x61\x64\x00" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkPad) >>> assert p.flags == 0 >>> assert p.len == 11 >>> assert p.padding == b'pad' ###(028)=[passed] basic SCTPChunkReConfig - Dissection >>> blob = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x04" >>> p = SCTP(blob).lastlayer() >>> assert isinstance(p, SCTPChunkReConfig) >>> assert p.flags == 0 >>> assert p.len == 4 >>> assert p.params == [] ###(029)=[passed] SCTPChunkParamRandom - Consecutive calls >>> param1, param2 = SCTPChunkParamRandom(), SCTPChunkParamRandom() >>> assert param1.random != param2.random ###(030)=[passed] SCTP in ICMP >>> p1 = IP(raw(IP(src=RandIP(), dst=RandIP()) / SCTP(sport=RandShort(), dport=RandShort()))) >>> p2 = IP(raw(IP(src=RandIP(), dst=p1[IP].src) / ICMP(type=3, code=1) / p1)) >>> assert p2.answers(p1) Skinny regression tests for Scapy ━ Run at 04:12:33 from [test/scapy/layers/skinny.uts] by UTscapy in 0.006846904754638672 └ Passed=1 └ Failed=0 ###### ## Skinny tests ###### ###(000)=[passed] Skinny - build & dissection >>> p = raw(IP(src="127.0.0.1")/TCP()/Skinny(msg="ServiceURLStatMessage")) >>> assert p == b'E\x00\x004\x00\x01\x00\x00@\x06|\xc1\x7f\x00\x00\x01\x7f\x00\x00\x01\x07\xd0\x07\xd0\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00S3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/\x01\x00\x00' >>> assert IP(p)[Skinny].msg == 303 Test campaign ━ Run at 04:12:33 from [test/scapy/layers/smb.uts] by UTscapy in 0.15816855430603027 └ Passed=14 └ Failed=0 ###### ## SMB basic tests ###### ###(000)=[passed] Import >>> from scapy.layers.smb import * ###(001)=[passed] test SMB Generic Header - dissect >>> from scapy.layers.smb import _SMBGeneric >>> >>> rawpkt = b'\x45\x00\x00\x5b\x69\x10\x40\x00\x73\x06\xca\x85\x7a\xa0\x9a\xb6\xc0\xa8\xfe\x07\xeb\xec\x01\xbd\xaf\x97\x2e\xb7\x78\x60\x84\x6c\x50\x18\x40\x29\xd5\x36\x00\x00\x00\x00\x00\x2f\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x20\x18\x00\x00\x00\x00\x00\x0c\x00\x02\x4e\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 47 >>> assert SMBNegotiate_Request in pkt >>> smb = pkt[SMB_Header] >>> print(smb.show()) ###[ SMB 1 Protocol Request Header ]### Start = b'\xffSMB' Command = SMB_COM_NEGOTIATE Status = STATUS_SUCCESS Flags = CASE_INSENSITIVE+CANONICALIZED_PATHS Flags2 = LONG_NAMES+EXTENDED_SECURITY+NT_STATUS PIDHigh = 0 SecuritySignature= b'' Reserved = 0 TID = 65535 PIDLow = 6176 UID = 0 MID = 0 ###[ SMB Negotiate Request ]### WordCount = 0 ByteCount = 12 \Dialects \ |###[ SMB Dialect ]### | BufferFormat= 2 | DialectString= b'NT LM 0.12' None >>> assert smb.Start == b'\xffSMB' >>> assert smb.Command == 0x72 # SMB_COM_NEGOCIATE >>> >>> rawpkt = b'\x45\x00\x00\x5b\x69\x10\x40\x00\x73\x06\xca\x85\x7a\xa0\x9a\xb6\xc0\xa8\xfe\x07\xeb\xec\x01\xbd\xaf\x97\x2e\xb7\x78\x60\x84\x6c\x50\x18\x40\x29\xd5\x36\x00\x00\x00\x00\x00\x2f\xf0\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x20\x18\x00\x00\x00\x00\x00\x0c\x00\x02\x4e\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 47 >>> assert _SMBGeneric in pkt >>> assert SMB_Header not in pkt ###(002)=[passed] test SMB Negociate Header - assemble >>> pkt = IP() / TCP() / NBTSession() / SMB_Header() / SMBNegotiate_Request() >>> pkt = IP(raw(pkt)) >>> assert pkt[NBTSession].TYPE == 0x00 # session message >>> smb = pkt[SMB_Header] >>> assert smb.Start == b'\xffSMB' ###### ## SMB NTLM exchange ###### ###(003)=[passed] SMB Negotiate Request >>> smb_nego_req = Ether(b'\x00PV\xc0\x00\x01\x00\x0c)a\xf5_\x08\x00E\x00\x00\xb1Qe\x00\x00\x80\x06\xd9\t\xc0\xa8\xc7\x85\xc0\xa8\xc7\x01\xc2\x08\x00\x8b\xd7\xcb\xeeR\x10]{\xadP\x18\x01\x00\xd1w\x00\x00\x00\x00\x00\x85\xffSMBr\x00\x00\x00\x00\x18C\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00b\x00\x02PC NETWORK PROGRAM 1.0\x00\x02LANMAN1.0\x00\x02Windows for Workgroups 3.1a\x00\x02LM1.2X002\x00\x02LANMAN2.1\x00\x02NT LM 0.12\x00') >>> assert SMBNegotiate_Request in smb_nego_req >>> assert smb_nego_req.Flags2.EXTENDED_SECURITY >>> assert smb_nego_req.Flags2.UNICODE >>> assert len(smb_nego_req[SMBNegotiate_Request].Dialects) == 6 >>> assert smb_nego_req[SMBNegotiate_Request].Dialects[0].DialectString == b'PC NETWORK PROGRAM 1.0' >>> assert smb_nego_req[SMBNegotiate_Request].Dialects[5].DialectString == b'NT LM 0.12' ###(004)=[passed] SMB Negotiate Response Extended Security >>> smb_nego_resp = Ether(b'\x00\x0c)a\xf5_\x00PV\xc0\x00\x01\x08\x00E\x00\x01\xc1\x03H@\x00\x80\x06\xe6\x16\xc0\xa8\xc7\x01\xc0\xa8\xc7\x85\x00\x8b\xc2\x08\x10]{\xad\xd7\xcb\xee\xdbP\x18\x01\x0047\x00\x00\x00\x00\x01\x95\xffSMBr\x00\x00\x00\x00\x98C\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x11\x05\x00\x03\n\x00\x01\x00\x04\x11\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xfc\xe3\x01\x80\x1dc6\x9b\x84\'\xd2\x01\x88\xff\x00P\x01,\xd0=?\xb2\x00\xe1O\xbd\xd4\xc8\xb7\x0c\'Vf`\x82\x01<\x06\x06+\x06\x01\x05\x05\x02\xa0\x82\x0100\x82\x01,\xa0\x1a0\x18\x06\n+\x06\x01\x04\x01\x827\x02\x02\x1e\x06\n+\x06\x01\x04\x01\x827\x02\x02\n\xa2\x82\x01\x0c\x04\x82\x01\x08NEGOEXTS\x01\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00p\x00\x00\x001<*:\xc7+<\xa9m\xac8t\xa7\xdd\x1d[\xf4Rk\x17\x03\x8aK\x91\xc2\t}\x9a\x8f\xe6,\x96\\Q$/\x90MG\xc7\xad\x8f\x87k"\x02\xbf\xc6\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\3S\r\xea\xf9\rM\xb2\xecJ\xe3xn\xc3\x08NEGOEXTS\x03\x00\x00\x00\x01\x00\x00\x00@\x00\x00\x00\x98\x00\x00\x001<*:\xc7+<\xa9m\xac8t\xa7\xdd\x1d[\\3S\r\xea\xf9\rM\xb2\xecJ\xe3xn\xc3\x08@\x00\x00\x00X\x00\x00\x000V\xa0T0R0\'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key0\'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key') >>> assert SMBNegotiate_Response_Extended_Security in smb_nego_resp >>> assert smb_nego_resp[SMBNegotiate_Response_Extended_Security].ServerTime == 131210789640364829 >>> assert isinstance(smb_nego_resp.SecurityBlob, GSSAPI_BLOB) >>> assert smb_nego_resp.SecurityBlob.MechType.oidname == 'SPNEGO - Simple Protected Negotiation' >>> assert smb_nego_resp.SecurityBlob.innerToken.token.mechTypes[0].oid.oidname == 'NEGOEX - SPNEGO Extended Negotiation Security Mechanism' >>> assert smb_nego_resp.ServerCapabilities.EXTENDED_SECURITY >>> assert smb_nego_resp.Flags2.EXTENDED_SECURITY >>> >>> from uuid import UUID >>> >>> negoex_nego = smb_nego_resp.SecurityBlob.innerToken.token.mechToken.value >>> assert negoex_nego.MessageType == 1 >>> assert negoex_nego.SequenceNum == 0 >>> assert len(negoex_nego.Payload) == 1 >>> assert negoex_nego.sprintf("%Payload%") == '[(\'AuthScheme\', "[UUID(\'[NTLM-UUID]\')]")]' >>> assert negoex_nego.ConversationId == UUID('313c2a3a-c72b-3ca9-6dac-3874a7dd1d5b') >>> >>> negoex_exch = negoex_nego.payload >>> assert negoex_exch.MessageType == 3 >>> assert negoex_exch.SequenceNum == 1 >>> assert negoex_exch.sprintf("%AuthScheme%") == "UUID('[NTLM-UUID]')" >>> assert negoex_exch.ExchangeLen == len(negoex_exch.Payload[0][1]) >>> assert negoex_exch.Payload[0][0] == "Exchange" >>> assert bytes(negoex_exch.Payload[0][1]) == b"0V\xa0T0R0'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key0'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key" >>> assert negoex_exch.Payload[0][1].items[0].token == b"Token Signing Public Key" >>> assert negoex_exch.Payload[0][1].items[0].oid == "2.5.4.3" ###(005)=[passed] SMB Setup AndX Request (ES) >>> from scapy.layers.ntlm import * >>> >>> smb_sax_req_1 = Ether(b'\x00PV\xc0\x00\x01\x00\x0c)a\xf5_\x08\x00E\x00\x00\xb6Qf\x00\x00\x80\x06\xd9\x03\xc0\xa8\xc7\x85\xc0\xa8\xc7\x01\xc2\x08\x00\x8b\xd7\xcb\xee\xdb\x10]}FP\x18\x00\xffw\x7f\x00\x00\x00\x00\x00\x8a\xffSMBs\x00\x00\x00\x00\x18\x07\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x00\x10\x00\x0c\xff\x00\x00\x00\x04\x11\n\x00\x00\x00\x00\x00\x00\x00J\x00\x00\x00\x00\x00\xd4\x00\x00\xa0O\x00`H\x06\x06+\x06\x01\x05\x05\x02\xa0>0<\xa0\x0e0\x0c\x06\n+\x06\x01\x04\x01\x827\x02\x02\n\xa2*\x04(NTLMSSP\x00\x01\x00\x00\x00\x97\x82\x08\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00Z)\x00\x00\x00\x0f\x00\x00\x00\x00\x00') >>> assert SMBSession_Setup_AndX_Request_Extended_Security in smb_sax_req_1 >>> assert smb_sax_req_1.Flags2.EXTENDED_SECURITY >>> assert smb_sax_req_1.Flags2.UNICODE >>> assert isinstance(smb_sax_req_1.SecurityBlob.innerToken.token.mechToken.value, NTLM_NEGOTIATE) >>> ntlm_nego = smb_sax_req_1.SecurityBlob.innerToken.token.mechToken.value >>> assert ntlm_nego.ProductBuild == 10586 ###(006)=[passed] SMB Setup AndX Response (ES) >>> from scapy.layers.ntlm import * >>> >>> smb_sax_resp_1 = Ether(b"\x00\x0c)a\xf5_\x00PV\xc0\x00\x01\x08\x00E\x00\x01,\x03I@\x00\x80\x06\xe6\xaa\xc0\xa8\xc7\x01\xc0\xa8\xc7\x85\x00\x8b\xc2\x08\x10]}F\xd7\xcb\xefiP\x18\x00\xff\xeb)\x00\x00\x00\x00\x01\x00\xffSMBs\x16\x00\x00\xc0\x98\x07\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08\x10\x00\x04\xff\x00\x00\x01\x00\x00\x93\x00\xd5\x00\xa1\x81\x900\x81\x8d\xa0\x03\n\x01\x01\xa1\x0c\x06\n+\x06\x01\x04\x01\x827\x02\x02\n\xa2x\x04vNTLMSSP\x00\x02\x00\x00\x00\x06\x00\x06\x008\x00\x00\x00\x15\x82\x8a\xe2\x88\xbc\x9bX4\xbe7\r\x00\x00\x00\x00\x00\x00\x00\x008\x008\x00>\x00\x00\x00\x06\x03\x80%\x00\x00\x00\x0fS\x00C\x00V\x00\x02\x00\x06\x00S\x00C\x00V\x00\x01\x00\x06\x00S\x00C\x00V\x00\x04\x00\x06\x00S\x00C\x00V\x00\x03\x00\x06\x00S\x00C\x00V\x00\x07\x00\x08\x00\xd5\x9d6\x9b\x84'\xd2\x01\x00\x00\x00\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x008\x00.\x001\x00 \x009\x006\x000\x000\x00\x00\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x008\x00.\x001\x00 \x006\x00.\x003\x00\x00\x00") >>> assert SMBSession_Setup_AndX_Response_Extended_Security in smb_sax_resp_1 >>> assert smb_sax_resp_1.AndXCommand == 255 >>> assert smb_sax_resp_1.SecurityBlob.token.negResult == 1 >>> assert isinstance(smb_sax_resp_1.SecurityBlob.token.responseToken.value, NTLM_CHALLENGE) >>> ntlm_challenge = smb_sax_resp_1.SecurityBlob.token.responseToken.value >>> assert len(ntlm_challenge.Payload) == 2 >>> assert ntlm_challenge.Payload[0] == ('TargetName', 'SCV') >>> assert ntlm_challenge.Payload[1][0] == 'TargetInfo' >>> assert len(ntlm_challenge.Payload[1][1]) == 6 >>> assert ntlm_challenge.Payload[1][1][0].sprintf("%AvId%") == 'MsvAvNbDomainName' >>> assert ntlm_challenge.Payload[1][1][1].sprintf("%AvId%") == 'MsvAvNbComputerName' >>> assert ntlm_challenge.Payload[1][1][2].sprintf("%AvId%") == 'MsvAvDnsDomainName' >>> assert ntlm_challenge.Payload[1][1][3].sprintf("%AvId%") == 'MsvAvDnsComputerName' >>> assert ntlm_challenge.Payload[1][1][4].sprintf("%AvId%") == 'MsvAvTimestamp' >>> assert ntlm_challenge.Payload[1][1][5].sprintf("%AvId%") == 'MsvAvEOL' >>> for i in range(4): ... assert ntlm_challenge.Payload[1][1][i].Value == "SCV" ... ###(007)=[passed] SMB Setup AndX Request - accept incomplete (ES) >>> from scapy.layers.ntlm import * >>> >>> smb_sax_req_2 = Ether(b'\x00PV\xc0\x00\x01\x00\x0c)a\xf5_\x08\x00E\x00\x01\x18Qg\x00\x00\x80\x06\xd8\xa0\xc0\xa8\xc7\x85\xc0\xa8\xc7\x01\xc2\x08\x00\x8b\xd7\xcb\xefi\x10]~JP\x18\x00\xfey\xc4\x00\x00\x00\x00\x00\xec\xffSMBs\x00\x00\x00\x00\x18\x07\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08 \x00\x0c\xff\x00\x00\x00\x04\x11\n\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\xd4\x00\x00\xa0\xb1\x00\xa1\x81\xa90\x81\xa6\xa0\x03\n\x01\x01\xa2\x81\x8a\x04\x81\x87NTLMSSP\x00\x03\x00\x00\x00\x01\x00\x01\x00v\x00\x00\x00\x00\x00\x00\x00w\x00\x00\x00\x00\x00\x00\x00X\x00\x00\x00\x00\x00\x00\x00X\x00\x00\x00\x1e\x00\x1e\x00X\x00\x00\x00\x10\x00\x10\x00w\x00\x00\x00\x15\x8a\x88\xe2\n\x00Z)\x00\x00\x00\x0fN,A\xe36\xa1M\x9dq\xc5\x12\x92\xa4\xc8\xc9\xf2D\x00E\x00S\x00K\x00T\x00O\x00P\x00-\x00V\x001\x00F\x00A\x000\x00U\x00Q\x00\x00/\t\x13+\x81\xa6\x15\x14\xb9\x11\x8b\xe0\x00\x88\xd7\x1f\xa3\x12\x04\x10\x01\x00\x00\x00\xb5\xef\x9d\xa6\x9dm\x12h\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert SMBSession_Setup_AndX_Request_Extended_Security in smb_sax_req_2 >>> assert smb_sax_req_2.Flags2.EXTENDED_SECURITY >>> assert smb_sax_req_2.Flags2.UNICODE >>> assert smb_sax_req_2.AndXCommand == 255 >>> assert smb_sax_req_2.SecurityBlob.token.negResult == 1 >>> ntlm_authenticate = NTLM_Header(smb_sax_req_2.SecurityBlob.token.responseToken.value.val) >>> assert isinstance(ntlm_authenticate, NTLM_AUTHENTICATE) >>> assert len(ntlm_authenticate.Payload) == 3 >>> assert ntlm_authenticate.Payload[0] == ('Workstation', 'DESKTOP-V1FA0UQ') >>> assert ntlm_authenticate.Payload[1][0] == 'LmChallengeResponse' >>> assert isinstance(ntlm_authenticate.Payload[1][1], LMv2_RESPONSE) >>> assert ntlm_authenticate.Payload[2][0] == 'EncryptedRandomSessionKey' >>> assert ntlm_authenticate.Payload[2][1] == b'/\t\x13+\x81\xa6\x15\x14\xb9\x11\x8b\xe0\x00\x88\xd7\x1f' ###(008)=[passed] SMB Setup AndX Response - accept complete (ES) >>> smb_sax_resp_2 = Ether(b'\x00\x0c)a\xf5_\x00PV\xc0\x00\x01\x08\x00E\x00\x00\xb6\x03J@\x00\x80\x06\xe7\x1f\xc0\xa8\xc7\x01\xc0\xa8\xc7\x85\x00\x8b\xc2\x08\x10]~J\xd7\xcb\xf0YP\x18\x00\xfeB\x10\x00\x00\x00\x00\x00\x8a\xffSMBs\x00\x00\x00\x00\x98\x07\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe\x00\x08 \x00\x04\xff\x00\x8a\x00\x00\x00\x1d\x00_\x00\xa1\x1b0\x19\xa0\x03\n\x01\x00\xa3\x12\x04\x10\x01\x00\x00\x00\xee\t\x91S\xab\x7f]\xe6\x00\x00\x00\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x008\x00.\x001\x00 \x009\x006\x000\x000\x00\x00\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x008\x00.\x001\x00 \x006\x00.\x003\x00\x00\x00') >>> assert SMBSession_Setup_AndX_Response_Extended_Security in smb_sax_resp_2 >>> assert smb_sax_resp_2.SecurityBlob.token.negResult == 0 >>> assert smb_sax_resp_2.SecurityBlob.token.mechListMIC.value.val == b'\x01\x00\x00\x00\xee\t\x91S\xab\x7f]\xe6\x00\x00\x00\x00' >>> assert smb_sax_resp_2.NativeOS == 'Windows 8.1 9600' >>> assert smb_sax_resp_2.NativeLanMan == 'Windows 8.1 6.3' ###### ## Test BRWS ###### ###(009)=[passed] BRWS BecomeBackup - build >>> pkt = \ ... IP(id=3109, ttl=128, src='192.168.1.2', dst='192.168.1.255') / \ ... UDP(sport=138, dport=138) / \ ... NBTDatagram(Type=17, Flags=2, ID=37087, SourceIP='192.168.1.2', ... SourcePort=138, SourceName=b'VIKRANT-LAPTOP ', ... SUFFIX1=16705, DestinationName=b'WORKGROUP', ... SUFFIX2=16975) / \ ... SMB_Header(Flags=0) / \ ... SMBMailslot_Write(Data=BRWS_BecomeBackup(OpCode=11, BrowserToPromote='LENOVO-NETBOOK'), ... Timeout=1000, Name='\\MAILSLOT\\BROWSE') >>> >>> >>> assert bytes(pkt) == b'E\x00\x00\xd4\x0c%\x00\x00\x80\x11\xa9\xa2\xc0\xa8\x01\x02\xc0\xa8\x01\xff\x00\x8a\x00\x8a\x00\xc0\xca)\x11\x02\x90\xdf\xc0\xa8\x01\x02\x00\x8a\x00\xaa\x00\x00 FGEJELFCEBEOFECNEMEBFAFEEPFACAAA\x00 FHEPFCELEHFCEPFFFACACACACACACABO\x00\xffSMB%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00V\x00\x03\x00\x01\x00\x01\x00\x02\x00!\x00\\MAILSLOT\\BROWSE\x00\x0bLENOVO-NETBOOK\x00' ###(010)=[passed] BRWS BecomeBackup - dissection >>> pkt = IP(b'E\x00\x00\xd4\x0c%\x00\x00\x80\x11\xa9\xa2\xc0\xa8\x01\x02\xc0\xa8\x01\xff\x00\x8a\x00\x8a\x00\xc0\xca)\x11\x02\x90\xdf\xc0\xa8\x01\x02\x00\x8a\x00\xaa\x00\x00 FGEJELFCEBEOFECNEMEBFAFEEPFACAAA\x00 FHEPFCELEHFCEPFFFACACACACACACABO\x00\xffSMB%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00V\x00\x03\x00\x01\x00\x01\x00\x02\x00!\x00\\MAILSLOT\\BROWSE\x00\x0bLENOVO-NETBOOK\x00') >>> >>> assert SMBMailslot_Write in pkt >>> assert pkt[SMBMailslot_Write].Timeout == 1000 >>> assert pkt[SMBMailslot_Write].Name == b"\\MAILSLOT\\BROWSE" >>> assert pkt[SMBMailslot_Write].Data.BrowserToPromote == b'LENOVO-NETBOOK' ###(011)=[passed] BRWS HostAnnouncement - build >>> pkt = \ ... IP(id=51657, tos=0x20, src='192.168.1.8', dst='192.168.1.255') / \ ... UDP(sport=138, dport=138) / \ ... NBTDatagram(Type=17, Flags=2, ID=18755, SourceIP='192.168.1.8', ... SourcePort=0, SourceName='MACBOOKPRO-199C', ... SUFFIX1=16705, DestinationName='WORKGROUP', ... SUFFIX2=16974) / \ ... SMB_Header(Flags=0, PIDLow=176, MID=18754) / \ ... SMBMailslot_Write(Data=BRWS_HostAnnouncement(ServerName="MACBOOKPRO-122A", Comment="Super's MacBook Pro"), ... Timeout=0, Flags=2, Name='\\MAILSLOT\\BROWSE') >>> >>> >>> assert bytes(pkt) == b"E \x00\xf8\xc9\xc9\x00\x00@\x11+\xb4\xc0\xa8\x01\x08\xc0\xa8\x01\xff\x00\x8a\x00\x8a\x00\xe4\xb3\xb0\x11\x02IC\xc0\xa8\x01\x08\x00\x00\x00\xce\x00\x00 ENEBEDECEPEPELFAFCEPCNDBDJDJEDAA\x00 FHEPFCELEHFCEPFFFACACACACACACABN\x00\xffSMB%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00BI\x11\x00\x004\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004\x00V\x00\x03\x00\x01\x00\x01\x00\x02\x00E\x00\\MAILSLOT\\BROWSE\x00\x01\x00\x00\xf4\x01\x00MACBOOKPRO-122A\x00\x06\x01\x03\x12\x00\x00\x15\x01U\xaaSuper's MacBook Pro\x00" ###(012)=[passed] BRWS HostAnnouncement - dissection >>> pkt = IP(b"E \x00\xf8\xc9\xc9\x00\x00@\x11+\xb4\xc0\xa8\x01\x08\xc0\xa8\x01\xff\x00\x8a\x00\x8a\x00\xe4\xb3\xb0\x11\x02IC\xc0\xa8\x01\x08\x00\x00\x00\xce\x00\x00 ENEBEDECEPEPELFAFCEPCNDBDJDJEDAA\x00 FHEPFCELEHFCEPFFFACACACACACACABN\x00\xffSMB%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00BI\x11\x00\x004\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004\x00V\x00\x03\x00\x01\x00\x01\x00\x02\x00E\x00\\MAILSLOT\\BROWSE\x00\x01\x00\x00\xf4\x01\x00MACBOOKPRO-122A\x00\x06\x01\x03\x12\x00\x00\x15\x01U\xaaSuper's MacBook Pro\x00") >>> >>> assert SMBMailslot_Write in pkt >>> assert pkt[SMBMailslot_Write].Name == b"\\MAILSLOT\\BROWSE" >>> assert pkt[SMBMailslot_Write].Data.OpCode == 1 >>> assert pkt[SMBMailslot_Write].Data.ServerName == b"MACBOOKPRO-122A\x00" >>> assert pkt[SMBMailslot_Write].Data.Comment == b"Super's MacBook Pro" >>> assert pkt[SMBMailslot_Write].Data.Signature == 0xAA55 ###(013)=[passed] OSS-Fuzz Findings >>> from io import BytesIO >>> file = BytesIO(b'M<\xb2\xa1\x02\x00\x04\x00\x00\x00\x02\xff\xa1\x00\x00\x00\xff\xff\x00\x00\x01\x00\x00\x00\r\x82\xe8Y[\xc6P"\xa1\xb2\x00_h\x00\x00\x00\x00\x10\x94\x00\x01\x00\x00\x1d%\xcb(\xce\x08\x00U\xfa\xf7\x8c\x00\x00@\x00?\x11\xa7R\xe0\xa8\x01\xa1d\xb2\xc3\xd4\n_\x00\x8a \x00\x00\x01\x00\x00\x00\x01\xff\x00\x00\x00\x10\x94\x00\x01\x00\x00\x1d%\xcb(\xce\x08\x00U\xfa\xf7\x8c\x00\x00@\x00?\x11\xa7R\xe0\xa8\x01\xa1d\xb2\xc3\xd4\n_\x00\x8a\xb2\x00\xa1a\xffl\xff\xff\xef\x00\xff\x01\x00\x08\xa1\xa1E\xf9\x00\xa1\x00\x00?\x8c\x08?\x11\x00\xc3\x00+\x10M<\x1a\x01\x00\xffSMB%d\x01\x05\x00\x00\x00\x00\x00\x00\x00\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\xf7\x8c\x00\x00@\x00?\x11\xa7R\xe0\xa8\x01\xa1d\xb2\xc3\xd4\n_\x00\x8a\xb2\x00\xa1a\xffl\xff\xff\xef\x00\xff\x01\x00\x08\xa1\xa1') >>> >>> l = rdpcap(file) >>> assert l[0][NBTDatagram].summary() == "NBTDatagram / SMB_Header / Tran b''" Test campaign ━ Run at 04:12:33 from [test/scapy/layers/smb2.uts] by UTscapy in 0.3405265808105469 └ Passed=37 └ Failed=0 ###### ## SMB2 Header ###### ###(000)=[passed] SMB2 Header dissecting >>> rawpkt = b'\x45\x00\x01\x18\x16\x2c\x40\x00\x37\x06\xc4\x14\x91\xdc\x18\x13\xc0\xa8\xfe\x07\x9d\x76\x01\xbd\x37\x06\x5e\x82\xa3\xca\x83\xd2\x50\x18\x01\xf6\x11\x5b\x00\x00\x00\x00\x00\xec\xfe\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x24\x00\x04\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x59\x9e\x84\xf1\x9d\x61\xce\x99\x1f\x50\x5c\x04\x44\x74\xb1\x0a\x70\x00\x00\x00\x04\x00\x00\x00\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x00\x00\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x1c\x00\x00\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x37\x00\x38\x00\x2e\x00\x32\x00\x31\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 236 >>> assert SMB2_Header in pkt >>> smb2 = pkt[SMB2_Header] >>> >>> assert smb2.Start == b'\xfeSMB' >>> assert smb2.StructureSize == 64 >>> assert smb2.CreditCharge == 1 >>> assert smb2.CreditRequest == 0 >>> assert smb2.Command == 0 >>> assert smb2.Flags == 0 >>> assert smb2.NextCommand == 0 >>> assert smb2.MID == 0 >>> assert smb2.SessionId == 0 >>> assert smb2.SecuritySignature == b'\x00\x11"3DUfw\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >>> >>> rawpkt = b'\x45\x00\x01\x18\x16\x2c\x40\x00\x37\x06\xc4\x14\x91\xdc\x18\x13\xc0\xa8\xfe\x07\x9d\x76\x01\xbd\x37\x06\x5e\x82\xa3\xca\x83\xd2\x50\x18\x01\xf6\x11\x5b\x00\x00\x00\x00\x00\xec\xf0\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x24\x00\x04\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x59\x9e\x84\xf1\x9d\x61\xce\x99\x1f\x50\x5c\x04\x44\x74\xb1\x0a\x70\x00\x00\x00\x04\x00\x00\x00\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x00\x00\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x1c\x00\x00\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x37\x00\x38\x00\x2e\x00\x32\x00\x31\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 236 >>> assert SMB2_Header not in pkt >>> >>> rawpkt = b'\x45\x00\x01\x18\x16\x2c\x40\x00\x37\x06\xc4\x14\x91\xdc\x18\x13\xc0\xa8\xfe\x07\x9d\x76\x01\xbd\x37\x06\x5e\x82\xa3\xca\x83\xd2\x50\x18\x01\xf6\x11\x5b\x00\x00\x00\x00\x00\xec\xfc\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x24\x00\x04\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x59\x9e\x84\xf1\x9d\x61\xce\x99\x1f\x50\x5c\x04\x44\x74\xb1\x0a\x70\x00\x00\x00\x04\x00\x00\x00\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x00\x00\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x1c\x00\x00\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x37\x00\x38\x00\x2e\x00\x32\x00\x31\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 236 >>> assert SMB2_Header not in pkt ###(001)=[passed] SMB2 Header assembling >>> pkt = IP() / TCP() / NBTSession() / SMB2_Header() >>> assert pkt[NBTSession].TYPE == 0x00 # session message >>> smb2 = pkt[SMB2_Header] >>> assert smb2.Start == b'\xfeSMB' ###### ## SMB2 Negotiate Protocol Request Header dissecting ###### ###(002)=[passed] Common fields in header >>> rawpkt = b'\x45\x00\x01\x18\x16\x2c\x40\x00\x37\x06\xc4\x14\x91\xdc\x18\x13\xc0\xa8\xfe\x07\x9d\x76\x01\xbd\x37\x06\x5e\x82\xa3\xca\x83\xd2\x50\x18\x01\xf6\x11\x5b\x00\x00\x00\x00\x00\xec\xfe\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x24\x00\x04\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x59\x9e\x84\xf1\x9d\x61\xce\x99\x1f\x50\x5c\x04\x44\x74\xb1\x0a\x70\x00\x00\x00\x04\x00\x00\x00\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x00\x00\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x1c\x00\x00\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x37\x00\x38\x00\x2e\x00\x32\x00\x31\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 236 >>> assert SMB2_Header in pkt >>> assert SMB2_Negotiate_Protocol_Request in pkt >>> nego_req = pkt[SMB2_Negotiate_Protocol_Request] >>> assert nego_req.StructureSize == 0x24 >>> assert nego_req.DialectCount == 4 >>> assert nego_req.SecurityMode == 0 >>> assert nego_req.Capabilities == 0x7f >>> assert str(nego_req.ClientGUID) == 'f1849e59-619d-99ce-1f50-5c044474b10a' >>> assert nego_req.NegotiateContextsBufferOffset == 0x70 >>> assert nego_req.NegotiateContextsCount == 4 >>> for dialect in nego_req.Dialects: ... assert dialect in SMB_DIALECTS.keys() ... >>> assert 0x210 in nego_req.Dialects >>> assert 0x300 in nego_req.Dialects >>> assert 0x302 in nego_req.Dialects >>> assert 0x311 in nego_req.Dialects >>> assert len(nego_req.NegotiateContexts) == nego_req.NegotiateContextsCount ###(003)=[passed] SMB2 Negotiate Context in Request - type PREAUTH - disassemble >>> preauth = nego_req.NegotiateContexts[0] >>> assert preauth.ContextType == 0x1 >>> assert preauth.DataLength == 38 >>> assert preauth.HashAlgorithmCount == 1 >>> assert preauth.SaltLength == 32 >>> assert preauth.Salt == b'\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18' >>> assert len(preauth.HashAlgorithms) == 1 >>> assert preauth.HashAlgorithms[0] == 0x1 ###(004)=[passed] SMB2 Negotiate Context in Request - type ENCRYPTION disassemble >>> enc = nego_req.NegotiateContexts[1] >>> assert enc.ContextType == 0x2 >>> assert enc.DataLength == 6 >>> assert enc.CipherCount == 2 >>> assert len(enc.Ciphers) == 2 >>> assert enc.Ciphers[0] == 1 >>> assert enc.Ciphers[1] == 2 ###(005)=[passed] SMB2 Negotiate Context in Request - type COMPRESSION >>> comp = nego_req.NegotiateContexts[2] >>> assert comp.ContextType == 0x3 >>> assert comp.DataLength == 16 >>> assert comp.CompressionAlgorithmCount == 4 >>> assert len(comp.CompressionAlgorithms) == 4 >>> assert comp.CompressionAlgorithms[0] == 1 >>> assert comp.CompressionAlgorithms[1] == 2 >>> assert comp.CompressionAlgorithms[2] == 3 >>> assert comp.CompressionAlgorithms[3] == 4 ###(006)=[passed] SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE >>> netname = nego_req.NegotiateContexts[3] >>> assert netname.ContextType == 0x5 >>> assert netname.DataLength == 28 >>> assert netname.NetName == '192.168.178.21' ###(007)=[passed] test SMB2 Negotiate Protocol Request Header - assembling >>> pkt = IP() / TCP() / NBTSession() / SMB2_Header() / SMB2_Negotiate_Protocol_Request() >>> pkt = IP(raw(pkt)) >>> assert SMB2_Negotiate_Protocol_Request in pkt ###(008)=[passed] Request with no 0x0311 in dialects >>> preauth = SMB2_Preauth_Integrity_Capabilities() >>> preauth_context = SMB2_Negotiate_Context(ContextType = 1, DataLength = len(preauth)) / preauth >>> >>> pkt = SMB2_Negotiate_Protocol_Request(Dialects=[0x0202], NegotiateContexts=[preauth_context]) >>> pkt = pkt.__class__(raw(pkt)).NegotiateContexts[0] >>> assert SMB2_Preauth_Integrity_Capabilities in pkt ###### ## SMB2 Negotiate Protocol Response Header dissecting ###### ###(009)=[passed] Common fields in header >>> rawpkt = b'\x45\x00\x02\x3e\x84\xa6\x40\x00\x80\x06\x0b\x74\xc0\xa8\xfe\x07\x91\xdc\x18\x13\x01\xbd\x9d\x76\xa3\xca\x83\xd2\x37\x06\x5f\x72\x50\x18\x04\x01\xe3\x14\x00\x00\x00\x00\x02\x12\xfe\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x01\x00\x11\x03\x03\x00\x53\x6d\xdd\x1c\x30\x1f\x44\x42\xa5\xc8\x88\x73\x7a\x68\x05\xe1\x2f\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x80\x00\xe9\xbe\x9e\x6c\xa4\xf8\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x40\x01\xc0\x01\x00\x00\x60\x82\x01\x3c\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x82\x01\x30\x30\x82\x01\x2c\xa0\x1a\x30\x18\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x1e\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x0a\xa2\x82\x01\x0c\x04\x82\x01\x08\x4e\x45\x47\x4f\x45\x58\x54\x53\x01\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x70\x00\x00\x00\x11\x70\xff\xd0\xfa\xf1\x4f\xa2\x6f\x40\x5c\x94\x55\x68\x53\xcf\xa1\x77\x02\x7a\x32\xa9\x62\x78\x0a\x21\xfb\x9e\x2c\x5e\xe9\x78\xeb\xab\xee\x91\xfd\xfc\xda\x0f\xc5\x91\x03\x6e\xf8\xfd\x4c\x08\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x33\x53\x0d\xea\xf9\x0d\x4d\xb2\xec\x4a\xe3\x78\x6e\xc3\x08\x4e\x45\x47\x4f\x45\x58\x54\x53\x03\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\x98\x00\x00\x00\x11\x70\xff\xd0\xfa\xf1\x4f\xa2\x6f\x40\x5c\x94\x55\x68\x53\xcf\x5c\x33\x53\x0d\xea\xf9\x0d\x4d\xb2\xec\x4a\xe3\x78\x6e\xc3\x08\x40\x00\x00\x00\x58\x00\x00\x00\x30\x56\xa0\x54\x30\x52\x30\x27\x80\x25\x30\x23\x31\x21\x30\x1f\x06\x03\x55\x04\x03\x13\x18\x54\x6f\x6b\x65\x6e\x20\x53\x69\x67\x6e\x69\x6e\x67\x20\x50\x75\x62\x6c\x69\x63\x20\x4b\x65\x79\x30\x27\x80\x25\x30\x23\x31\x21\x30\x1f\x06\x03\x55\x04\x03\x13\x18\x54\x6f\x6b\x65\x6e\x20\x53\x69\x67\x6e\x69\x6e\x67\x20\x50\x75\x62\x6c\x69\x63\x20\x4b\x65\x79\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x09\x33\xe9\xe8\xcb\xf4\x8a\x5c\x61\x4d\x38\x42\xa1\x53\x41\x18\x1b\xeb\x99\x78\x0b\x19\x6f\x5c\xef\xdd\x02\x51\x07\x3b\xc6\xcc\x00\x00\x02\x00\x04\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x03\x00\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 530 >>> assert SMB2_Header in pkt >>> assert SMB2_Negotiate_Protocol_Response in pkt >>> nego_resp = pkt[SMB2_Negotiate_Protocol_Response] >>> >>> assert nego_resp.StructureSize == 0x41 >>> assert str(nego_resp.SecurityMode) == 'SIGNING_ENABLED' >>> assert nego_resp.DialectRevision == 0x0311 >>> assert nego_resp.NegotiateContextsCount == 0x3 >>> assert str(nego_resp.GUID) == '1cdd6d53-1f30-4244-a5c8-88737a6805e1' >>> assert nego_resp.Capabilities == 0x2f >>> assert nego_resp.MaxTransactionSize == 0x00800000 >>> assert nego_resp.MaxReadSize == 0x00800000 >>> assert nego_resp.MaxWriteSize == 0x00800000 >>> assert nego_resp.SecurityBlobBufferOffset == 0x00000080 >>> assert nego_resp.SecurityBlobLen == 320 >>> assert nego_resp.NegotiateContextsBufferOffset == 0x1c0 >>> assert bytes(nego_resp.SecurityBlob.innerToken.token.mechToken.value) == b"NEGOEXTS\x01\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00p\x00\x00\x00\x11p\xff\xd0\xfa\xf1O\xa2o@\\\x94UhS\xcf\xa1w\x02z2\xa9bx\n!\xfb\x9e,^\xe9x\xeb\xab\xee\x91\xfd\xfc\xda\x0f\xc5\x91\x03n\xf8\xfdL\x08\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\3S\r\xea\xf9\rM\xb2\xecJ\xe3xn\xc3\x08NEGOEXTS\x03\x00\x00\x00\x01\x00\x00\x00@\x00\x00\x00\x98\x00\x00\x00\x11p\xff\xd0\xfa\xf1O\xa2o@\\\x94UhS\xcf\\3S\r\xea\xf9\rM\xb2\xecJ\xe3xn\xc3\x08@\x00\x00\x00X\x00\x00\x000V\xa0T0R0'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key0'\x80%0#1!0\x1f\x06\x03U\x04\x03\x13\x18Token Signing Public Key" >>> assert len(nego_resp.NegotiateContexts) == 3 ###(010)=[passed] SMB2 Negotiate Context in Response - Type PREAUTH >>> preauth = nego_resp.NegotiateContexts[0] >>> assert preauth.ContextType == 0x0001 >>> assert preauth.DataLength == 38 >>> assert preauth.HashAlgorithmCount == 1 >>> assert preauth.SaltLength == 32 >>> assert preauth.Salt == b"\x09\x33\xe9\xe8\xcb\xf4\x8a\x5c\x61\x4d\x38\x42\xa1\x53\x41\x18\x1b\xeb\x99\x78\x0b\x19\x6f\x5c\xef\xdd\x02\x51\x07\x3b\xc6\xcc" >>> assert len(preauth.HashAlgorithms) == 1 >>> assert preauth.HashAlgorithms[0] == 0x1 ###(011)=[passed] SMB2 Negotiate Context in Response - Type ENCRYPTION >>> enc = nego_resp.NegotiateContexts[1] >>> assert enc.ContextType == 0x0002 >>> assert enc.DataLength == 4 >>> assert enc.CipherCount == 1 >>> assert len(enc.Ciphers) == 1 >>> assert enc.Ciphers[0] == 1 ###(012)=[passed] SMB2 Negotiate Context in Response - Type COMPRESSION >>> comp = nego_resp.NegotiateContexts[2] >>> assert comp.ContextType == 0x0003 >>> assert comp.DataLength == 10 >>> assert comp.CompressionAlgorithmCount == 1 >>> assert len(comp.CompressionAlgorithms) == 1 >>> assert comp.CompressionAlgorithms[0] == 1 ###(013)=[passed] SMB2 Negotiate Protocol Response Header assembling >>> pkt = IP() / TCP() / NBTSession() / SMB2_Header() / SMB2_Negotiate_Protocol_Response() >>> pkt = IP(raw(pkt)) >>> assert SMB2_Negotiate_Protocol_Response in pkt ###### ## SMB2 Negotiate Protocol Request Header with 1 dialect ###### ###(014)=[passed] Common fields in header >>> rawpkt = b'\x45\x00\x01\x10\x16\x2c\x40\x00\x37\x06\xc4\x14\x91\xdc\x18\x13\xc0\xa8\xfe\x07\x9d\x76\x01\xbd\x37\x06\x5e\x82\xa3\xca\x83\xd2\x50\x18\x01\xf6\x11\x5b\x00\x00\x00\x00\x00\xe4\xfe\x53\x4d\x42\x40\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x24\x00\x01\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x59\x9e\x84\xf1\x9d\x61\xce\x99\x1f\x50\x5c\x04\x44\x74\xb1\x0a\x68\x00\x00\x00\x04\x00\x00\x00\x11\x03\x00\x00\x01\x00\x26\x00\x00\x00\x00\x00\x01\x00\x20\x00\x01\x00\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x03\x00\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x1c\x00\x00\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x37\x00\x38\x00\x2e\x00\x32\x00\x31\x00' >>> pkt = IP(rawpkt) >>> assert TCP in pkt >>> assert NBTSession in pkt >>> assert pkt[NBTSession].LENGTH == 228 >>> assert SMB2_Header in pkt >>> assert SMB2_Negotiate_Protocol_Request in pkt >>> nego_req = pkt[SMB2_Negotiate_Protocol_Request] >>> assert nego_req.StructureSize == 0x24 >>> assert nego_req.DialectCount == 1 >>> assert nego_req.SecurityMode == 0 >>> assert nego_req.Capabilities == 0x7f >>> assert str(nego_req.ClientGUID) == 'f1849e59-619d-99ce-1f50-5c044474b10a' >>> assert nego_req.NegotiateContextsBufferOffset == 0x68 >>> assert nego_req.NegotiateContextsCount == 4 >>> for dialect in nego_req.Dialects: ... assert dialect in SMB_DIALECTS.keys() ... >>> assert 0x311 in nego_req.Dialects >>> assert len(nego_req.NegotiateContexts) == nego_req.NegotiateContextsCount ###(015)=[passed] SMB2 Negotiate Context in Request - type PREAUTH - disassemble >>> preauth = nego_req.NegotiateContexts[0] >>> assert preauth.ContextType == 0x1 >>> assert preauth.DataLength == 38 >>> assert preauth.HashAlgorithmCount == 1 >>> assert preauth.SaltLength == 32 >>> assert preauth.Salt == b'\x75\x06\x05\xed\x60\x88\x9e\xcb\x5e\x79\xbb\xe8\x44\x59\xc5\x5c\xd2\x82\x51\x06\x32\x7a\x6e\x2e\x41\xc5\xa8\x3f\xdd\xf2\xc5\x18' >>> assert len(preauth.HashAlgorithms) == 1 >>> assert preauth.HashAlgorithms[0] == 0x1 ###(016)=[passed] SMB2 Negotiate Context in Request - type ENCRYPTION disassemble >>> enc = nego_req.NegotiateContexts[1] >>> assert enc.ContextType == 0x2 >>> assert enc.DataLength == 6 >>> assert enc.CipherCount == 2 >>> assert len(enc.Ciphers) == 2 >>> assert enc.Ciphers[0] == 1 >>> assert enc.Ciphers[1] == 2 ###(017)=[passed] SMB2 Negotiate Context in Request - type COMPRESSION >>> comp = nego_req.NegotiateContexts[2] >>> assert comp.ContextType == 0x3 >>> assert comp.DataLength == 16 >>> assert comp.CompressionAlgorithmCount == 4 >>> assert len(comp.CompressionAlgorithms) == 4 >>> assert comp.CompressionAlgorithms[0] == 1 >>> assert comp.CompressionAlgorithms[1] == 2 >>> assert comp.CompressionAlgorithms[2] == 3 >>> assert comp.CompressionAlgorithms[3] == 4 ###(018)=[passed] SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE >>> netname = nego_req.NegotiateContexts[3] >>> assert netname.ContextType == 0x5 >>> assert netname.DataLength == 28 >>> assert netname.NetName == '192.168.178.21' ###### ## SMB2 Negotiate Protocol Request Header default values ###### ###(019)=[passed] Default DialectCount >>> pkt = SMB2_Negotiate_Protocol_Request() >>> assert len(pkt.Dialects) == pkt.__class__(raw(pkt)).DialectCount ###(020)=[passed] Default NegotiateContextsCount >>> preauth = SMB2_Preauth_Integrity_Capabilities() >>> preauth_context = SMB2_Negotiate_Context(ContextType = 1, DataLength = len(preauth)) / preauth >>> >>> pkt = SMB2_Negotiate_Protocol_Request(Dialects=[0x0311], NegotiateContexts=[preauth_context], NegotiateContextsBufferOffset=0x68) >>> assert len(pkt.NegotiateContexts) == pkt.__class__(raw(pkt)).NegotiateContextsCount ###### ## Negotiate Request without manual padding of Negotiate Contexts ###### ###(021)=[passed] SMB2 Negotiate Context in Request - type PREAUTH - disassemble >>> preauth = SMB2_Preauth_Integrity_Capabilities() >>> preauth_context = SMB2_Negotiate_Context(ContextType = 1, DataLength = len(preauth)) / preauth >>> >>> enc = SMB2_Encryption_Capabilities() >>> enc_context = SMB2_Negotiate_Context(ContextType = 2, DataLength = len(enc)) / enc >>> >>> comp = SMB2_Compression_Capabilities() >>> comp_context = SMB2_Negotiate_Context(ContextType = 3, DataLength = len(comp)) / comp >>> >>> netname_context = SMB2_Negotiate_Context(b'\x05\x00\x1c\x00\x00\x00\x00\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x007\x008\x00.\x002\x001\x00') >>> >>> pkt = SMB2_Header() / SMB2_Negotiate_Protocol_Request(Dialects=[0x0311], NegotiateContexts=[preauth_context, enc_context, comp_context, netname_context], NegotiateContextsBufferOffset=0x68) >>> >>> pkt = SMB2_Header(raw(pkt)) >>> >>> nego_req = pkt[SMB2_Negotiate_Protocol_Request] >>> >>> preauth_dissected = nego_req.NegotiateContexts[0] >>> assert preauth_dissected.ContextType == preauth_context.ContextType >>> assert preauth_dissected.DataLength == preauth_context.DataLength >>> assert preauth_dissected.HashAlgorithmCount == 1 >>> assert preauth_dissected.SaltLength == 0 >>> assert len(preauth_dissected.HashAlgorithms) == len(preauth_context.HashAlgorithms) >>> assert preauth_dissected.HashAlgorithms[0] == preauth_context.HashAlgorithms[0] ###(022)=[passed] SMB2 Negotiate Context in Request - type ENCRYPTION disassemble >>> enc_dissected = nego_req.NegotiateContexts[1] >>> assert enc_dissected.ContextType == enc_context.ContextType >>> assert enc_dissected.DataLength == enc_context.DataLength >>> assert enc_dissected.CipherCount == 1 >>> assert len(enc_dissected.Ciphers) == len(enc_context.Ciphers) >>> assert enc_dissected.Ciphers[0] == enc_context.Ciphers[0] ###(023)=[passed] SMB2 Negotiate Context in Request - type COMPRESSION >>> comp_dissected = nego_req.NegotiateContexts[2] >>> assert comp_dissected.ContextType == comp_context.ContextType >>> assert comp_dissected.DataLength == 8 >>> assert comp_dissected.CompressionAlgorithmCount == 0 >>> assert len(comp_dissected.CompressionAlgorithms) == len(comp_context.CompressionAlgorithms) ###(024)=[passed] SMB2 Negotiate Context in Request - type NETNAME NEGOCIATE >>> netname_dissected = nego_req.NegotiateContexts[3] >>> assert netname_dissected.ContextType == netname_context.ContextType >>> assert netname_dissected.DataLength == netname_context.DataLength >>> assert netname_dissected.NetName == netname_context.NetName ###### ## SMB 2 Tree connect exchange ###### ###(025)=[passed] SMB2 Tree connect request >>> tree_con = Ether(b'RT\x00\x1c\x91\x8dRT\x00O9T\x08\x00E\x00\x00\xb0\x91\n@\x00\x80\x06\xe7\x1f\xc0\xa8\x00e\xc0\xa8\x00h\xc2@\x01\xbd\xd6a\x0e\xc2gX\xca\xb8P\x18\x04\x02\x82\xc0\x00\x00\x00\x00\x00\x84\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x03\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00$\x08\x00\xe4\xd7o\xa1\x96\xf9mm\xca[%\x1c\x8bG\x8a\xd6\t\x00\x02\x00H\x00<\x00\\\x00\\\x00s\x00c\x00a\x00l\x00e\x00o\x00u\x00t\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00s\x00h\x00a\x00r\x00e\x001\x00') >>> assert tree_con.Path == '\\\\scaleout.domain.local\\share1' >>> assert tree_con[SMB2_Tree_Connect_Request].Flags.REDIRECT_TO_OWNER ###(026)=[passed] SMB2 Tree connect response >>> tree_con_resp = Ether(b'RT\x00O9TRT\x00\x1c\x91\x8d\x08\x00E\x00\x00\xfeM\xfb@\x00\x80\x06)\xe1\xc0\xa8\x00h\xc0\xa8\x00e\x01\xbd\xc2@gX\xca\xb8\xd6a\x0fJP\x18 \x13\x83\x0e\x00\x00\x00\x00\x00\xd2\xfeSMB@\x00\x01\x00\xcc\x00\x00\xc0\x03\x00\x01\x00\x19\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00$\x08\x00\x1a\xc0\nRt\xe7\x04\x1b;\xd3gV\xe0\x1e\x87\xd1\t\x00\x01\x00\x8a\x00\x00\x00\x82\x00\x00\x00SRdr0\x00\x00\x00\x03\x00\x00\x00`\x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xc0\xa8\x00il\x00\\\x00s\x00h\x00a\x00r\x00\x01\x00\x00\x00\x00\x00\x00\x00\xc0\xa8d\x8f\x1e\xd4.mk\xa0\xa3py\xa4\x9c\x8dJ\xc8\xd0\x9a\xfd\xc1\x00\x00\x02\x00\x06\x00\x00\x00\x00\x00\x02\x00\x02\x00\x01\x00\x00\x00\\\x00\\\x00S\x00C\x00A\x00L\x00E\x00O\x00U\x00T\x00\\\x00s\x00h\x00a\x00r\x00e\x001\x00') >>> assert tree_con_resp.Status == 0xc00000cc >>> assert tree_con_resp.Flags.SMB2_FLAGS_SERVER_TO_REDIR >>> >>> ctx = SMB2_Error_ContextResponse(tree_con_resp.ErrorData) >>> assert ctx.ErrorId == 0x72645253 >>> assert ctx.ErrorContextData.NotificationType == 3 >>> assert ctx.ErrorContextData.ResourceName == '\\\\SCALEOUT\\share1' >>> assert [x.IPAddress for x in ctx.ErrorContextData.IPAddrMoveList] == ['192.168.0.105', '192.168.100.143'] ###### ## SMB 2 Setup Session ###### ###(027)=[passed] Setup Session Request >>> from scapy.layers.ntlm import * >>> >>> setup_sess = NBTSession(b'\x00\x00\x00\xa2\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x01\x00!\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00X\x00J\x00\x00\x00\x00\x00\x00\x00\x00\x00`H\x06\x06+\x06\x01\x05\x05\x02\xa0>0<\xa0\x0e0\x0c\x06\n+\x06\x01\x04\x01\x827\x02\x02\n\xa2*\x04(NTLMSSP\x00\x01\x00\x00\x00\x97\x82\x08\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00aJ\x00\x00\x00\x0f') >>> assert isinstance(setup_sess.Buffer[0][1].innerToken.token.mechToken.value, NTLM_NEGOTIATE) >>> assert setup_sess.Buffer[0][1].innerToken.token.mechToken.value.ProductBuild == 19041 ###(028)=[passed] Setup Session Response >>> from scapy.layers.ntlm import * >>> >>> setup_sess = NBTSession(b'\x00\x00\x00\xe7\xfeSMB@\x00\x01\x00\x16\x00\x00\xc0\x01\x00\x01\x00\x11\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00H\x00\x9f\x00\xa1\x81\x9c0\x81\x99\xa0\x03\n\x01\x01\xa1\x0c\x06\n+\x06\x01\x04\x01\x827\x02\x02\n\xa2\x81\x83\x04\x81\x80NTLMSSP\x00\x02\x00\x00\x00\x08\x00\x08\x008\x00\x00\x00\x15\x82\x8a\xe2\xe0\x14\xe7\xbf\xfd@\x01+\x00\x00\x00\x00\x00\x00\x00\x00@\x00@\x00@\x00\x00\x00\n\x00aJ\x00\x00\x00\x0fW\x00I\x00N\x001\x00\x02\x00\x08\x00W\x00I\x00N\x001\x00\x01\x00\x08\x00W\x00I\x00N\x001\x00\x04\x00\x08\x00W\x00I\x00N\x001\x00\x03\x00\x08\x00W\x00I\x00N\x001\x00\x07\x00\x08\x00\xef\x1f\x0e\tE\xe6\xd7\x01\x00\x00\x00\x00') >>> assert isinstance(setup_sess.Buffer[0][1].token.responseToken.value, NTLM_CHALLENGE) >>> assert setup_sess.Buffer[0][1].token.responseToken.value >>> assert setup_sess.Buffer[0][1].token.responseToken.value.Payload[0] == ('TargetName', 'WIN1') >>> assert setup_sess.Buffer[0][1].token.responseToken.value.Payload[1][1][-1].AvId == 0 ###(029)=[passed] SMB2 IOCTL Request - Validate negotiate info >>> ioctl_req = Ether(b'RT\x00>> assert ioctl_req.CtlCode == 1311236 >>> assert ioctl_req.InputBufferOffset == 120 >>> assert ioctl_req.InputLen == 34 >>> validate_neg = ioctl_req.Buffer[0][1] >>> assert isinstance(validate_neg, SMB2_IOCTL_Validate_Negotiate_Info_Request) >>> assert validate_neg.SecurityMode.SIGNING_ENABLED >>> assert validate_neg.Dialects == [514, 528, 768, 770, 785] >>> >>> c = ioctl_req.copy() >>> c.InputLen = None >>> c.InputBufferOffset = None >>> c = Ether(raw(c)) >>> assert c.InputBufferOffset == 120 >>> assert c.InputLen == 34 >>> assert len(c.Buffer[0][1]) == 34 ###(030)=[passed] SMB2 IOCTL Request - DFS referral (TargetSetBoundary) >>> ioctl_req = NBTSession(b'\x00\x00\x01t\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x0b\x00\x01\x009\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\x00\x00\x00i\x00\x00\x00\x00D\x00\x00\x93\xefQ\xd3\xf2\xc7\xc3\xf3m\xcf.\xb4\xe9\x16\xb7+1\x00\x00\x00\x94\x01\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffp\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x02\x00\x03\x00\x00\x00\x04\x00"\x00\x01\x00\x04\x00,\x01\x00\x00D\x00n\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00"\x00\x01\x00\x00\x00,\x01\x00\x00"\x00L\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00D\x00C\x001\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00D\x00C\x002\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00') >>> assert ioctl_req.CtlCode == 393620 >>> dfs_referral = ioctl_req.Output >>> >>> assert isinstance(dfs_referral, SMB2_IOCTL_RESP_GET_DFS_Referral) >>> assert dfs_referral.ReferralBuffer[0].DFSPath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[0].DFSAlternatePath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[0].NetworkAddress == '\\DC1.domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].DFSPath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].DFSAlternatePath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].NetworkAddress == '\\DC2.domain.local\\common' ###(031)=[passed] SMB2 IOCTL Response - DFS referral (TargetSetBoundary) >>> dfs_referral = SMB2_IOCTL_RESP_GET_DFS_Referral( ... ReferralHeaderFlags="ReferralServers+StorageServers", ... ReferralEntries=[ ... DFS_REFERRAL_V4( ... ServerType="root", ... ReferralEntryFlags="TargetSetBoundary", ... TimeToLive=300, ... ), ... DFS_REFERRAL_V4( ... ServerType="root", ... ReferralEntryFlags="TargetSetBoundary", ... TimeToLive=300, ... ) ... ], ... ReferralBuffer=[ ... DFS_REFERRAL_ENTRY0( ... DFSPath="\\domain.local\\common", ... DFSAlternatePath="\\domain.local\\common", ... NetworkAddress="\\DC1.domain.local\\common", ... ), ... DFS_REFERRAL_ENTRY0( ... DFSPath="\\domain.local\\common", ... DFSAlternatePath="\\domain.local\\common", ... NetworkAddress="\\DC2.domain.local\\common", ... ) ... ] ... ) >>> assert bytes(dfs_referral) == b'\x00\x00\x02\x00\x03\x00\x00\x00\x04\x00"\x00\x01\x00\x04\x00,\x01\x00\x00D\x00n\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00"\x00\x01\x00\x04\x00,\x01\x00\x00\xa8\x00\xd2\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00D\x00C\x001\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00\\\x00D\x00C\x002\x00.\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\\\x00c\x00o\x00m\x00m\x00o\x00n\x00\x00\x00' >>> >>> dfs_referral = SMB2_IOCTL_RESP_GET_DFS_Referral(bytes(dfs_referral)) >>> assert dfs_referral.ReferralBuffer[0].DFSPath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[0].DFSAlternatePath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[0].NetworkAddress == '\\DC1.domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].DFSPath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].DFSAlternatePath == '\\domain.local\\common' >>> assert dfs_referral.ReferralBuffer[1].NetworkAddress == '\\DC2.domain.local\\common' ###(032)=[passed] SMB2 IOCTL Request - DFS referral (NameListReferral) >>> ioctl_req = NBTSession(b'\x00\x00\x00\xc8\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x0b\x00\x01\x009\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\x00\x00\x00}\x00\x00\x10\x00\xf8\x01\x00\xd4UjTy\xef\xdd2\x19)\x9a\r\x15\xa7\x1f11\x00\x00\x00\x94\x01\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffp\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x03\x00\x12\x00\x00\x00\x02\x00X\x02\x00\x00$\x00\x00\x00\x00\x00\x03\x00\x12\x00\x00\x00\x02\x00X\x02\x00\x00"\x00\x00\x00\x00\x00\\\x00D\x00O\x00M\x00A\x00I\x00N\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x00\x00') >>> assert ioctl_req.CtlCode == 393620 >>> dfs_referral = ioctl_req.Output >>> >>> assert isinstance(dfs_referral, SMB2_IOCTL_RESP_GET_DFS_Referral) >>> assert dfs_referral.ReferralEntries[0].SpecialNameOffset == 36 >>> assert dfs_referral.ReferralEntries[0].ExpandedNameOffset == 0 >>> assert dfs_referral.ReferralEntries[1].SpecialNameOffset == 34 >>> assert dfs_referral.ReferralEntries[1].ExpandedNameOffset == 0 >>> >>> assert dfs_referral.ReferralBuffer[0].SpecialName == "\\DOMAIN" >>> assert dfs_referral.ReferralBuffer[0].ExpandedName == [] >>> assert dfs_referral.ReferralBuffer[1].SpecialName == "\\domain.local" >>> assert dfs_referral.ReferralBuffer[1].ExpandedName == [] ###(033)=[passed] SMB2 IOCTL Response - DFS referral (NameListReferral) >>> DOMAIN_REFERRALS = ["\\DOMAIN", "\\domain.local"] >>> dfs_referral = SMB2_IOCTL_RESP_GET_DFS_Referral( ... ReferralEntries=[ ... DFS_REFERRAL_V3( ... ReferralEntryFlags="NameListReferral", ... TimeToLive=600, ... ) ... for _ in DOMAIN_REFERRALS ... ], ... ReferralBuffer=[ ... DFS_REFERRAL_ENTRY1( ... SpecialName=name ... ) ... for name in DOMAIN_REFERRALS ... ] ... ) >>> >>> assert bytes(dfs_referral) == b'\x00\x00\x02\x00\x00\x00\x00\x00\x03\x00\x12\x00\x00\x00\x02\x00X\x02\x00\x00$\x00\x00\x00\x00\x00\x03\x00\x12\x00\x00\x00\x02\x00X\x02\x00\x00"\x00\x00\x00\x00\x00\\\x00D\x00O\x00M\x00A\x00I\x00N\x00\x00\x00\\\x00d\x00o\x00m\x00a\x00i\x00n\x00.\x00l\x00o\x00c\x00a\x00l\x00\x00\x00' >>> >>> dfs_referral = SMB2_IOCTL_RESP_GET_DFS_Referral(bytes(dfs_referral)) >>> assert dfs_referral.ReferralBuffer[0].SpecialName == "\\DOMAIN" >>> assert dfs_referral.ReferralBuffer[0].ExpandedName == [] >>> assert dfs_referral.ReferralBuffer[1].SpecialName == "\\domain.local" >>> assert dfs_referral.ReferralBuffer[1].ExpandedName == [] ###(034)=[passed] SMB2 Create Request with Contexts >>> sess_create_context = NBTSession(b'\x00\x00\x01D\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x80\xcd\t\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x9bk>\xb6[=\x16\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x009\x00\x00\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x12\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00d\x00\x00\x00x\x00\x16\x00\x90\x00\x00\x00\xb4\x00\x00\x00d\x00e\x00s\x00k\x00t\x00o\x00p\x00.\x00i\x00n\x00i\x00\x00\x008\x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x00 \x00\x00\x00DH2Q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000\x1d\xb3\xc8\xfa\r\xed\x11\xb7R\x808\xfb\xd6\xa0~\x18\x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x00\x00\x00\x00\x00MxAc\x00\x00\x00\x00\x18\x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x00\x00\x00\x00\x00QFid\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x004\x00\x00\x00RqLs\x00\x00\x00\x00\xc8\x9bA\xdb\x8e\xd1\x19\xf4\\;\x846;\xf6\xca\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert sess_create_context.Name == "desktop.ini" >>> assert isinstance(sess_create_context.CreateContexts[0].Data, SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2) >>> assert sess_create_context.CreateContexts[1].Name == b"MxAc" >>> assert sess_create_context.CreateContexts[2].Name == b"QFid" >>> assert isinstance(sess_create_context.CreateContexts[3].Data, SMB2_CREATE_REQUEST_LEASE_V2) >>> >>> sess_create_context_response = NBTSession(b"\x00\x00\x00\xf0\xfeSMB@\x00\x01\x00\x00\x00\x00\x00\x05\x00\x01\x001\x00\x00\x00\x00\x00\x00\x00\x7f\xcd\t\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x9bk>\xb6[=\x16\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Y\x00\x00\x00\x01\x00\x00\x00\x9d\x89JH\xbe\xa1\xd8\x01\x9d\x89JH\xbe\xa1\xd8\x01{\x0f$W\x06\xa2\xd8\x01{\x0f$W\x06\xa2\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x13\x17\xe8L\x00\x00\x00\x00'\x1aT\xad\x00\x00\x00\x00\x98\x00\x00\x00X\x00\x00\x00 \x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x00\x08\x00\x00\x00MxAc\x00\x00\x00\x00\x00\x00\x00\x00\xff\x01\x1f\x00\x00\x00\x00\x00\x10\x00\x04\x00\x00\x00\x18\x00 \x00\x00\x00QFid\x00\x00\x00\x00\x01\x00$\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") >>> assert sess_create_context_response.CreateContexts[0].Data.QueryStatus == 0 >>> assert sess_create_context_response.CreateContexts[1].Data.DiskFileId == 2359297 >>> assert sess_create_context_response.CreateContexts[1].Data.Reserved == b'\x00' * 16 ###(035)=[passed] SMB2 Query Info Response with Security Descriptor >>> qr = SMB2_Query_Info_Response(b'\t\x00H\x00\xe0\x00\x00\x00\x01\x00\x14\x9c\x14\x00\x00\x004\x00\x00\x00\x00\x00\x00\x00T\x00\x00\x00\x01\x06\x00\x00\x00\x00\x00\x05P\x00\x00\x00\xb5\x89\xfb8\x19\x84\xc2\xcb\\l#mW\x00wn\xc0\x02d\x87\x01\x06\x00\x00\x00\x00\x00\x05P\x00\x00\x00\xb5\x89\xfb8\x19\x84\xc2\xcb\\l#mW\x00wn\xc0\x02d\x87\x02\x00\x8c\x00\x06\x00\x00\x00\x00\x03\x18\x00\xa9\x00\x12\x00\x01\x02\x00\x00\x00\x00\x00\x0f\x02\x00\x00\x00\x01\x00\x00\x00\x00\x0b\x14\x00\xff\x01\x1f\x00\x01\x01\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x03\x14\x00\xff\x01\x1f\x00\x01\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x03\x14\x00\xff\x01\x1f\x00\x01\x01\x00\x00\x00\x00\x00\x05\x12\x00\x00\x00\x00\x03\x18\x00\xff\x01\x1f\x00\x01\x02\x00\x00\x00\x00\x00\x05 \x00\x00\x00 \x02\x00\x00\x00\x03\x18\x00\xa9\x00\x12\x00\x01\x02\x00\x00\x00\x00\x00\x05 \x00\x00\x00!\x02\x00\x00') >>> sd = SECURITY_DESCRIPTOR(qr.Output) >>> >>> assert sd.OwnerSid.summary() == 'S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464' >>> assert sd.GroupSid.summary() == 'S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464' >>> >>> assert sd.DACL.toSDDL() == [ ... '(A;OI+CI;;;;S-1-15-2-1)', ... '(A;OI+CI+IO;;;;S-1-3-0)', ... '(A;OI+CI;;;;S-1-1-0)', ... '(A;OI+CI;;;;S-1-5-18)', ... '(A;OI+CI;;;;S-1-5-32-544)', ... '(A;OI+CI;;;;S-1-5-32-545)', ... ] ###(036)=[passed] SMB2 Set Info Request with Rename >>> set_info = NBTSession(b'\x00\x00\x00|\xfeSMB@\x00\x01\x00#\x00\x00\x00\x11\x00\x01\x000\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x01\n\x1c\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\xb0\n\x9c\xfd@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\xc1\\\\1\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00t\x00e\x00s\x00t\x00') >>> >>> assert set_info.FileId.Persistent == 0x40fd9c0ab0 >>> assert isinstance(set_info.Data, FileRenameInformation) >>> assert set_info.Data.FileName == "test" >>> assert not set_info.Data.ReplaceIfExists SMB2 Client and Server tests ━ Run at 04:12:41 from [test/scapy/layers/smbclientserver.uts] by UTscapy in 7.353909015655518 └ Passed=15 └ Failed=0 ###### ## SMB2 Client tests ###### ###(000)=[passed] Define samba server >>> import subprocess >>> >>> TEMP_DIR = pathlib.Path(get_temp_dir()) >>> TEMP_DIR.chmod(0o0755) >>> print(TEMP_DIR) /tmp/scapyyc771aeh >>> >>> SHARE_DIR = TEMP_DIR / "share" >>> SHARE_DIR.mkdir() >>> SHARE_DIR.chmod(0o0777) >>> (SHARE_DIR / "fileA").touch() >>> (SHARE_DIR / "fileB").touch() >>> (SHARE_DIR / "fileScapy").touch() >>> (SHARE_DIR / "ignoredFile").symlink_to("fileA") >>> (SHARE_DIR / "sub").mkdir() >>> (SHARE_DIR / "sub").chmod(0o0777) >>> (SHARE_DIR / "sub" / "secret").touch() >>> >>> LOGS_DIR = TEMP_DIR / "logs" >>> LOCK_DIR = TEMP_DIR / "lock" >>> PRIVATE_DIR = TEMP_DIR / "private" >>> PID_DIR = TEMP_DIR / "pid" >>> CACHE_DIR = TEMP_DIR / "cache" >>> STATE_DIRECTORY = TEMP_DIR / "state" >>> NCALRPC_DIR = TEMP_DIR / "ncalrpc" >>> >>> for dir in [LOGS_DIR, LOCK_DIR, PRIVATE_DIR, PID_DIR, CACHE_DIR, STATE_DIRECTORY, NCALRPC_DIR]: ... dir.mkdir() ... >>> SMBD_LOG = LOGS_DIR / "log.smbd" >>> SMBD_LOG.touch() >>> >>> CONF_FILE = get_temp_file(autoext=".conf") >>> CONF = """ ... ... [global] ... workgroup = WORKGROUP ... server role = standalone server ... security = user ... map to guest = bad user ... log level = 1 smb2:5 auth:3 ... ... bind interfaces only = yes ... interfaces = 127.0.0.0/8 ... ... lock directory = %s ... private directory = %s ... cache directory = %s ... ncalrpc dir = %s ... pid directory = %s ... state directory = %s ... ... [test] ... comment = Test share ... path = %s ... guest ok = yes ... browseable = yes ... read only = no ... public = yes ... """ % ( ... LOCK_DIR, ... PRIVATE_DIR, ... CACHE_DIR, ... NCALRPC_DIR, ... PID_DIR, ... STATE_DIRECTORY, ... SHARE_DIR, ... ) >>> >>> print(CONF) [global] workgroup = WORKGROUP server role = standalone server security = user map to guest = bad user log level = 1 smb2:5 auth:3 bind interfaces only = yes interfaces = 127.0.0.0/8 lock directory = /tmp/scapyyc771aeh/lock private directory = /tmp/scapyyc771aeh/private cache directory = /tmp/scapyyc771aeh/cache ncalrpc dir = /tmp/scapyyc771aeh/ncalrpc pid directory = /tmp/scapyyc771aeh/pid state directory = /tmp/scapyyc771aeh/state [test] comment = Test share path = /tmp/scapyyc771aeh/share guest ok = yes browseable = yes read only = no public = yes >>> >>> with open(CONF_FILE, "w") as fd: ... fd.write(CONF) ... 619 >>> >>> class run_smbserver: ... def __init__(self): ... self.proc = None ... ... def __enter__(self): ... # Empty log ... with SMBD_LOG.open('w') as fd: ... fd.write("") ... print("@ Starting smbd server") ... # Start server ... self.proc = subprocess.Popen(["/usr/sbin/smbd", "-F", "-p", "12345", "-s", CONF_FILE, "-l", LOGS_DIR]) ... # wait for it to start ... for i in range(10): ... sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ... sock.settimeout(1) ... try: ... sock.connect(("127.0.0.1", 12345)) ... break ... except Exception: ... time.sleep(0.5) ... finally: ... sock.close() ... else: ... raise TimeoutError ... print("@ Server started !") ... ... def __exit__(self, exc_type, exc_value, traceback): ... print("@ Stopping smbd server !") ... self.proc.terminate() ... self.proc.wait() ... if traceback: ... # failed ... print("\nTest failed. Smbd logs:") ... with SMBD_LOG.open('r') as fd: ... print(fd.read()) ... print("@ smbd server stopped !") ... ... >>> >>> >>> def run_smbclient(max_dialect=0x0202): ... return smbclient("localhost", "guest", port=12345, guest=True, cli=False, debug=4, MAX_DIALECT=max_dialect) ... ###(001)=[passed] smbclient: SMB 2.0.2 - connect then list shares >>> with run_smbserver(): ... try: ... cli = run_smbclient() ... results = cli.shares() ... print(results) ... assert ('test', 'DISKTREE', 'Test share') in results ... assert any(x[0] == "IPC$" for x in results) ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=3860138816] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] SMB 2.002 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_IOCTL_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_IOCTL_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] [('test', 'DISKTREE', 'Test share'), ('IPC$', 'IPC', 'IPC Service (Samba 4.22.3)')] Connection closed switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Stopping control thread (tid=3860138816) @ Stopping smbd server ! @ smbd server stopped ! ###(002)=[passed] smbclient: SMB 2.0.2 - connect to test share and list files >>> with run_smbserver(): ... try: ... cli = run_smbclient() ... cli.use("test") ... files = cli.ls() ... names = [x[0] for x in files] ... assert all(x in names for x in ['.', '..', 'sub', 'fileB', 'fileScapy', 'fileA']) ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=3893709632] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] SMB 2.002 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Connection closed Stopping control thread (tid=3893709632) @ Stopping smbd server ! @ smbd server stopped ! ###(003)=[passed] smbclient: SMB 2.0.2 - connect to test share and get file >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> with run_smbserver(): ... try: ... cli = run_smbclient() ... cli.use("test") ... cli.lcd(str(LOCALPATH)) ... completions = cli.get_complete("file") ... assert all(x in completions for x in ['fileA', 'fileB']) ... cli.get('fileA') ... assert (LOCALPATH / "fileA").exists() ... assert [x.name for x in cli.lls()] == ['fileA'] ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=3885316928] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] SMB 2.002 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] ('fileA', 0) Connection closed Stopping control thread (tid=3885316928) @ Stopping smbd server ! @ smbd server stopped ! ###(004)=[passed] smbclient: SMB 2.0.2 - connect to test share, cd, put file and cat it >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> with (LOCALPATH / "fileC").open("w") as fd: ... fd.write("Nice\nData") ... 9 >>> with run_smbserver(): ... try: ... cli = run_smbclient() ... cli.use("test") ... cli.lcd(str(LOCALPATH)) ... cli.cd("sub") ... # upload ... cli.put('fileC') ... # check completion ... completions = cli.get_complete("") ... assert all(x in completions for x in ['secret', 'fileC']) ... # cat ... assert cli.cat('fileC') == b'Nice\nData' ... # check on disk ... with (SHARE_DIR / "sub" / "fileC").open("r") as fd: ... assert fd.read() == "Nice\nData" ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=4065327936] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] SMB 2.002 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Write_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Write_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] ('fileC', 9) IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Read_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Read_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] Connection closed Stopping control thread (tid=4065327936) @ Stopping smbd server ! @ smbd server stopped ! ###(005)=[passed] smbclient: SMB 2.0.2 - connect to test share and recursive get >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> with run_smbserver(): ... try: ... cli = run_smbclient() ... cli.use("test") ... cli.lcd(str(LOCALPATH)) ... cli.get(".", r=True) ... # check on disk ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=4054842176] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] SMB 2.002 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Read_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Read_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] sub\fileC IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] sub\secret sub IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] ignoredFile IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileScapy IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileB IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileA ('.', 9) Connection closed Stopping control thread (tid=4054842176) @ Stopping smbd server ! @ smbd server stopped ! >>> assert (LOCALPATH / "fileA").exists() >>> assert (LOCALPATH / "fileB").exists() >>> assert (LOCALPATH / "fileScapy").exists() >>> assert (LOCALPATH / "sub").exists() >>> assert (LOCALPATH / "sub" / "secret").exists() ###(006)=[passed] smbclient: SMB 3.1.1 - connect to test share and recursive get >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> with run_smbserver(): ... try: ... cli = run_smbclient(max_dialect=0x0311) ... cli.use("test") ... cli.lcd(str(LOCALPATH)) ... cli.get(".", r=True) ... # check on disk ... finally: ... cli.close() ... @ Starting smbd server @ Server started ! Starting control thread [tid=3959581504] ## state=[BEGIN] Condition [continue_smb2] not taken Condition [send_negotiate] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate] SENT : DirectTCP / SMB_Header / SMBNegotiate_Request switching from [BEGIN] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [SMB2_NEGOTIATE] switching from [SENT_NEGOTIATE] to [SMB2_NEGOTIATE] ## state=[SMB2_NEGOTIATE] Condition [send_negotiate_smb2] taken to state [SENT_NEGOTIATE] + Running action [on_negotiate_smb2] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request switching from [SMB2_NEGOTIATE] to [SENT_NEGOTIATE] ## state=[SENT_NEGOTIATE] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response Receive condition [receive_negotiate_response] taken to state [NEGOTIATED] switching from [SENT_NEGOTIATE] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [NEGOTIATED] switching from [SENT_SESSION_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] Condition [should_send_session_setup_request] taken to state [SENT_SESSION_REQUEST] + Running action [send_setup_session_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Request switching from [NEGOTIATED] to [SENT_SESSION_REQUEST] ## state=[SENT_SESSION_REQUEST] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Response Receive condition [receive_session_setup_response] taken to state [AUTHENTICATED] switching from [SENT_SESSION_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [authenticated_post_actions] taken to state [SOCKET_BIND] switching from [AUTHENTICATED] to [SOCKET_BIND] ## state=[SOCKET_BIND] SMB 3.1.1 authentication successful using SPNEGOSSP[NTLMSSP] as GUEST ! Condition [start_smb_socket] taken to state [SOCKET_MODE_SMB] switching from [SOCKET_BIND] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Directory_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Error_Response / Raw Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Read_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Read_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] sub\fileC IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] sub\secret sub IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] ignoredFile IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileScapy IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileB IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Create_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Query_Info_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] IOEVENT on smbpipe I/O event [outgoing_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [send_data] SENT : DirectTCP / SMB2_Header / SMB2_Close_Request switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Response Receive condition [incoming_data_received_smb] taken to state [SOCKET_MODE_SMB] + Running action [receive_data_smb] switching from [SOCKET_MODE_SMB] to [SOCKET_MODE_SMB] ## state=[SOCKET_MODE_SMB] fileA ('.', 9) Connection closed Stopping control thread (tid=3959581504) @ Stopping smbd server ! @ smbd server stopped ! >>> assert (LOCALPATH / "fileA").exists() >>> assert (LOCALPATH / "fileB").exists() >>> assert (LOCALPATH / "fileScapy").exists() >>> assert (LOCALPATH / "sub").exists() >>> assert (LOCALPATH / "sub" / "secret").exists() ###### ## SMB2 Server tests ###### ###(007)=[passed] Define Scapy smb server >>> import subprocess >>> import select >>> >>> ROOTPATH = pathlib.Path(get_temp_dir()) >>> >>> (ROOTPATH / "fileA").touch() >>> (ROOTPATH / "fileB").touch() >>> (ROOTPATH / "fileScapy").touch() >>> (ROOTPATH / "sub").mkdir() >>> (ROOTPATH / "sub" / "secret").touch() >>> >>> with (ROOTPATH / "fileScapy").open("w") as fd: ... fd.write("Nice\nData") ... 9 >>> class run_smbserver: ... def __init__(self, guest=False, readonly=True, encryptshare=False, MAX_DIALECT=0x311): ... self.srv = None ... self.guest = guest ... self.readonly = readonly ... self.encryptshare = encryptshare ... self.MAX_DIALECT = MAX_DIALECT ... ... def __enter__(self): ... if self.guest: ... ssp = None ... else: ... ssp = SPNEGOSSP([NTLMSSP(IDENTITIES={ ... "User1": MD4le("Password1"), ... "Administrator": MD4le("Password2") ... })]) ... self.srv = smbserver( ... shares=[SMBShare("Scapy", ROOTPATH, encryptdata=self.encryptshare), ... SMBShare("test", ROOTPATH, encryptdata=self.encryptshare)], ... iface=conf.loopback_name, ... debug=4, ... port=12345, ... bg=True, ... readonly=self.readonly, ... MAX_DIALECT=self.MAX_DIALECT, ... ssp=ssp, ... ) ... ... def __exit__(self, exc_type, exc_value, traceback): ... self.srv.close() ... >>> >>> >>> class run_smbclient: ... def __init__(self, user=None, password=None, share=None, list=False, cwd=None, debug=None, maxversion=None, encrypt=False): ... args = [ ... "smbclient", ... ] + (["-L"] if list else []) + [ ... "//127.0.0.1%s" % (("/%s" % share) if share else ""), ... "-p", "12345", ... ] ... if user and password: ... args.extend([ ... "-U", ... "DOMAIN/%s" % user, ... "--password", ... password, ... ]) ... else: ... args.append("-N") ... if maxversion: ... args.extend(["-m", maxversion]) ... if encrypt: ... args.extend(["--client-protection", "encrypt"]) ... self.args = args ... self.proc = subprocess.Popen( ... args, ... text=True, ... bufsize=0, ... stdin=subprocess.PIPE, ... stdout=subprocess.PIPE, ... stderr=subprocess.STDOUT, ... cwd=cwd, ... ) ... self.output = "" ... def cmd(self, command): ... # send command ... self.proc.stdin.write(command + "\n") ... self.proc.stdin.flush() ... def getoutput(self): ... self.output += self.proc.communicate(input="exit\n", timeout=10)[0] ... return [x.strip() for x in self.output.split("\n") if x.strip()] ... def close(self): ... if self.proc.poll(): ... self.proc.terminate() ... def printdebug(self): ... # Print stuff ... print("\nTest failed.") ... print("smbclient arguments:", self.args) ... print("smbclient output:") ... print(self.output) ... >>> cli = None ###(008)=[passed] smbserver: SMB 3.1.1 - connect then list shares >>> with run_smbserver(guest=True): ... try: ... cli = run_smbclient(list=True) ... output = cli.getoutput() ... shares = [x[0] for x in (y.split(" ") for y in output if "Disk" in y)] ... assert shares == ['Scapy', 'test'] ... except Exception: ... cli.printdebug() ... raise ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: NTLM (guest). Read-Only: YES. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 51998) Starting control thread [tid=3933616960] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated as guest! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / SMB2_Tree_Connect_Response switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] > Opened: srvsvc SENT : DirectTCP / SMB2_Header / SMB2_Create_Response switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] << DceRpc5Bind >> DceRpc5BindAck srvsvc is on port '\\PIPE\\srvsvc' using NDR 2.0 SENT : DirectTCP / SMB2_Header / SMB2_IOCTL_Response switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] << REQUEST: NetrShareEnum_Request >> RESPONSE: NetrShareEnum_Response SENT : DirectTCP / SMB2_Header / SMB2_IOCTL_Response switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] SENT : DirectTCP / SMB2_Header / SMB2_Close_Response switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Response switching from [SERVING] to [SERVING] ## state=[SERVING] X Server closed. ###(009)=[passed] smbserver: SMB 3.1.1 - connect then ls >>> with run_smbserver(): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test") ... cli.cmd("ls") ... output = cli.getoutput()[1:] ... files = [x[0] for x in (y.split(" ") for y in output if "blocks" not in y)] ... print(files) Transferring exception from tid=3933616960: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3933616960) ... assert files == ['.', 'fileA', 'fileB', 'fileScapy', 'sub'] ... except Exception: ... cli.printdebug() ... raise Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: YES. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52000) Starting control thread [tid=3910495040] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] taken to state [SERVING] + Running action [send_query_directory_response] > Query directory: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] taken to state [SERVING] + Running action [send_query_directory_response] > Query directory: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] taken to state [SERVING] + Running action [send_query_info_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] ['.', 'fileA', 'fileB', 'fileScapy', 'sub'] X Server closed. Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument ###(010)=[passed] smbserver: SMB 2.0.2 - connect then ls >>> with run_smbserver(): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test", maxversion="SMB2_02") ... cli.cmd("ls") ... output = cli.getoutput()[1:] ... files = [x[0] for x in (y.split(" ") for y in output if "blocks" not in y)] ... print(files) ... assert files == ['.', 'fileA', 'fileB', 'fileScapy', 'sub'] ... except Exception: ... cli.printdebug() ... raise ... finally: Transferring exception from tid=3910495040: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3910495040) ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: YES. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52002) Starting control thread [tid=3902102336] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] taken to state [SERVING] + Running action [send_query_directory_response] > Query directory: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Directory_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] taken to state [SERVING] + Running action [send_query_directory_response] > Query directory: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] taken to state [SERVING] + Running action [send_query_info_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] ['.', 'fileA', 'fileB', 'fileScapy', 'sub'] X Server closed. Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument ###(011)=[passed] smbserver: SMB 3.1.1 - connect then get file >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> with run_smbserver(): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test", cwd=LOCALPATH) ... cli.cmd("get fileScapy") ... output = cli.getoutput() ... print(output) ... assert "size 9" in output[0], "no size" Transferring exception from tid=3902102336: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3902102336) ... assert (LOCALPATH / "fileScapy").exists(), "file doesn't exist" ... with (LOCALPATH / "fileScapy").open("r") as fd: ... assert fd.read() == "Nice\nData", "invalid data" ... except Exception: ... cli.printdebug() ... raise ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: YES. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52010) Starting control thread [tid=3876924224] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] > Opened: fileScapy SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Query_Info_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] taken to state [SERVING] + Running action [send_query_info_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Read_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] taken to state [SERVING] + Running action [send_read_response] > Reading 9 bytes at 0 SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n/fileScapy SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] ['getting file \\fileScapy of size 9 as fileScapy (0.2 KiloBytes/sec) (average 0.2 KiloBytes/sec)', 'Try "help" to get a list of possible commands.'] X Server closed. ###(012)=[passed] smbserver: SMB 3.1.1 - connect then put file Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument Transferring exception from tid=3876924224: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3876924224) >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> nicedata = ("A" * 100 + "\n") * 5 >>> with open(LOCALPATH / "newCustomFile", "w") as fd: ... fd.write(nicedata) ... 505 >>> with run_smbserver(readonly=False): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test", cwd=LOCALPATH) ... cli.cmd("put newCustomFile") ... output = cli.getoutput() ... print(output) ... assert "putting file newCustomFile" in output[0], "strange output" ... assert (ROOTPATH / "newCustomFile").exists(), "file doesn't exist" ... with (ROOTPATH / "newCustomFile").open("r") as fd: ... assert fd.read() == nicedata, "invalid data" ... except Exception: ... cli.printdebug() ... raise ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: NO. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52020) Starting control thread [tid=3868531520] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] > Opened: newCustomFile > Created file:newCustomFile SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Write_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] taken to state [SERVING] + Running action [send_write_response] > Writing 505 bytes at 0 SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n/newCustomFile SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] Transferring exception from tid=3868531520: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3868531520) ['putting file newCustomFile as \\newCustomFile (16.4 kb/s) (average 16.4 kb/s)', 'Try "help" to get a list of possible commands.'] X Server closed. Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument ###(013)=[passed] smbserver: SMB 3.0.2 - require global encryption >>> LOCALPATH = pathlib.Path(get_temp_dir()) >>> >>> nicedata = ("A" * 100 + "\n") * 5 >>> with open(LOCALPATH / "newCustomFile", "w") as fd: ... fd.write(nicedata) ... 505 >>> with run_smbserver(readonly=False, MAX_DIALECT=0x0302): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test", cwd=LOCALPATH, encrypt=True) ... cli.cmd("put newCustomFile") ... output = cli.getoutput() ... print(output) ... assert "putting file newCustomFile" in output[0], "strange output" ... assert (ROOTPATH / "newCustomFile").exists(), "file doesn't exist" ... with (ROOTPATH / "newCustomFile").open("r") as fd: ... assert fd.read() == nicedata, "invalid data" ... except Exception: ... cli.printdebug() ... raise ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: NO. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52026) Starting control thread [tid=3843353408] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] > Opened: newCustomFile SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Write_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] taken to state [SERVING] + Running action [send_write_response] > Writing 505 bytes at 0 SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n/newCustomFile SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] ['putting file newCustomFile as \\newCustomFile (14.9 kb/s) (average 14.9 kb/s)', 'Try "help" to get a list of possible commands.'] X Server closed. ###(014)=[passed] smbserver: SMB 3.1.1 - require share encryption >>> LOCALPATH = pathlib.Path(get_temp_dir()) Transferring exception from tid=3843353408: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3843353408) Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument >>> >>> nicedata = ("A" * 100 + "\n") * 5 >>> with open(LOCALPATH / "newCustomFile", "w") as fd: ... fd.write(nicedata) ... 505 >>> with run_smbserver(readonly=False, encryptshare=True): ... try: ... cli = run_smbclient(user="Administrator", password="Password2", share="test", cwd=LOCALPATH) ... cli.cmd("put newCustomFile") ... output = cli.getoutput() ... print(output) ... assert "putting file newCustomFile" in output[0], "strange output" ... assert (ROOTPATH / "newCustomFile").exists(), "file doesn't exist" ... with (ROOTPATH / "newCustomFile").open("r") as fd: ... assert fd.read() == nicedata, "invalid data" ... except Exception: ... cli.printdebug() ... raise ... finally: ... cli.close() ... -- Scapy 2.5.0.dev586 SMB Server -- SSP: . Read-Only: NO. Serving 2 shares: * * Server SMB_Server started listening on ('127.0.0.1', 12345) ┃ Connection received from ('127.0.0.1', 52032) Starting control thread [tid=3834960704] ## state=[BEGIN] RECVD: DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Request Receive condition [received_negotiate] not taken Receive condition [received_negotiate_smb2_begin] taken to state [NEGOTIATED] + Running action [on_negotiate_smb2_begin] SENT : DirectTCP / SMB2_Header / SMB2_Negotiate_Protocol_Response switching from [BEGIN] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / SMB2_Session_Setup_Response switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] Condition [wait_for_next_request] taken to state [NEGOTIATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [NEGOTIATED] ## state=[NEGOTIATED] RECVD: DirectTCP / SMB2_Header / SMB2_Session_Setup_Request Receive condition [received_negotiate_smb2] not taken Receive condition [receive_setup_andx_request] taken to state [RECEIVED_SETUP_ANDX_REQUEST] + Running action [on_setup_andx_request] SENT : DirectTCP / SMB2_Header / Raw switching from [NEGOTIATED] to [RECEIVED_SETUP_ANDX_REQUEST] ## state=[RECEIVED_SETUP_ANDX_REQUEST] > User authenticated ! Condition [wait_for_next_request] taken to state [AUTHENTICATED] switching from [RECEIVED_SETUP_ANDX_REQUEST] to [AUTHENTICATED] ## state=[AUTHENTICATED] Condition [should_serve] taken to state [SERVING] switching from [AUTHENTICATED] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: IPC$ SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_IOCTL_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] taken to state [SERVING] + Running action [send_ioctl_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: DirectTCP / SMB2_Header / SMB2_Tree_Connect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] taken to state [SERVING] + Running action [send_tree_connect_response] > Tree Connect on: test SENT : DirectTCP / SMB2_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Create_Request / Raw Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] taken to state [SERVING] + Running action [send_create_file_response] > Opened: newCustomFile SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Write_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] taken to state [SERVING] + Running action [send_write_response] > Writing 505 bytes at 0 SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Close_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] taken to state [SERVING] + Running action [send_close_response] > Closed: /tmp/scapycsio6p7n/newCustomFile SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] RECVD: SMB2_Header / SMB2_Tree_Disconnect_Request Receive condition [receive_logoff_request] not taken Receive condition [receive_setup_andx_request_in_serving] not taken Receive condition [is_smb1_tree] not taken Receive condition [receive_tree_connect] not taken Receive condition [receive_ioctl] not taken Receive condition [receive_create_file] not taken Receive condition [receive_change_notify_info] not taken Receive condition [receive_query_directory_info] not taken Receive condition [receive_query_info] not taken Receive condition [receive_set_info_request] not taken Receive condition [receive_write_request] not taken Receive condition [receive_read_request] not taken Receive condition [receive_close_request] not taken Receive condition [receive_tree_disconnect_request] taken to state [SERVING] + Running action [send_tree_disconnect_response] SENT : DirectTCP / SMB2_Transform_Header / Raw switching from [SERVING] to [SERVING] ## state=[SERVING] Transferring exception from tid=3834960704: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1438, in _do_iter pkt = self.listen_sock.recv() File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/layers/smb2.py", line 4689, in recv pkt = super(SMBStreamSocket, self).recv(x) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/supersocket.py", line 485, in recv raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1342, in _do_control state = next(iterator) File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1455, in _do_iter raise EOFError("Socket ended arbruptly.") EOFError: Socket ended arbruptly. Stopping control thread (tid=3834960704) ['putting file newCustomFile as \\newCustomFile (14.5 kb/s) (average 14.5 kb/s)', 'Try "help" to get a list of possible commands.'] X Server closed. Traceback (most recent call last): File "/builddir/build/BUILD/scapy-2.5.0-build/scapy-2.5.0/scapy/automaton.py", line 1014, in _run clientsocket, address = ssock.accept() ~~~~~~~~~~~~^^ File "/usr/lib/python3.14/socket.py", line 298, in accept fd, addr = self._accept() ~~~~~~~~~~~~^^ OSError: [Errno 22] Invalid argument SNMP regression tests for Scapy ━ Run at 04:12:41 from [test/scapy/layers/snmp.uts] by UTscapy in 0.042199134826660156 └ Passed=6 └ Failed=0 ###### ## SNMP layer ###### ###(000)=[passed] SNMP assembling >>> r = raw(SNMP()) >>> r b'0\x18\x02\x01\x01\x04\x06public\xa0\x0b\x02\x01\x00\x02\x01\x00\x02\x01\x000\x00' >>> assert r == b'0\x18\x02\x01\x01\x04\x06public\xa0\x0b\x02\x01\x00\x02\x01\x00\x02\x01\x000\x00' >>> p = SNMP(version="v2c", community="ABC", PDU=SNMPbulk(id=4,varbindlist=[SNMPvarbind(oid="1.2.3.4",value=ASN1_INTEGER(7)),SNMPvarbind(oid="4.3.2.1.2.3",value=ASN1_IA5_STRING("testing123"))])) >>> p |>, |>] |> |> >>> r = raw(p) >>> r b'05\x02\x01\x01\x04\x03ABC\xa5+\x02\x01\x04\x02\x01\x00\x02\x01\x000 0\x08\x06\x03*\x03\x04\x02\x01\x070\x14\x06\x06\x81#\x02\x01\x02\x03\x16\ntesting123' >>> assert r == b'05\x02\x01\x01\x04\x03ABC\xa5+\x02\x01\x04\x02\x01\x00\x02\x01\x000 0\x08\x06\x03*\x03\x04\x02\x01\x070\x14\x06\x06\x81#\x02\x01\x02\x03\x16\ntesting123' ###(001)=[passed] SNMP disassembling >>> x=SNMP(b'0y\x02\x01\x00\x04\x06public\xa2l\x02\x01)\x02\x01\x00\x02\x01\x000a0!\x06\x12+\x06\x01\x04\x01\x81}\x08@\x04\x02\x01\x07\n\x86\xde\xb78\x04\x0b172.31.19.20#\x06\x12+\x06\x01\x04\x01\x81}\x08@\x04\x02\x01\x07\n\x86\xde\xb76\x04\r255.255.255.00\x17\x06\x12+\x06\x01\x04\x01\x81}\x08@\x04\x02\x01\x05\n\x86\xde\xb9`\x02\x01\x01') >>> x.show() ###[ SNMP ]### version = 'v1' 0x0 community = \PDU \ |###[ SNMPresponse ]### | id = 0x29 | error = 'no_error' 0x0 | error_index= 0x0 | \varbindlist\ | |###[ SNMPvarbind ]### | | oid = | | value = | | noSuchObject= None | | noSuchInstance= None | | endOfMibView= None | |###[ SNMPvarbind ]### | | oid = | | value = | | noSuchObject= None | | noSuchInstance= None | | endOfMibView= None | |###[ SNMPvarbind ]### | | oid = | | value = 0x1 | | noSuchObject= None | | noSuchInstance= None | | endOfMibView= None >>> assert x.community==b"public" and x.version == 0 >>> assert x.PDU.id == 41 and len(x.PDU.varbindlist) == 3 >>> assert x.PDU.varbindlist[0].oid == "1.3.6.1.4.1.253.8.64.4.2.1.7.10.14130104" >>> assert x.PDU.varbindlist[0].value == b"172.31.19.2" >>> assert x.PDU.varbindlist[2].oid == "1.3.6.1.4.1.253.8.64.4.2.1.5.10.14130400" >>> assert x.PDU.varbindlist[2].value == 1 ###(002)=[passed] Basic UDP/SNMP bindings >>> z = UDP()/x >>> z = UDP(raw(z)) No IP underlayer to compute checksum. Leaving null. >>> assert SNMP in z >>> >>> x = UDP()/SNMP() >>> assert x.sport == x.dport == 161 ###(003)=[passed] Basic SNMPvarbind build >>> x = SNMPvarbind(oid=ASN1_OID("1.3.6.1.2.1.1.4.0"), value=RandBin()) >>> x = SNMPvarbind(raw(x)) >>> assert isinstance(x.value, ASN1_STRING) ###(004)=[passed] SNMPvarbind noSuchInstance dissection >>> x = SNMPvarbind(b'0\x10\x06\x0c+\x06\x01\x02\x01/\x01\x01\x01\x01\n\x01\x81\x00') >>> assert not x.noSuchObject >>> assert x.noSuchInstance >>> assert not x.endOfMibView ###(005)=[passed] Failing SNMPvarbind dissection >>> try: ... SNMP(b'0a\x02\x01\x00\x04\x06public\xa3T\x02\x02D\xd0\x02\x01\x00\x02\x01\x000H0F\x06\x08+\x06\x01\x02\x01\x01\x05\x00\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D\x00\x03\x01\x02D') ... assert False ... except BER_Decoding_Error: ... pass ... SSH regression tests for Scapy ━ Run at 04:12:41 from [test/scapy/layers/ssh.uts] by UTscapy in 0.08408594131469727 └ Passed=6 └ Failed=0 ###### ## SSH tests ###### ###(000)=[passed] Load SSH and SSH pcap >>> from scapy.layers.ssh import * >>> pkts = rdpcap(scapy_path("/test/pcaps/ssh_ed25519.pcap")) ###(001)=[passed] Check for SSHVersionExchange >>> assert SSHVersionExchange in pkts[3] >>> assert pkts[3].lines == [b'SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u1'] ###(002)=[passed] Check for SSH KexInit >>> assert pkts[8].pay.type == 20 >>> assert pkts[8].pay.kex_algorithms.names == [b'sntrup761x25519-sha512@openssh.com', b'curve25519-sha256', b'curve25519-sha256@libssh.org', b'ecdh-sha2-nistp256', b'ecdh-sha2-nistp384', b'ecdh-sha2-nistp521', b'diffie-hellman-group-exchange-sha256', b'diffie-hellman-group16-sha512', b'diffie-hellman-group18-sha512', b'diffie-hellman-group14-sha256'] >>> assert pkts[8].pay.compression_algorithms_client_to_server.names == [b'none', b'zlib@openssh.com'] >>> assert pkts[8].pay.first_kex_packet_follows == 0 ###(003)=[passed] Check for SSH Kex DH Init >>> assert pkts[9].pay.e.value == 2350579254774455149352841074576538343990628078324267734527140871419932900538846241321452574779013468175018290651674793284015144587365340014962083771650859331476013596977123734998706481058518220105378857548427645559226229797476788395456646389818256564838400739135010680681163456095677232493468587230912056633743356721223955966756143014970734820639779746710511156996619195651512803235508645669051962031830043263352566212925544898655158819407252176433755590900240990111833619058714386338971655960765233885975850331922799954445954999296511309262036243757363804224821843032668273263064448847356873248470173458896243397517402866118125112555466428030166305568609671333602038983517505792245686243281766138834921907336198416449172686346486278292406454736650900489703602941311383274571253473117352192402069818356338637658276508681778175858698292872544113899589241205559671386224999719303843179598966006636814844667908804397048115462945951578163865384872376314062218622823399683168509281546378022234848416282276373248755506541244682438394426446625521247772730497030387798046748675856950435919346613694108323269457293633349708282520556429147475379754811181108827452704284587405668562299209768965780662855380191554093502874303015220051947466960323628390298028334555285261078171376959928596505395834904631983924930632066431620277301098016669514461539415396461120090857273167687140578309080011600491384868409678444601854368584606594031430672989514629489628693896623746874263590779323124144977231406480674784862894820443935735009785417326990153059454525335480905124180809168192695170554860881795940302149730125034860576014797577021907464402342887433222178995989216549376816454492040151004613910636289921361266911700572137074963622410473946132501034758965925448585513804452940921661377181371668124810916661795313840472724039889785883499146147917756012320556865741641210760458632895093416475238323450214341924898457846364890041182141641464569458439289152005646151462927271290045368143992045845833755058875621892664952349241777000175525150234301417133611325716295866942917806328460205857145603834255471170372323643072574234093090258963511137747272416302757220165305443240348220594316744411327905569373474701071080394539231361841208268626239088329642014216286141161796678306068065801822739617419769840590119143287370990841250896367782388086153939896000077437989471526045058990545907990089943059323343511158016141104461822684535344848072465778114834380180144470998703244485996404968078774187171096252472206846575112317045051585989901412734220984229769099373462781991394933642599850052765470790711255335450011529534223200229563089616493679704133500670071803056311472370457584460617950784473886654145020569892882621834458180061425761806601776138949785217977296683442504030198235793054259542236826904098257847794792743244091577002001218915723232763883537852453240602434246755006330557239933 ###(004)=[passed] Check for SSH Kex DH Reply >>> assert isinstance(pkts[10].pay, SSHKexDHReply) >>> assert isinstance(pkts[10].pay.K_S.value.data, SSHPublicKeyEd25519) >>> assert pkts[10].pay.f.value == 145420364842225773825302401106325914711274265993324154430728894326534621359109155840425186538544552052796050053335958730866886288740744420249345515750154798851184330959497070659898985425204715378366354679146309457749164371561091155243958216182101971799434050687511559028317449152411472762323723877627671103812914723157350965167617881557068354019877391362267976527576493473875435265184048851428107514944286989616342786043599413975131699425817361398892615937862444397978104862748600515902989933687456311656405442430739088222322061894563421315591443786569893421006874109563323602421056664468719115729999515282373592751468532774515579030227333862046510775187524340678261311443115463596625632382798119365245475607690175500571706486276645913449452000600385503347151840872914773898773488397031589360149311688536059026933073591802120869627115324168091970764557964769308675365930500125154235572029870366848539246435374954851006770023189648291776010080795050223050860998900405137902471191697225277049222592746894837282272020541849100564888026189233806723871439229668619801557051355230295711162074261723735096669381118352514087748543069098521714367520620776857909533548692973709024859908263199571215346407936984296807266382121546828903054910125941912141681820440324847067053005923257053547200527533308902169030187411617725866120378101642906954603853930588700927719183637036840650380578915269559991390749067662922590313459051714023483342069069486856997828131877064697883838294364044597377634856362822832142618450301805844505073311557951656608292385708401134544514223462642265767599035258374748229336714718608533685329531126529049892131138601419901815421341388895007293701087086445997233255224283053634387459108049782685439584490166669027769404082346078709263888381794126372684739109951124329930500566714883267402922809647283904702829959640898613561998011861738175990862617646085551086342592758425640217942375761120002214263525285687683437628809639146334705175599606153814250017075639638206689953262483413749172593472713439934441043308651524160071237216451477801106668255062822659635335764848170476026942604710330092513922989750910298327358097823488084536544440798321307308541642435897397586864585774450444856007727437988290169282904777426371810586287022758237175995926455562260123808781040290584381913532810485127812346450200037604344159195037050778864761984776712383681923622054756893185075573777827838180404632794820045063257647197822508971656160962510350864007240071912329456453627835389896781002210494913596666104457655076724437210855739938617334378596008363125551567605259368940675801716 >>> assert isinstance(pkts[10].pay.H_hash.value.data, SSHSignatureEd25519) >>> assert pkts[10].pay.H_hash.value.data.key.value == b"\xef\xecj=~\xe4Y'\xe9\xad\xb7?\xfe?[\xf3\xddn\x1e\x91\xb5\x1c\xb6O\xf5&\xc7$\x9f\x0c\xeb\x1c<\xf2n\x87iH\xb9\xaf\xf5\xdfXB\xb7\x99\xd1\xbe%\x92\x98a)+\x01\\\xa7\xb4\xb2\x82!\x05e\x0e" ###(005)=[passed] Check for the 2 SSH New Msgs >>> assert isinstance(pkts[10][SSH:2].pay, SSHNewKeys) >>> assert isinstance(pkts[12].pay, SSHNewKeys) Regression tests for TFTP ━ Run at 04:12:41 from [test/scapy/layers/tftp.uts] by UTscapy in 0.2746906280517578 └ Passed=10 └ Failed=0 ###### ## TFTP coverage tests ###### ###(000)=[passed] Test answers >>> assert TFTP_DATA(block=1).answers(TFTP_RRQ()) >>> assert not TFTP_WRQ().answers(TFTP_RRQ()) >>> assert not TFTP_RRQ().answers(TFTP_WRQ()) >>> assert TFTP_ACK(block=1).answers(TFTP_DATA(block=1)) >>> assert not TFTP_ACK(block=0).answers(TFTP_DATA(block=1)) >>> assert TFTP_ACK(block=0).answers(TFTP_RRQ()) >>> assert not TFTP_ACK().answers(TFTP_ACK()) >>> assert TFTP_ERROR().answers(TFTP_DATA()) and TFTP_ERROR().answers(TFTP_ACK()) >>> assert TFTP_OACK().answers(TFTP_WRQ()) ###(001)=[passed] TFTP Options >>> x=IP(src="127.0.0.1")/UDP(sport=12345)/TFTP()/TFTP_RRQ(filename="fname")/TFTP_Options(options=[TFTP_Option(oname="blksize", value="8192"),TFTP_Option(oname="other", value="othervalue")]) >>> assert raw(x) == b'E\x00\x00H\x00\x01\x00\x00@\x11|\xa2\x7f\x00\x00\x01\x7f\x00\x00\x0109\x00E\x004B6\x00\x01fname\x00octet\x00blksize\x008192\x00other\x00othervalue\x00' >>> y=IP(raw(x)) >>> y[TFTP_Option].oname b'blksize' >>> y[TFTP_Option:2].oname b'other' >>> assert len(y[TFTP_Options].options) == 2 and y[TFTP_Option].oname == b"blksize" ###### ## TFTP Automatons ###### ###(002)=[passed] Utilities >>> from scapy.automaton import select_objects >>> >>> class MockTFTPSocket(object): ... packets = [] ... def __init__(self, iface): ... self.iface = iface ... def recv(self, n=None): ... pkt = self.packets.pop(0) ... return pkt ... def send(self, *args, **kargs): ... pass ... def close(self): ... pass ... @classmethod ... def select(classname, inputs, remain): ... test = [s for s in inputs if isinstance(s, classname)] ... if test: ... if len(test[0].packets): ... return test ... else: ... inputs = [s for s in inputs if not isinstance(s, classname)] ... return select_objects(inputs, remain) ... ###(003)=[passed] TFTP_read() automaton >>> class MockReadSocket(MockTFTPSocket): ... packets = [IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_DATA(block=1) / ("P" * 512), ... IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_DATA(block=2) / "<3"] ... >>> tftp_read = TFTP_read("file.txt", "1.2.3.4", sport=0x2807, ... ll=MockReadSocket, ... recvsock=MockReadSocket, debug=5) Starting control thread [tid=3942271808] >>> >>> res = tftp_read.run() Received command RUN ## state=[BEGIN] SENT : IP / UDP 192.168.122.12:10247 > 1.2.3.4:tftp / TFTP / RRQ b'file.txt' switching from [BEGIN] to [WAITING] ## state=[WAITING] Select on [, ] Selected [] Looking at RECVD: IP / UDP 1.2.3.4:domain > 127.0.0.1:10247 / DATA 1 / Raw Trying Receive condition [receive_data] Receive condition [receive_data] taken to state [RECEIVING] + Running action [send_ack] SENT : IP / UDP 192.168.122.12:10247 > 1.2.3.4:domain / TFTP / ACK 1 switching from [WAITING] to [RECEIVING] ## state=[RECEIVING] switching from [RECEIVING] to [WAITING] ## state=[WAITING] Select on [, ] Selected [] Looking at RECVD: IP / UDP 1.2.3.4:domain > 127.0.0.1:10247 / DATA 2 / Raw Trying Receive condition [receive_data] Receive condition [receive_data] taken to state [RECEIVING] + Running action [send_ack] SENT : IP / UDP 192.168.122.12:10247 > 1.2.3.4:domain / TFTP / ACK 2 switching from [WAITING] to [RECEIVING] ## state=[RECEIVING] switching from [RECEIVING] to [END] ## state=[END] Stopping control thread (tid=3942271808) >>> assert res == (b"P" * 512 + b"<3") ###(004)=[passed] TFTP_read() automaton error >>> class MockReadSocket(MockTFTPSocket): ... packets = [IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_ERROR(errorcode=2, errormsg="Fatal error")] ... >>> tftp_read = TFTP_read("file.txt", "1.2.3.4", sport=0x2807, ... ll=MockReadSocket, ... recvsock=MockReadSocket) >>> >>> try: ... tftp_read.run() ... assert False ... except Automaton.ErrorState as e: ... assert "Reached ERROR" in str(e) ... assert "ERROR Access violation" in str(e) ... ###(005)=[passed] TFTP_write() automaton >>> data_received = b"" >>> >>> class MockWriteSocket(MockTFTPSocket): ... packets = [IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_ACK(block=0), ... IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_ACK(block=1) ] ... def send(self, *args, **kargs): ... if len(args) and Raw in args[0]: ... global data_received ... data_received += args[0][Raw].load ... >>> tftp_write = TFTP_write("file.txt", "P" * 767 + "Scapy <3", "1.2.3.4", sport=0x2807, ... ll=MockWriteSocket, ... recvsock=MockWriteSocket) >>> >>> tftp_write.run() >>> assert data_received == (b"P" * 767 + b"Scapy <3") ###(006)=[passed] TFTP_write() automaton error >>> class MockWriteSocket(MockTFTPSocket): ... packets = [IP(src="1.2.3.4") / UDP(dport=0x2807) / TFTP_ERROR(errorcode=2, errormsg="Fatal error")] ... >>> tftp_write = TFTP_write("file.txt", "P" * 767 + "Scapy <3", "1.2.3.4", sport=0x2807, ... ll=MockWriteSocket, ... recvsock=MockWriteSocket) >>> >>> try: ... tftp_write.run() ... assert False ... except Automaton.ErrorState as e: ... assert "Reached ERROR" in str(e) ... assert "ERROR Access violation" in str(e) ... ###(007)=[passed] TFTP_WRQ_server() automaton >>> class MockWRQSocket(MockTFTPSocket): ... packets = [IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_WRQ(filename="scapy.txt"), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_DATA(block=1) / ("P" * 512), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_DATA(block=2) / "<3"] ... >>> tftp_wrq = TFTP_WRQ_server(ip="1.2.3.4", sport=0x2807, ... ll=MockWRQSocket, ... recvsock=MockWRQSocket) >>> assert tftp_wrq.run() == (b"scapy.txt", (b"P" * 512 + b"<3")) ###(008)=[passed] TFTP_WRQ_server() automaton with options >>> class MockWRQSocket(MockTFTPSocket): ... packets = [IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_WRQ(filename="scapy.txt") / TFTP_Options(options=[TFTP_Option(oname="blksize", value="100")]), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_DATA(block=1) / ("P" * 100), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_DATA(block=2) / "<3"] ... >>> tftp_wrq = TFTP_WRQ_server(ip="1.2.3.4", sport=0x2807, ... ll=MockWRQSocket, ... recvsock=MockWRQSocket) >>> assert tftp_wrq.run() == (b"scapy.txt", (b"P" * 100 + b"<3")) ###(009)=[passed] TFTP_RRQ_server() automaton >>> sent_data = "P" * 512 + "<3" >>> import tempfile >>> filename = tempfile.mktemp(suffix=".txt") >>> fdesc = open(filename, "w") >>> fdesc.write(sent_data) 514 >>> fdesc.close() >>> >>> received_data = "" >>> >>> class MockRRQSocket(MockTFTPSocket): ... packets = [IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_RRQ(filename="scapy.txt") / TFTP_Options(options=[TFTP_Option(oname="blksize", value="100")]), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_RRQ(filename=filename[5:]) / TFTP_Options(), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_ACK(block=1), ... IP(dst="1.2.3.4") / UDP(dport=0x2807) / TFTP() / TFTP_ACK(block=2) ] ... def send(self, *args, **kargs): ... if len(args): ... pkt = args[0] ... if TFTP_DATA in pkt: ... global received_data ... received_data += pkt[Raw].load.decode("utf-8") ... >>> tftp_rrq = TFTP_RRQ_server(ip="1.2.3.4", sport=0x2807, dir="/tmp/", serve_one=True, ... ll=MockRRQSocket, ... recvsock=MockRRQSocket, debug=4) Starting control thread [tid=3795635008] >>> tftp_rrq.run() ## state=[WAIT_RRQ] RECVD: IP / UDP 192.168.122.12:domain > 1.2.3.4:10247 / TFTP / RRQ b'scapy.txt' / TFTP_Options Receive condition [receive_rrq] taken to state [RECEIVED_RRQ] switching from [WAIT_RRQ] to [RECEIVED_RRQ] ## state=[RECEIVED_RRQ] Negotiated new blksize at 100 SENT : IP / UDP 1.2.3.4:10247 > 192.168.122.12:domain / TFTP / TFTP_OACK / TFTP_Options Condition [file_in_store] not taken Condition [file_not_found] taken to state [WAIT_RRQ] + Running action [send_error] SENT : IP / UDP 1.2.3.4:10247 > 192.168.122.12:domain / TFTP / ERROR File not found: b'File not found' switching from [RECEIVED_RRQ] to [WAIT_RRQ] ## state=[WAIT_RRQ] RECVD: IP / UDP 192.168.122.12:domain > 1.2.3.4:10247 / TFTP / RRQ b'tmpd8d58zz_.txt' / TFTP_Options Receive condition [receive_rrq] taken to state [RECEIVED_RRQ] switching from [WAIT_RRQ] to [RECEIVED_RRQ] ## state=[RECEIVED_RRQ] SENT : IP / UDP 1.2.3.4:10247 > 192.168.122.12:domain / TFTP / TFTP_OACK / TFTP_Options Condition [file_in_store] taken to state [SEND_FILE] switching from [RECEIVED_RRQ] to [SEND_FILE] ## state=[SEND_FILE] SENT : IP / UDP 1.2.3.4:10247 > 192.168.122.12:domain / TFTP / DATA 1 / Raw RECVD: IP / UDP 192.168.122.12:domain > 1.2.3.4:10247 / TFTP / ACK 1 Receive condition [received_ack] taken to state [RECEIVED_ACK] switching from [SEND_FILE] to [RECEIVED_ACK] ## state=[RECEIVED_ACK] Condition [no_more_data] not taken Condition [data_remaining] taken to state [SEND_FILE] switching from [RECEIVED_ACK] to [SEND_FILE] ## state=[SEND_FILE] SENT : IP / UDP 1.2.3.4:10247 > 192.168.122.12:domain / TFTP / DATA 2 / Raw RECVD: IP / UDP 192.168.122.12:domain > 1.2.3.4:10247 / TFTP / ACK 2 Receive condition [received_ack] taken to state [RECEIVED_ACK] switching from [SEND_FILE] to [RECEIVED_ACK] ## state=[RECEIVED_ACK] Condition [no_more_data] taken to state [END] switching from [RECEIVED_ACK] to [END] ## state=[END] Stopping control thread (tid=3795635008) >>> assert received_data == sent_data >>> >>> import os >>> os.unlink(filename) Scapy USB tests ━ Run at 04:12:41 from [test/scapy/layers/usb.uts] by UTscapy in 0.025351524353027344 └ Passed=5 └ Failed=0 ###### ## USBpcap tests ###### ###(000)=[passed] load module >>> load_layer("usb") ###(001)=[passed] linklayer test >>> from io import BytesIO >>> >>> data = b"\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xf9\x00\x00\x00\xb6\xaau[B\xd7\n\x00'\x00\x00\x00'\x00\x00\x00\x1b\x00\x008\xeeM\n\x97\xff\xff\x00\x00\x00\x00\t\x00\x01\x01\x00\x04\x00\x81\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xaau[\xdc\x88\x0c\x00$\x00\x00\x00$\x00\x00\x00\x1c\x000g4K\n\x97\xff\xff\x00\x00\x00\x00\x0b\x00\x00\x01\x00\x05\x00\x00\x02\x08\x00\x00\x00\x00\x80\x06\x00\x01\x00\x00\x12\x00\xbd\xaau[}\xa7\x0c\x00.\x00\x00\x00.\x00\x00\x00\x1c\x000g4K\n\x97\xff\xff\x00\x00\x00\x00\x0b\x00\x01\x01\x00\x05\x00\x00\x02\x12\x00\x00\x00\x01\x12\x01\x10\x02\x00\x00\x00@^\x04\xe8\x07\x07\x02\x01\x02\x00\x01\xbd\xaau[\x7f\xa7\x0c\x00\x1c\x00\x00\x00\x1c\x00\x00\x00\x1c\x000g4K\n\x97\xff\xff\x00\x00\x00\x00\x0b\x00\x01\x01\x00\x05\x00\x00\x02\x00\x00\x00\x00\x02\xbd\xaau[\x8d\xa7\x0c\x00$\x00\x00\x00$\x00\x00\x00\x1c\x00\x10\xe0\x98J\n\x97\xff\xff\x00\x00\x00\x00\x0b\x00\x00\x01\x00\x05\x00\x00\x02\x08\x00\x00\x00\x00\x80\x06\x00\x02\x00\x00\t\x00" >>> pcap = rdpcap(BytesIO(data)) >>> >>> pkt1 = USBpcap(function=9, info=1, endpoint=129, res=0, transfer=1, usbd_status=0, dataLength=12, bus=1, device=4, irpId=18446628669245765632, headerLen=27)/Raw(load=b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> assert raw(pcap[0]) == raw(pkt1) >>> assert isinstance(pcap[0], USBpcap) >>> >>> pkt2 = USBpcap(function=11, info=0, endpoint=0, res=0, transfer=2, usbd_status=0, dataLength=8, bus=1, device=5, irpId=18446628669200033584, headerLen=28)/USBpcapTransferControl(stage=0)/Raw(load=b'\x80\x06\x00\x01\x00\x00\x12\x00') >>> assert raw(pcap[1]) == raw(pkt2) >>> assert USBpcap in pcap[1] >>> assert USBpcapTransferControl in pcap[1] ###(002)=[passed] USBpcapTransferIsochronous >>> pkt = USBpcap(irpId=0x359275, function=0x1235, info=10, bus=35)/USBpcapTransferIsochronous(usbd_status=0x40000000) >>> assert raw(pkt) == b"'\x00u\x925\x00\x00\x00\x00\x00\x00\x00\x00\x005\x12\n#\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@" ###(003)=[passed] USBpcapTransferInterrupt >>> pkt = USBpcap(irpId=0x359275, function=0x1235, info=10, bus=35)/USBpcapTransferInterrupt(startFrame=0x40000000, numberOfPackets=0x80000000, errorCount=2) >>> assert raw(pkt) == b"'\x00u\x925\x00\x00\x00\x00\x00\x00\x00\x00\x005\x12\n#\x00\x00\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x80\x02\x00\x00\x00" ###(004)=[passed] USBpcapTransferControl >>> pkt = USBpcap(irpId=0x359275, function=0x1235, info=10, bus=35)/USBpcapTransferControl(stage=11) >>> assert raw(pkt) == b'\x1c\x00u\x925\x00\x00\x00\x00\x00\x00\x00\x00\x005\x12\n#\x00\x00\x00\x00\x02\x01\x00\x00\x00\x0b' VRRP regression tests for Scapy ━ Run at 04:12:41 from [test/scapy/layers/vrrp.uts] by UTscapy in 0.033417701721191406 └ Passed=6 └ Failed=0 ###### ## VRRP tests ###### ###(000)=[passed] VRRP - build >>> s = raw(IP()/VRRP()) >>> s == b'E\x00\x00$\x00\x01\x00\x00@p|g\x7f\x00\x00\x01\x7f\x00\x00\x01!\x01d\x00\x00\x01z\xfd\x00\x00\x00\x00\x00\x00\x00\x00' True ###(001)=[passed] VRRP - dissection >>> p = IP(s) >>> VRRP in p and p[VRRP].chksum == 0x7afd True ###(002)=[passed] VRRP IPv6 - build >>> s6 = raw(IPv6()/VRRPv3()) >>> s6 == b'`\x00\x00\x00\x00\x08p@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x011\x01d\x01\x00dj\x1f' True ###(003)=[passed] VRRP IPv6 - dissection >>> p6 = IPv6(s6) >>> VRRPv3 in p6 and p6[VRRPv3].chksum == 0x6a1f True ###(004)=[passed] VRRP - chksums >>> p = Ether(src="00:00:5e:00:02:02",dst="01:00:5e:00:00:12")/IP(src="20.0.0.3", dst="224.0.0.18",ttl=255)/VRRPv3(priority=254,vrid=2,version=3,adv=1,addrlist=["20.0.1.2","20.0.1.3"]) >>> a = Ether(raw(p)) >>> assert a[VRRPv3].chksum == 0xb25e >>> p = Ether(src="00:00:5e:00:02:02",dst="01:00:5e:00:00:12")/IP(src="20.0.0.3", dst="224.0.0.18",ttl=255)/VRRP(priority=254,vrid=2,version=1,adv=1,addrlist=["20.0.1.2","20.0.1.3"]) >>> b = Ether(raw(p)) >>> assert b[VRRP].chksum == 0xc6f4 ###(005)=[passed] VRRP IPv6 - chksums >>> p = Ether(src="00:00:5e:00:02:02",dst="33:33:00:00:00:12")/IPv6(src="2001:db8::1", dst="ff02::12",hlim=255)/VRRPv3(priority=254,vrid=2,version=3,adv=1,ipcount=2,addrlist=["2001:db8::2","2001:db8::3"]) >>> c = Ether(raw(p)) >>> assert c[VRRPv3].chksum == 0x481b VXLAN regression tests for Scapy ━ Run at 04:12:41 from [test/scapy/layers/vxlan.uts] by UTscapy in 0.10567784309387207 └ Passed=8 └ Failed=0 ###### ## VXLAN layer ###### ###(000)=[passed] Build a VXLAN packet with VNI of 42 >>> raw(UDP(sport=1024, dport=4789, len=None, chksum=None)/VXLAN(flags=0x08, vni=42)) == b'\x04\x00\x12\xb5\x00\x10\x00\x00\x08\x00\x00\x00\x00\x00\x2a\x00' No IP underlayer to compute checksum. Leaving null. True ###(001)=[passed] Verify VXLAN Ethernet Binding >>> pkt = VXLAN(raw(VXLAN(vni=23)/Ether(dst="11:11:11:11:11:11", src="11:11:11:11:11:11", type=0x800))) >>> pkt.flags.NextProtocol and pkt.NextProtocol == 3 True ###(002)=[passed] Verify UDP dport overloading >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= IP(src="1.1.1.1", dst="2.2.2.2") / UDP(sport=1111) >>> p /= VXLAN(flags=0xC, vni=42, NextProtocol=0) / Ether() / IP() >>> p = Ether(raw(p)) >>> assert p[UDP].dport == 4789 >>> assert p[Ether:2].type == 0x800 ###(003)=[passed] Build a VXLAN packet with next protocol field >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= IP(src="1.1.1.1", dst="2.2.2.2") / UDP(sport=1111) >>> p /= VXLAN(flags=0xC, vni=42, NextProtocol=3) / Ether() / IP() >>> p = Ether(raw(p)) >>> assert p[UDP].dport == 4789 >>> assert p[VXLAN].reserved0 == 0x0 >>> assert p[VXLAN].NextProtocol == 3 >>> assert p[Ether:2].type == 0x800 ###(004)=[passed] Build a VXLAN packet with no group policy ID >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= IP(src="1.1.1.1", dst="2.2.2.2") / UDP(sport=1111) >>> p /= VXLAN(flags=0xC, vni=42) / Ether() / IP() >>> p = Ether(raw(p)) >>> assert p[VXLAN].reserved2 == 0x0 >>> assert p[VXLAN].gpid is None >>> assert p[Ether:2].type == 0x800 ###(005)=[passed] Build a VXLAN packet with group policy ID = 42 >>> p = Ether(dst="11:11:11:11:11:11", src="22:22:22:22:22:22") >>> p /= IP(src="1.1.1.1", dst="2.2.2.2") / UDP(sport=1111) >>> p /= VXLAN(flags=0x8C, gpid=42, vni=42) / Ether() / IP() >>> p = Ether(raw(p)) >>> assert p[VXLAN].gpid == 42 >>> assert p[VXLAN].reserved1 is None >>> assert p[Ether:2].type == 0x800 ###(006)=[passed] Build a VXLAN packet followed by and IP or IPv6 layer >>> etherproto = 0x0 >>> ipproto = 0x1 >>> ipv6proto = 0x2 >>> iptest = "192.168.20.20" >>> ipv6test = "659f:2c23:565:3fab:32d5:bb95:a0ed:2e3b" >>> >>> expkt = UDP() / VXLAN() / IP(dst=iptest) / "testing" >>> expkt = UDP(bytes(expkt)) No IP underlayer to compute checksum. Leaving null. >>> assert expkt[VXLAN].NextProtocol == ipproto >>> assert IP in expkt >>> assert expkt[IP].dst == iptest >>> >>> expkt = UDP() / VXLAN() / IPv6(dst=ipv6test) / "testing" >>> expkt = UDP(bytes(expkt)) No IP underlayer to compute checksum. Leaving null. >>> assert expkt[VXLAN].NextProtocol == ipv6proto >>> assert IPv6 in expkt >>> assert expkt[IPv6].dst == ipv6test >>> >>> expkt = UDP() / VXLAN(flags=0x4, NextProtocol=ipproto) / "0xfffffffffffffffffffffffffffffffffffffffffffff" >>> expkt = UDP(bytes(expkt)) No IP underlayer to compute checksum. Leaving null. >>> assert IP in expkt >>> >>> expkt = UDP() / VXLAN(flags=0x4, NextProtocol=ipv6proto) / "0xfffffffffffffffffffffffffffffffffffffffffffff" >>> expkt = UDP(bytes(expkt)) No IP underlayer to compute checksum. Leaving null. >>> assert IPv6 in expkt >>> >>> expkt = UDP() / VXLAN(flags=0x4, NextProtocol=etherproto) / "0xfffffffffffffffffffffffffffffffffffffffffffff" >>> expkt = UDP(bytes(expkt)) No IP underlayer to compute checksum. Leaving null. >>> assert Ether in expkt ###(007)=[passed] Dissect VXLAN with no NextProtocol >>> pkt = VXLAN(b'\x08\x00\x00\x00\x00"H\x00\xcaF\xae\x10\xed\x0f\x0c\x00\x00\x00\x00\x00\x08\x06\x00\x01\x08\x00\x06\x04\x00\x02\x0c\x00\x00\x00\x00\x00\x7f\xff\xff\xfe\x11"3DUf\x7f\x00\x00\x02') >>> >>> assert pkt.NextProtocol is None >>> assert Ether in pkt >>> assert ARP in pkt Tests for X.509 objects ━ Run at 04:12:42 from [test/scapy/layers/x509.uts] by UTscapy in 0.6214094161987305 └ Passed=59 └ Failed=0 ###### ## General BER decoding tests ###### ###(000)=[passed] Decoding an ASN.1 SEQUENCE with an unknown, high-tag identifier >>> from scapy.layers.x509 import ASN1P_PRIVSEQ >>> s = b'\xff\x84\x92\xb9\x86H\x1e0\x1c\x16\x04BNCH\x04\x14\xb7\xca\x01wO\x9b\xbaz\xbb\xb5\x92\x87>T\xb2\xc3g\xc1]\xfb' >>> p = ASN1P_PRIVSEQ(s) ###### ## Private RSA & ECDSA keys class tests ###### ###(001)=[passed] Key class : Importing DER encoded RSA private key >>> from scapy.layers.x509 import RSAPrivateKey >>> k = base64.b64decode('MIIEowIBAAKCAQEAmFdqP+nTEZukS0lLP+yj1gNImsEIf7P2ySTunceYxwkm4VE5QReDbb2L5/HL\nA9pPmIeQLSq/BgO1meOcbOSJ2YVHQ28MQ56+8Crb6n28iycX4hp0H3AxRAjh0edX+q3yilvYJ4W9\n/NnIb/wAZwS0oJif/tTkVF77HybAfJde5Eqbp+bCKIvMWnambh9DRUyjrBBZo5dA1o32zpuFBrJd\nI8dmUpw9gtf0F0Ba8lGZm8Uqc0GyXeXOJUE2u7CiMu3M77BM6ZLLTcow5+bQImkmTL1SGhzwfinM\nE1e6p3Hm//pDjuJvFaY22k05LgLuyqc59vFiB3Toldz8+AbMNjvzAwIDAQABAoIBAH3KeJZL2hhI\n/1GXNMaU/PfDgFkgmYbxMA8JKusnm/SFjxAwBGnGI6UjBXpBgpQs2Nqm3ZseF9u8hmCKvGiCEX2G\nesCo2mSfmSQxD6RBrMTuQ99UXpxzBIscFnM/Zrs8lPBARGzmF2nI3qPxXtex4ABX5o0Cd4NfZlZj\npj96skUoO8+bd3I4OPUFYFFFuv81LoSQ6Hew0a8xtJXtKkDp9h1jTGGUOc189WACNoBLH0MGeVoS\nUfc1++RcC3cypUZ8fNP1OO6GBfv06f5oXES4ZbxGYpa+nCfNwb6V2gWbkvaYm7aFn0KWGNZXS1P3\nOcWv6IWdOmg2CI7MMBLJ0LyWVCECgYEAyMJYw195mvHl8VyxJ3HkxeQaaozWL4qhNQ0Kaw+mzD+j\nYdkbHb3aBYghsgEDZjnyOVblC7I+4smvAZJLWJaf6sZ5HAw3zmj1ibCkXx7deoRc/QVcOikl3dE/\nymO0KGJNiGzJZmxbRS3hTokmVPuxSWW4p5oSiMupFHKa18Uv8DECgYEAwkJ7iTOUL6b4e3lQuHQn\nJbsiQpd+P/bsIPP7kaaHObewfHpfOOtIdtN4asxVFf/PgW5uWmBllqAHZYR14DEYIdL+hdLrdvk5\nnYQ3YfhOnp+haHUPCdEiXrRZuGXjmMA4V0hL3HPF5ZM8H80fLnN8Pgn2rIC7CZQ46y4PnoV1nXMC\ngYBBwCUCF8rkDEWa/ximKo8aoNJmAypC98xEa7j1x3KBgnYoHcrbusok9ajTe7F5UZEbZnItmnsu\nG4/Nm/RBV1OYuNgBb573YzjHl6q93IX9EkzCMXc7NS7JrzaNOopOj6OFAtwTR3m89oHMDu8W9jfi\nKgaIHdXkJ4+AuugrstE4gQKBgFK0d1/8g7SeA+Cdz84YNaqMt5NeaDPXbsTA23QxUBU0rYDxoKTd\nFybv9a6SfA83sCLM31K/A8FTNJL2CDGA9WNBL3fOSs2GYg88AVBGpUJHeDK+0748OcPUSPaG+pVI\nETSn5RRgffq16r0nWYUvSdAn8cuTqw3y+yC1pZS6AU8dAoGBAL5QCi0dTWKN3kf3cXaCAnYiWe4Q\ng2S+SgLE+F1U4Xws2rqAuSvIiuT5i5+Mqk9ZCGdoReVbAovJFoRqe7Fj9yWM+b1awGjL0bOTtnqx\n0iljob6uFyhpl1xgW3a3ICJ/ZYLvkgb4IBEteOwWpp37fX57vzhW8EmUV2UX7ve1uNRI') >>> x=RSAPrivateKey(k) ###(002)=[passed] Key class : key version >>> x.version == ASN1_INTEGER(0) True ###(003)=[passed] Key class : key modulus >>> x.modulus == ASN1_INTEGER(19231328316532061413420367242571475005688288081144416166988378525696075445024135424022026378563116068168327239354659928492979285632474448448624869172454076124150405352043642781483254546569202103296262513098482624188672299255268092629150366527784294463900039290024710152521604731213565912934889752122898104556895316819303096201441834849255370122572613047779766933573375974464479123135292080801384304131606933504677232323037116557327478512106367095125103346134248056463878553619525193565824925835325216545121044922690971718737998420984924512388011040969150550056783451476150234324593710633552558175109683813482739004163) True ###(004)=[passed] Key class : key public exponent >>> x.publicExponent == ASN1_INTEGER(65537) True ###(005)=[passed] Key class : key private exponent >>> x.privateExponent == ASN1_INTEGER(15879630313397508329451198152673380989865598204237760057319927734227125481903063742175442230739018051313441697936698689753842471306305671266572085925009572141819112648211571007521954312641597446020984266846581125287547514750428503480880603089110687015181510081018160579576523796170439894692640171752302225125980423560965987469457505107324833137678663960560798216976668670722016960863268272661588745006387723814962668678285659376534048525020951633874488845649968990679414325096323920666486328886913648207836459784281744709948801682209478580185160477801656666089536527545026197569990716720623647770979759861119273292833) True ###(006)=[passed] Key class : key prime1 >>> x.prime1 == ASN1_INTEGER(140977881300857803928857666115326329496639762170623218602431133528876162476487960230341078724702018316260690172014674492782486113504117653531825010840338251572887403113276393351318549036549656895326851872473595350667293402676143426484331639796163189182788306480699144107905869179435145810212051656274284113969) True ###(007)=[passed] Key class : key prime2 >>> x.prime2 == ASN1_INTEGER(136413798668820291889092636919077529673097927884427227010121877374504825870002258140616512268521246045642663981036167305976907058413796938050224182519965099316625879807962173794483933183111515251808827349718943344770056106787713032506379905031673992574818291891535689493330517205396872699985860522390496583027) True ###(008)=[passed] Key class : key exponent1 >>> x.exponent1 == ASN1_INTEGER(46171616708754015342920807261537213121074749458020000367465429453038710215532257783908950878847126373502288079285334594398328912526548076894076506899568491565992572446455658740752572386903609191774044411412991906964352741123956581870694330173563737928488765282233340389888026245745090096745219902501964298369) True ###(009)=[passed] Key class : key exponent2 >>> x.exponent2 == ASN1_INTEGER(58077388505079936284685944662039782610415160654764308528562806086690474868010482729442634318267235411531220690585030443434512729356878742778542733733189895801341155353491318998637269079682889033003797865508917973141494201620317820971253064836562060222814287812344611566640341960495346782352037479526674026269) True ###(010)=[passed] Key class : key coefficient >>> x.coefficient == ASN1_INTEGER(133642091354977099805228515340626956943759840737228695249787077343495440064451558090846230978708992851702164116059746794777336918772240719297253693109788134358485382183551757562334253896010728509892421673776502933574360356472723011839127418477652997263867089539752161307227878233961465798519818890416647361608) True ###### ## X509_Cert class tests ###### ###(011)=[passed] Cert class : Importing DER encoded X.509 Certificate with RSA public key >>> from scapy.layers.x509 import X509_Cert >>> c = base64.b64decode('MIIFEjCCA/qgAwIBAgIJALRecEPnCQtxMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYDVQQGEwJGUjEO\nMAwGA1UECBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMRcwFQYDVQQKEw5NdXNocm9vbSBDb3JwLjEe\nMBwGA1UECxMVTXVzaHJvb20gVlBOIFNlcnZpY2VzMSUwIwYDVQQDExxJS0V2MiBYLjUwOSBUZXN0\nIGNlcnRpZmljYXRlMScwJQYJKoZIhvcNAQkBFhhpa2V2Mi10ZXN0QG11c2hyb29tLmNvcnAwHhcN\nMDYwNzEzMDczODU5WhcNMjYwMzMwMDczODU5WjCBtjELMAkGA1UEBhMCRlIxDjAMBgNVBAgTBVBh\ncmlzMQ4wDAYDVQQHEwVQYXJpczEXMBUGA1UEChMOTXVzaHJvb20gQ29ycC4xHjAcBgNVBAsTFU11\nc2hyb29tIFZQTiBTZXJ2aWNlczElMCMGA1UEAxMcSUtFdjIgWC41MDkgVGVzdCBjZXJ0aWZpY2F0\nZTEnMCUGCSqGSIb3DQEJARYYaWtldjItdGVzdEBtdXNocm9vbS5jb3JwMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAmFdqP+nTEZukS0lLP+yj1gNImsEIf7P2ySTunceYxwkm4VE5QReD\nbb2L5/HLA9pPmIeQLSq/BgO1meOcbOSJ2YVHQ28MQ56+8Crb6n28iycX4hp0H3AxRAjh0edX+q3y\nilvYJ4W9/NnIb/wAZwS0oJif/tTkVF77HybAfJde5Eqbp+bCKIvMWnambh9DRUyjrBBZo5dA1o32\nzpuFBrJdI8dmUpw9gtf0F0Ba8lGZm8Uqc0GyXeXOJUE2u7CiMu3M77BM6ZLLTcow5+bQImkmTL1S\nGhzwfinME1e6p3Hm//pDjuJvFaY22k05LgLuyqc59vFiB3Toldz8+AbMNjvzAwIDAQABo4IBHzCC\nARswHQYDVR0OBBYEFPPYTt6Q9+Zd0s4zzVxWjG+XFDFLMIHrBgNVHSMEgeMwgeCAFPPYTt6Q9+Zd\n0s4zzVxWjG+XFDFLoYG8pIG5MIG2MQswCQYDVQQGEwJGUjEOMAwGA1UECBMFUGFyaXMxDjAMBgNV\nBAcTBVBhcmlzMRcwFQYDVQQKEw5NdXNocm9vbSBDb3JwLjEeMBwGA1UECxMVTXVzaHJvb20gVlBO\nIFNlcnZpY2VzMSUwIwYDVQQDExxJS0V2MiBYLjUwOSBUZXN0IGNlcnRpZmljYXRlMScwJQYJKoZI\nhvcNAQkBFhhpa2V2Mi10ZXN0QG11c2hyb29tLmNvcnCCCQC0XnBD5wkLcTAMBgNVHRMEBTADAQH/\nMA0GCSqGSIb3DQEBBQUAA4IBAQA2zt0BvXofiVvHMWlftZCstQaawej1SmxrAfDB4NUM24NsG+UZ\nI88XA5XM6QolmfyKnNromMLC1+6CaFxjq3jC/qdS7ifalFLQVo7ik/te0z6Olo0RkBNgyagWPX2L\nR5kHe9RvSDuoPIsbSHMmJA98AZwatbvEhmzMINJNUoHVzhPeHZnIaBgUBg02XULk/ElidO51Rf3g\nh8dR/kgFQSQT687vs1x9TWD00z0Q2bs2UF3Ob3+NYkEGEo5F9RePQm0mY94CT2xs6WpHo060Fo7f\nVpAFktMWx1vpu+wsEbQAhgGqV0fCR2QwKDIbTrPW/p9HJtJDYVjYdAFxr3s7V77y') >>> x=X509_Cert(c) ###(012)=[passed] Cert class : Rebuild certificate >>> raw(x) == c True ###(013)=[passed] Cert class : Version >>> tbs = x.tbsCertificate >>> tbs.version == ASN1_INTEGER(2) True ###(014)=[passed] Cert class : Serial >>> tbs.serialNumber == ASN1_INTEGER(0xb45e7043e7090b71) True ###(015)=[passed] Cert class : Signature algorithm (as advertised by TBSCertificate) >>> from scapy.layers.x509 import X509_AlgorithmIdentifier >>> assert type(tbs.signature) is X509_AlgorithmIdentifier >>> tbs.signature.algorithm == ASN1_OID("sha1-with-rsa-signature") True ###(016)=[passed] Cert class : Issuer structure >>> from scapy.layers.x509 import X509_AttributeTypeAndValue >>> from scapy.layers.x509 import X509_RDN >>> assert type(tbs.issuer) is list >>> assert len(tbs.issuer) == 7 >>> assert type(tbs.issuer[0]) is X509_RDN >>> assert type(tbs.issuer[0].rdn) is list >>> assert type(tbs.issuer[0].rdn[0]) is X509_AttributeTypeAndValue ###(017)=[passed] Cert class : Issuer first attribute >>> tbs.issuer[0].rdn[0].type == ASN1_OID("countryName") and tbs.issuer[0].rdn[0].value == ASN1_PRINTABLE_STRING(b"FR") True ###(018)=[passed] Cert class : Issuer string >>> tbs.get_issuer_str() == '/C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp' True ###(019)=[passed] Cert class : Validity >>> from scapy.layers.x509 import X509_Validity >>> assert type(tbs.validity) is X509_Validity >>> tbs.validity.not_before == ASN1_UTC_TIME("060713073859Z") and tbs.validity.not_after == ASN1_UTC_TIME("260330073859Z") True ###(020)=[passed] Cert class : Subject structure >>> assert type(tbs.subject) is list >>> assert len(tbs.subject) == 7 >>> assert type(tbs.subject[0]) is X509_RDN >>> assert type(tbs.subject[0].rdn) is list >>> assert type(tbs.subject[0].rdn[0]) is X509_AttributeTypeAndValue ###(021)=[passed] Cert class : Subject last attribute >>> tbs.issuer[6].rdn[0].type == ASN1_OID("emailAddress") and tbs.issuer[6].rdn[0].value == ASN1_IA5_STRING(b"ikev2-test@mushroom.corp") True ###(022)=[passed] Cert class : Subject string >>> tbs.get_subject_str() == '/C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp' True ###(023)=[passed] Cert class : SubjectPublicKey algorithm >>> from scapy.layers.x509 import X509_SubjectPublicKeyInfo >>> assert type(tbs.subjectPublicKeyInfo) is X509_SubjectPublicKeyInfo >>> spki = tbs.subjectPublicKeyInfo >>> spki.signatureAlgorithm.algorithm == ASN1_OID("rsaEncryption") True ###(024)=[passed] Cert class : SubjectPublicKey value >>> from scapy.layers.x509 import RSAPublicKey >>> assert type(spki.subjectPublicKey) is RSAPublicKey >>> spki.subjectPublicKey.modulus == ASN1_INTEGER(19231328316532061413420367242571475005688288081144416166988378525696075445024135424022026378563116068168327239354659928492979285632474448448624869172454076124150405352043642781483254546569202103296262513098482624188672299255268092629150366527784294463900039290024710152521604731213565912934889752122898104556895316819303096201441834849255370122572613047779766933573375974464479123135292080801384304131606933504677232323037116557327478512106367095125103346134248056463878553619525193565824925835325216545121044922690971718737998420984924512388011040969150550056783451476150234324593710633552558175109683813482739004163) and spki.subjectPublicKey.publicExponent == ASN1_INTEGER(65537) True ###(025)=[passed] Cert class : Extensions structure >>> ext = tbs.extensions >>> assert type(ext) is list >>> assert len(ext) == 3 ###(026)=[passed] Cert class : Subject key identifier extension info >>> from scapy.layers.x509 import X509_Extension >>> assert type(ext[0]) is X509_Extension >>> ext[0].extnID == ASN1_OID("subjectKeyIdentifier") and ext[0].critical == None True ###(027)=[passed] Cert class : Subject key identifier extension value >>> from scapy.layers.x509 import X509_ExtSubjectKeyIdentifier >>> assert type(ext[0].extnValue) is X509_ExtSubjectKeyIdentifier >>> ext[0].extnValue.keyIdentifier == ASN1_STRING(b'\xf3\xd8N\xde\x90\xf7\xe6]\xd2\xce3\xcd\\V\x8co\x97\x141K') True ###(028)=[passed] Cert class : Signature algorithm >>> from scapy.layers.x509 import X509_AlgorithmIdentifier >>> assert type(x.signatureAlgorithm) is X509_AlgorithmIdentifier >>> x.signatureAlgorithm.algorithm == ASN1_OID("sha1-with-rsa-signature") True ###(029)=[passed] Cert class : Signature value >>> x.signatureValue == ASN1_BIT_STRING(b"6\xce\xdd\x01\xbdz\x1f\x89[\xc71i_\xb5\x90\xac\xb5\x06\x9a\xc1\xe8\xf5Jlk\x01\xf0\xc1\xe0\xd5\x0c\xdb\x83l\x1b\xe5\x19#\xcf\x17\x03\x95\xcc\xe9\n%\x99\xfc\x8a\x9c\xda\xe8\x98\xc2\xc2\xd7\xee\x82h\\c\xabx\xc2\xfe\xa7R\xee'\xda\x94R\xd0V\x8e\xe2\x93\xfb^\xd3>\x8e\x96\x8d\x11\x90\x13`\xc9\xa8\x16=}\x8bG\x99\x07{\xd4oH;\xa8<\x8b\x1bHs&$\x0f|\x01\x9c\x1a\xb5\xbb\xc4\x86l\xcc \xd2MR\x81\xd5\xce\x13\xde\x1d\x99\xc8h\x18\x14\x06\r6]B\xe4\xfcIbt\xeeuE\xfd\xe0\x87\xc7Q\xfeH\x05A$\x13\xeb\xce\xef\xb3\\}M`\xf4\xd3=\x10\xd9\xbb6P]\xceo\x7f\x8dbA\x06\x12\x8eE\xf5\x17\x8fBm&c\xde\x02Oll\xe9jG\xa3N\xb4\x16\x8e\xdfV\x90\x05\x92\xd3\x16\xc7[\xe9\xbb\xec,\x11\xb4\x00\x86\x01\xaaWG\xc2Gd0(2\x1bN\xb3\xd6\xfe\x9fG&\xd2CaX\xd8t\x01q\xaf{;W\xbe\xf2", readable=True) True ###(030)=[passed] Cert class : Default X509_Cert from scratch >>> from scapy.layers.x509 import X509_Cert >>> raw(X509_Cert(raw(X509_Cert()))) == raw(X509_Cert()) True ###(031)=[passed] Cert class : Error >>> try: ... Cert("fail") ... except: ... assert True ... else: ... assert False ... ###(032)=[passed] Cert class: Import Windows AD certificate >>> from scapy.layers.x509 import X509_Cert >>> c = base64.b64decode('MIIHKjCCBRKgAwIBAgITEgAAAAerpFLcIBwL6QAAAAAABzANBgkqhkiG9w0BAQsFADBHMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFjAUBgoJkiaJk/IsZAEZFgZkb21haW4xFjAUBgNVBAMTDWRvbWFpbi1EQzEtQ0EwHhcNMjQwNDMwMTEyOTA5WhcNMjUwNDMwMTEyOTA5WjAbMRkwFwYDVQQDExBEQzEuZG9tYWluLmxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvTvRYsSLoBJnHA+L62fgLUTN0JmBGONhz4qduRWBcpqOJIivxK2AcPThr8xdVcS5T80vUaT2SIzSvSp2RGdDbBWYGhRpZKkuCGA94PBYowb6aZuWF3RCm3kyySa/hisx4rlly+oERMtjvtgIHFAodu14gtA4YwKDwUwHY2bAE2Btxfsqrmzk8ezGpEB7/wO83zhLbc05ZMD43VwUEmTS5RSE2/1B/6gnO1KeAOrvUD6aiybvWKLNaEKsecsmqay60S+kFGcnXyji/CSv78URaetkJ7mRqPDR5E9DnWjfgAFBOYPoGE/XlV2duo3vBzasYIQtkBZvqeb9n/PkbIKmbQIDAQABo4IDOTCCAzUwLwYJKwYBBAGCNxQCBCIeIABEAG8AbQBhAGkAbgBDAG8AbgB0AHIAbwBsAGwAZQByMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAOBgNVHQ8BAf8EBAMCBaAweAYJKoZIhvcNAQkPBGswaTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcNAwQCAgCAMAsGCWCGSAFlAwQBKjALBglghkgBZQMEAS0wCwYJYIZIAWUDBAECMAsGCWCGSAFlAwQBBTAHBgUrDgMCBzAKBggqhkiG9w0DBzAdBgNVHQ4EFgQU1vUiq6+MemfH69K9TnY2VDcBzdIwHwYDVR0jBBgwFoAUP8rKky+uwfavmkn3YezKPryPZXkwgcgGA1UdHwSBwDCBvTCBuqCBt6CBtIaBsWxkYXA6Ly8vQ049ZG9tYWluLURDMS1DQSxDTj1EQzEsQ049Q0RQLENOPVB1YmxpYyUyMEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9ZG9tYWluLERDPWxvY2FsP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDCBwAYIKwYBBQUHAQEEgbMwgbAwga0GCCsGAQUFBzAChoGgbGRhcDovLy9DTj1kb21haW4tREMxLUNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWRvbWFpbixEQz1sb2NhbD9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTA8BgNVHREENTAzoB8GCSsGAQQBgjcZAaASBBBzEAh+YqaMQ5DcXUF1z8mXghBEQzEuZG9tYWluLmxvY2FsME0GCSsGAQQBgjcZAgRAMD6gPAYKKwYBBAGCNxkCAaAuBCxTLTEtNS0yMS0xOTI0MTM3MjE0LTM3MTg2NDYyNzQtNDAyMTU3MjEtMTAwMDANBgkqhkiG9w0BAQsFAAOCAgEAWwJuAQIRP3w9XheBdw+PgvMlfeIPV615Ce9C47HJto0kJOWtlBk3gF0WEjP7l8sToBU9v9L1zkczDh42XvSYSipv1q+20fRiXWQj0HqZRPt7yKcN3nnW4Foj6nFUlKjp8WIViQvJxUP2IP/SeblPRADry4AfRgxipq5rikl1PIQTH99u5MNEIePeP7apCcMizOd72RE/S9bPpQ4vB6vJ5T20YNSspHqC2qQnqOUqQwKrd+0i44bV4NANDPwv8wqzTvbDA9JMWm7sUanrl0x2yvfB9JyuZmo8y3JE7D8RFs/Z5btvWvQ4CWWIgVKnVncXOr98ytSaGNOift2NNz/2sox26Dgls4xklllnHiF2353IDSNPZqTNruWjUyM+4RuGKu6djqlaTneNEOi9Cu5HSE95JC03k9NhYyDW8PUIAWksLiWMYFng4KH37U9P15EiPsgPY70nP4ll6NqKt7RfXnSH7AmvacvY7dazsKOulAdzp8YuQ5vjR61FsbB/jn1hwtR7OdNYFKd9KK66zFSrX+n0sTXMou1FzvqDUj5+qLlbyEzYvU/QbNTxYUIjjNv+asXtD9T+UaKoI5PyeRBA4cnU7+klduy0vVh2Lx6lnIZPVCG7i1sQYRQQ3ESP7QSUuJtG/wgJZ5KspzfIHBjt62549oVj0CoJcvMZ2wOr8iY=') >>> x=X509_Cert(c) ###(033)=[passed] Cert class: Check some Windows-specific extensions >>> tbs = x.tbsCertificate >>> ext = tbs.extensions >>> assert type(ext) is list >>> assert len(ext) == 10 >>> >>> assert [x[0].extnID.oidname for x in ext] == [ ... 'ENROLL_CERTTYPE', ... 'extKeyUsage', ... 'keyUsage', ... 'smimeCapabilities', ... 'subjectKeyIdentifier', ... 'authorityKeyIdentifier', ... 'cRLDistributionPoints', ... 'authorityInfoAccess', ... 'subjectAltName', ... 'NTDS_CA_SECURITY_EXT', ... ] >>> assert ext[0].extnValue.Name == b'\x00D\x00o\x00m\x00a\x00i\x00n\x00C\x00o\x00n\x00t\x00r\x00o\x00l\x00l\x00e\x00r' >>> assert ext[1].extnValue.extendedKeyUsage[0].oid == '1.3.6.1.5.5.7.3.2' >>> assert ext[6].extnValue.cRLDistributionPoints[0].distributionPoint.distributionPointName.fullName[0].generalName.uniformResourceIdentifier == b'ldap:///CN=domain-DC1-CA,CN=DC1,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=domain,DC=local?certificateRevocationList?base?objectClass=cRLDistributionPoint' >>> assert ext[8].extnValue.subjectAltName[1].generalName.dNSName == b"DC1.domain.local" >>> assert ext[9].extnValue.value == b'S-1-5-21-1924137214-3718646274-40215721-1000' ###(034)=[passed] Cert class : X509 Certificate with rare fields types >>> cert_with_bmp_string = base64.b64decode('MIIB3DCCAaagAwIBAgIBATANBgkqhkiG9w0BAQsFADCB9jELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQHEwJMRzEXMBUGA1UEChMOV2Vic2Vuc2UsIEluYy4xGjAYBgNVBAsTEVdlYnNlbnNlIEVuZHBvaW50MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QHdlYnNlbnNlLmNvbTE2MDQGA1UEAxMtV2Vic2Vuc2UgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MTswOQYDVQQNHjIAMQAyADQANgAxADgAMwA1ADEANABFAFAAQAB3AGUAYgBzAGUAbgBzAGUALgBjAG8AbTAeFw0yNDExMDUxMDA0MjlaFw0yNDExMDYxMDE0MjlaMEMxCzAJBgNVBAYTAkZSMRQwEgYDVQQKEwtTY2FweSwgSW5jLjEeMBwGA1UEAxMVU2NhcHkgRGVmYXVsdCBTdWJqZWN0MBowDQYJKoZIhvcNAQELBQADCQAwBgIBCgIBA6MTMBEwDwYDVR0TAQEABAUwAwEBADANBgkqhkiG9w0BAQsFAAMhAGRlZmF1bHRzaWduYXR1cmVkZWZhdWx0c2lnbmF0dXJl') >>> c = X509_Cert(cert_with_bmp_string) >>> bmp_field_value = str(c.tbsCertificate.issuer[7].rdn[0].value.val, "utf-16be") >>> assert bmp_field_value == '1246183514EP@websense.com' ###### ## X509_CRL class tests ###### ###(035)=[passed] CRL class : Importing DER encoded X.509 CRL >>> from scapy.layers.x509 import X509_CRL >>> c = base64.b64decode('MIICHjCCAYcwDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWdu\nLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\naG9yaXR5Fw0wNjExMDIwMDAwMDBaFw0wNzAyMTcyMzU5NTlaMIH2MCECECzSS2LEl6QXzW6jyJx6\nLcgXDTA0MDQwMTE3NTYxNVowIQIQOkXeVssCzdzcTndjIhvU1RcNMDEwNTA4MTkyMjM0WjAhAhBB\nXYg2gRUg1YCDRqhZkngsFw0wMTA3MDYxNjU3MjNaMCECEEc5gf/9hIHxlfnrGMJ8DfEXDTAzMDEw\nOTE4MDYxMlowIQIQcFR+auK62HZ/R6mZEEFeZxcNMDIwOTIzMTcwMDA4WjAhAhB+C13eGPI5ZoKm\nj2UiOCPIFw0wMTA1MDgxOTA4MjFaMCICEQDQVEhgGGfTrTXKLw1KJ5VeFw0wMTEyMTExODI2MjFa\nMA0GCSqGSIb3DQEBBQUAA4GBACLJ9rsdoaU9JMf/sCIRs3AGW8VV3TN2oJgiCGNEac9PRyV3mRKE\n0hmuIJTKLFSaa4HSAzimWpWNKuJhztsZzXUnWSZ8VuHkgHEaSbKqzUlb2g+o/848CvzJrcbeyEBk\nDCYJI5C3nLlQA49LGJ+w4GUPYBwaZ+WFxCX1C8kzglLm') >>> x=X509_CRL(c) ###(036)=[passed] CRL class : Rebuild crl >>> raw(x) == c True ###(037)=[passed] CRL class : Version >>> tbs = x.tbsCertList >>> tbs.version == None True ###(038)=[passed] CRL class : Signature algorithm (as advertised by TBSCertList) >>> assert type(tbs.signature) is X509_AlgorithmIdentifier >>> tbs.signature.algorithm == ASN1_OID("sha1-with-rsa-signature") True ###(039)=[passed] CRL class : Issuer structure >>> assert type(tbs.issuer) is list >>> assert len(tbs.issuer) == 3 >>> assert type(tbs.issuer[0]) is X509_RDN >>> assert type(tbs.issuer[0].rdn) is list >>> assert type(tbs.issuer[0].rdn[0]) is X509_AttributeTypeAndValue ###(040)=[passed] CRL class : Issuer first attribute >>> tbs.issuer[0].rdn[0].type == ASN1_OID("countryName") and tbs.issuer[0].rdn[0].value == ASN1_PRINTABLE_STRING(b"US") True ###(041)=[passed] CRL class : Issuer string >>> tbs.get_issuer_str() == '/C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority' True ###(042)=[passed] CRL class : This update >>> tbs.this_update == ASN1_UTC_TIME("061102000000Z") True ###(043)=[passed] CRL class : Optional next update >>> tbs.next_update == ASN1_UTC_TIME("070217235959Z") True ###(044)=[passed] CRL class : Optional revoked_certificates structure >>> from scapy.layers.x509 import X509_RevokedCertificate >>> assert type(tbs.revokedCertificates) is list >>> assert len(tbs.revokedCertificates) == 7 >>> assert type(tbs.revokedCertificates[0]) is X509_RevokedCertificate ###(045)=[passed] CRL class : Revoked_certificates first attribute >>> tbs.revokedCertificates[0].serialNumber == ASN1_INTEGER(59577943160751197113872490992424857032) and tbs.revokedCertificates[0].revocationDate == ASN1_UTC_TIME("040401175615Z") True ###(046)=[passed] CRL class : Extensions structure >>> tbs.crlExtensions == None True ###(047)=[passed] CRL class : Signature algorithm >>> assert type(x.signatureAlgorithm) is X509_AlgorithmIdentifier >>> x.signatureAlgorithm.algorithm == ASN1_OID("sha1-with-rsa-signature") True ###(048)=[passed] CRL class : Signature value >>> x.signatureValue == ASN1_BIT_STRING(b'"\xc9\xf6\xbb\x1d\xa1\xa5=$\xc7\xff\xb0"\x11\xb3p\x06[\xc5U\xdd3v\xa0\x98"\x08cDi\xcfOG%w\x99\x12\x84\xd2\x19\xae \x94\xca,T\x9ak\x81\xd2\x038\xa6Z\x95\x8d*\xe2a\xce\xdb\x19\xcdu\'Y&|V\xe1\xe4\x80q\x1aI\xb2\xaa\xcdI[\xda\x0f\xa8\xff\xce<\n\xfc\xc9\xad\xc6\xde\xc8@d\x0c&\t#\x90\xb7\x9c\xb9P\x03\x8fK\x18\x9f\xb0\xe0e\x0f`\x1c\x1ag\xe5\x85\xc4%\xf5\x0b\xc93\x82R\xe6', readable=True) True ###(049)=[passed] CRL class : Default X509_CRL from scratch >>> s = raw(X509_CRL()) >>> raw(X509_CRL(s)) == s True ###(050)=[passed] Randval tests : ASN1F_SEQUENCE_OF >>> from scapy.layers.x509 import ASN1P_INTEGER, X509_OtherName >>> random.seed(42) >>> r = ASN1F_SEQUENCE_OF("test", [], ASN1P_INTEGER).randval().number >>> assert isinstance(r, RandNum) >>> int(r) == -16393048219351680611 True ###(051)=[passed] Randval tests : ASN1F_PACKET >>> random.seed(0xcafecafe) >>> r = ASN1F_PACKET("otherName", None, X509_OtherName).randval() >>> assert isinstance(r, X509_OtherName) >>> str(r.type_id) == '171.184.10.271' True ###(052)=[passed] OCSP class : OCSP Response import >>> from scapy.layers.x509 import OCSP_Response >>> s = b'0\x82\x01\xd3\n\x01\x00\xa0\x82\x01\xcc0\x82\x01\xc8\x06\t+\x06\x01\x05\x05\x070\x01\x01\x04\x82\x01\xb90\x82\x01\xb50\x81\x9e\xa2\x16\x04\x14Qh\xff\x90\xaf\x02\x07u<\xcc\xd9edb\xa2\x12\xb8Yr;\x18\x0f20160914121000Z0s0q0I0\t\x06\x05+\x0e\x03\x02\x1a\x05\x00\x04\x14\xcf&\xf5\x18\xfa\xc9~\x8f\x8c\xb3B\xe0\x1c/j\x10\x9e\x8e_\n\x04\x14Qh\xff\x90\xaf\x02\x07u<\xcc\xd9edb\xa2\x12\xb8Yr;\x02\x10\x07z]\xc36#\x01\xf9\x89\xfeT\xf7\xf8o>d\x80\x00\x18\x0f20160914121000Z\xa0\x11\x18\x0f20160921112500Z0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x90\xef\xf9\x15U\x88\xac@l\xf6n\x04C/\x1a\xf5\xbc[Xi\xd9U\xbe\'\xd3\xb7\xf5\xbb\t\xd8\xb1Tw\x9c2\xac\x7f\x88\xba\x98\xe4\xa13\xf4\xdc\xea\xf3\xacX\xe4,E\xf5\xa9\xc3\xf4B-N\xe0\x89D[\xbe\n\xc2h\x9ar\xfd\'.\xc8,\xed\x83\xc2\xf0\x89_\x8c\xc3\xe7\x8a\xad\xa4\x14\x03\x96\x02\xc4\xa8\xc8\x90\x96%X\x80\x95\x02\x9d_\xc82;m\xe9\x15\x00\xa8\x00\xb9\x01\xe3aN&\xe4\xd5\x8a\xc4w7\x0b\xc3~\xc5\xb1M\x10~T\x9e\x1d\xf6\x06\xf8\x12sTg\x14b_\xe7\xc04\xb4\xa3\xd2\x8f\xe6\xa6\xc4\x01q\x03j\xc8\xd4\xc7\x89\xdde\x99\x1a\xd9\x02\xe7\x17\xd1\xf40P\xef\xf6$\xee\xfad\xf4\xeb\xc8\xf7\x0bRL\x8b\xa5x\xe4R2\xe9\xc2\xfcB\nh\x93\xf7\x0ep4h\xeb\x17\x83\xc8\x88!\xc3W\x94WG\xfe3\x15C0qE&A\x99\xa8}\x1a\xda"\xa9O\xba\x90W_W\xado\x1c\xf0`g7\xbb$\x91o\xec\xdd\xbd\x9e\x8bb\xfc' >>> response = OCSP_Response(s) ###(053)=[passed] OCSP class : OCSP Response global checks >>> from scapy.layers.x509 import OCSP_ResponseBytes >>> assert response.responseStatus.val == 0 >>> assert isinstance(response.responseBytes, OCSP_ResponseBytes) >>> responseBytes = response.responseBytes >>> assert responseBytes.responseType == ASN1_OID("basic-response") >>> assert responseBytes.signatureAlgorithm.algorithm == ASN1_OID("sha256WithRSAEncryption") >>> assert responseBytes.signatureAlgorithm.parameters == ASN1_NULL(0) >>> assert responseBytes.signature.val_readable[:3] == b"\x90\xef\xf9" and responseBytes.signature.val_readable[-3:] == b"\x8bb\xfc" >>> responseBytes.certs is None True ###(054)=[passed] OCSP class : OCSP ResponseData checks >>> from scapy.layers.x509 import OCSP_ByKey >>> responseData = responseBytes.tbsResponseData >>> assert responseData.version is None >>> rID = responseData.responderID.responderID >>> assert isinstance(rID, OCSP_ByKey) >>> assert rID.byKey.val[:3] == b"Qh\xff" and rID.byKey.val[-3:] == b"Yr;" >>> assert responseData.producedAt == ASN1_GENERALIZED_TIME("20160914121000Z") >>> assert len(responseData.responses) == 1 >>> responseData.responseExtensions is None True ###(055)=[passed] OCSP class : OCSP ResponseData dissection with RecokedInfo >>> from scapy.layers.x509 import OCSP_ResponseData >>> pkt = OCSP_ResponseData(b"0\x81\xdf\xa2\x16\x04\x14\x11\x7f\x8eD\xbb\xe9\x7f\xca'\xfeG\x90\x89\\\x18\xea\x0e\xa5#W\x18\x0f20240121133708Z0\x81\x8e0\x81\x8b0M0\t\x06\x05+\x0e\x03\x02\x1a\x05\x00\x04\x14\x0b\xaf\xcc#$\xb8\xb0\xf8\xb02,\x9aPn9VSW\x14\x14\x04\x14\x11\x7f\x8eD\xbb\xe9\x7f\xca'\xfeG\x90\x89\\\x18\xea\x0e\xa5#W\x02\x14\x10&\x99j\t\xaa\xb9>\xde\x06\xb6#b\xa9\xe4GA\x07\x1b2\xa1\x16\x18\x0f20240120133708Z\xa0\x03\n\x01\x01\x18\x0f20240121133708Z\xa0\x11\x18\x0f20240122133708Z\xa1#0!0\x1f\x06\t+\x06\x01\x05\x05\x070\x01\x02\x04\x12\x04\x10\xfc\xb6\x92\xdf^\xf3\x03{\tH}\x12\x9f\xaa\x13^") >>> assert pkt.responderID.responderID.byKey == b"\x11\x7f\x8eD\xbb\xe9\x7f\xca'\xfeG\x90\x89\\\x18\xea\x0e\xa5#W" >>> assert pkt.responses[0].certID.issuerNameHash == b'\x0b\xaf\xcc#$\xb8\xb0\xf8\xb02,\x9aPn9VSW\x14\x14' >>> assert pkt.responses[0].certStatus.certStatus.revocationReason.cRLReason == 0x1 ###(056)=[passed] OCSP class : OCSP SingleResponse checks >>> from scapy.layers.x509 import OCSP_GoodInfo >>> singleResponse = responseData.responses[0] >>> assert singleResponse.certID.hashAlgorithm.algorithm == ASN1_OID("sha1") >>> assert singleResponse.certID.hashAlgorithm.parameters == ASN1_NULL(0) >>> assert singleResponse.certID.issuerNameHash.val[:3] == b"\xcf&\xf5" and singleResponse.certID.issuerNameHash.val[-3:] == b"\x8e_\n" >>> assert singleResponse.certID.issuerKeyHash.val[:3] == b"Qh\xff" and singleResponse.certID.issuerKeyHash.val[-3:] == b"Yr;" >>> assert singleResponse.certID.serialNumber.val == 0x77a5dc3362301f989fe54f7f86f3e64 >>> assert isinstance(singleResponse.certStatus.certStatus, OCSP_GoodInfo) >>> assert singleResponse.thisUpdate == ASN1_GENERALIZED_TIME("20160914121000Z") >>> assert singleResponse.nextUpdate == ASN1_GENERALIZED_TIME("20160921112500Z") >>> singleResponse.singleExtensions is None True ###(057)=[passed] OCSP class : OCSP Response reconstruction >>> raw(response) == s True ###(058)=[passed] OSCP class : OSCP Response with ECDSA >>> response = OCSP_ResponseBytes() >>> assert bytes(response.signature) == b'\x03!\x00defaultsignaturedefaultsignature' >>> response.signatureAlgorithm.algorithm = ASN1_OID('1.2.840.10045.4.3.2') >>> assert bytes(response.signature) == b'\x03\t\x000\x06\x02\x01\x00\x02\x01\x00' >>> response = OCSP_ResponseBytes(bytes(response)) >>> assert isinstance(response.signature, ECDSASignature) Test campaign ━ Run at 04:12:47 from [test/scapy/layers/tls/cert.uts] by UTscapy in 5.062062740325928 └ Passed=65 └ Failed=1 ###### ## PKCS helpers tests ###### ###(000)=[passed] PKCS os2ip basic tests >>> pkcs_os2ip(b'\x00\x00\xff\xff') == 0xffff and pkcs_os2ip(b'\xff\xff\xff\xff\xff') == 0xffffffffff True ###(001)=[passed] PKCS i2osp basic tests >>> pkcs_i2osp(0xffff, 4) == b'\x00\x00\xff\xff' and pkcs_i2osp(0xffff, 2) == b'\xff\xff' and pkcs_i2osp(0xffffeeee, 3) == b'\xff\xff\xee\xee' True ###### ## PubKey class tests ###### ###(002)=[passed] PubKey class : Importing PEM-encoded RSA public key >>> x = PubKey(""" ... -----BEGIN PUBLIC KEY----- ... MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFdqP+nTEZukS0lLP+yj ... 1gNImsEIf7P2ySTunceYxwkm4VE5QReDbb2L5/HLA9pPmIeQLSq/BgO1meOcbOSJ ... 2YVHQ28MQ56+8Crb6n28iycX4hp0H3AxRAjh0edX+q3yilvYJ4W9/NnIb/wAZwS0 ... oJif/tTkVF77HybAfJde5Eqbp+bCKIvMWnambh9DRUyjrBBZo5dA1o32zpuFBrJd ... I8dmUpw9gtf0F0Ba8lGZm8Uqc0GyXeXOJUE2u7CiMu3M77BM6ZLLTcow5+bQImkm ... TL1SGhzwfinME1e6p3Hm//pDjuJvFaY22k05LgLuyqc59vFiB3Toldz8+AbMNjvz ... AwIDAQAB ... -----END PUBLIC KEY----- ... """) >>> x_pubNum = x.pubkey.public_numbers() >>> type(x) is PubKeyRSA True ###(003)=[passed] PubKey class : Verifying PEM key format >>> x.frmt == "PEM" True ###(004)=[passed] PubKey class : Importing DER-encoded RSA Key >>> y = PubKey(b'0\x82\x01\"0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\n\x02\x82\x01\x01\x00\x98Wj?\xe9\xd3\x11\x9b\xa4KIK?\xec\xa3\xd6\x03H\x9a\xc1\x08\x7f\xb3\xf6\xc9$\xee\x9d\xc7\x98\xc7\t&\xe1Q9A\x17\x83m\xbd\x8b\xe7\xf1\xcb\x03\xdaO\x98\x87\x90-*\xbf\x06\x03\xb5\x99\xe3\x9cl\xe4\x89\xd9\x85GCo\x0cC\x9e\xbe\xf0*\xdb\xea}\xbc\x8b\'\x17\xe2\x1at\x1fp1D\x08\xe1\xd1\xe7W\xfa\xad\xf2\x8a[\xd8\'\x85\xbd\xfc\xd9\xc8o\xfc\x00g\x04\xb4\xa0\x98\x9f\xfe\xd4\xe4T^\xfb\x1f&\xc0|\x97^\xe4J\x9b\xa7\xe6\xc2(\x8b\xccZv\xa6n\x1fCEL\xa3\xac\x10Y\xa3\x97@\xd6\x8d\xf6\xce\x9b\x85\x06\xb2]#\xc7fR\x9c=\x82\xd7\xf4\x17@Z\xf2Q\x99\x9b\xc5*sA\xb2]\xe5\xce%A6\xbb\xb0\xa22\xed\xcc\xef\xb0L\xe9\x92\xcbM\xca0\xe7\xe6\xd0\"i&L\xbdR\x1a\x1c\xf0~)\xcc\x13W\xba\xa7q\xe6\xff\xfaC\x8e\xe2o\x15\xa66\xdaM9.\x02\xee\xca\xa79\xf6\xf1b\x07t\xe8\x95\xdc\xfc\xf8\x06\xcc6;\xf3\x03\x02\x03\x01\x00\x01') >>> y_pubNum = y.pubkey.public_numbers() >>> type(y) is PubKeyRSA True ###(005)=[passed] PubKey class : Verifying DER key format >>> y.frmt == "DER" True ###(006)=[passed] PubKey class : Checking modulus value >>> x_pubNum.n == y_pubNum.n and x_pubNum.n == 19231328316532061413420367242571475005688288081144416166988378525696075445024135424022026378563116068168327239354659928492979285632474448448624869172454076124150405352043642781483254546569202103296262513098482624188672299255268092629150366527784294463900039290024710152521604731213565912934889752122898104556895316819303096201441834849255370122572613047779766933573375974464479123135292080801384304131606933504677232323037116557327478512106367095125103346134248056463878553619525193565824925835325216545121044922690971718737998420984924512388011040969150550056783451476150234324593710633552558175109683813482739004163 True ###(007)=[passed] PubKey class : Checking public exponent value >>> x_pubNum.e == y_pubNum.e and x_pubNum.e == 65537 True ###(008)=[passed] PubKey class : Importing PEM-encoded ECDSA public key >>> z = PubKey(""" ... -----BEGIN PUBLIC KEY----- ... MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE55WjbZjS/88K1kYagsO9wtKifw0IKLp4 ... Jd5qtmDF2Zu+xrwrBRT0HBnPweDU+RsFxcyU/QxD9WYORzYarqxbcA== ... -----END PUBLIC KEY----- ... """) >>> type(z) is PubKeyECDSA True ###(009)=[passed] PubKey class : Checking curve >>> z.pubkey.curve.name == "secp256k1" True ###(010)=[passed] PubKey class : Checking point value >>> z.pubkey.public_numbers().x == 104748656174769496952370005421566518252704263000192720134585149244759951661467 True ###(011)=[passed] PubKeyRSA class : Generate without modulus >>> t = PubKeyRSA() >>> t.fill_and_store(modulus=None, pubExp=65537, modulusLen=1024) >>> assert t.pubkey.key_size == 1024 >>> assert t.pubkey.public_numbers().e == 65537 ###### ## PrivKey class tests ###### ###(012)=[passed] PrivKey class : Importing PEM-encoded RSA private key >>> x = PrivKey(""" ... -----BEGIN RSA PRIVATE KEY----- ... MIIEowIBAAKCAQEAmFdqP+nTEZukS0lLP+yj1gNImsEIf7P2ySTunceYxwkm4VE5 ... QReDbb2L5/HLA9pPmIeQLSq/BgO1meOcbOSJ2YVHQ28MQ56+8Crb6n28iycX4hp0 ... H3AxRAjh0edX+q3yilvYJ4W9/NnIb/wAZwS0oJif/tTkVF77HybAfJde5Eqbp+bC ... KIvMWnambh9DRUyjrBBZo5dA1o32zpuFBrJdI8dmUpw9gtf0F0Ba8lGZm8Uqc0Gy ... XeXOJUE2u7CiMu3M77BM6ZLLTcow5+bQImkmTL1SGhzwfinME1e6p3Hm//pDjuJv ... FaY22k05LgLuyqc59vFiB3Toldz8+AbMNjvzAwIDAQABAoIBAH3KeJZL2hhI/1GX ... NMaU/PfDgFkgmYbxMA8JKusnm/SFjxAwBGnGI6UjBXpBgpQs2Nqm3ZseF9u8hmCK ... vGiCEX2GesCo2mSfmSQxD6RBrMTuQ99UXpxzBIscFnM/Zrs8lPBARGzmF2nI3qPx ... Xtex4ABX5o0Cd4NfZlZjpj96skUoO8+bd3I4OPUFYFFFuv81LoSQ6Hew0a8xtJXt ... KkDp9h1jTGGUOc189WACNoBLH0MGeVoSUfc1++RcC3cypUZ8fNP1OO6GBfv06f5o ... XES4ZbxGYpa+nCfNwb6V2gWbkvaYm7aFn0KWGNZXS1P3OcWv6IWdOmg2CI7MMBLJ ... 0LyWVCECgYEAyMJYw195mvHl8VyxJ3HkxeQaaozWL4qhNQ0Kaw+mzD+jYdkbHb3a ... BYghsgEDZjnyOVblC7I+4smvAZJLWJaf6sZ5HAw3zmj1ibCkXx7deoRc/QVcOikl ... 3dE/ymO0KGJNiGzJZmxbRS3hTokmVPuxSWW4p5oSiMupFHKa18Uv8DECgYEAwkJ7 ... iTOUL6b4e3lQuHQnJbsiQpd+P/bsIPP7kaaHObewfHpfOOtIdtN4asxVFf/PgW5u ... WmBllqAHZYR14DEYIdL+hdLrdvk5nYQ3YfhOnp+haHUPCdEiXrRZuGXjmMA4V0hL ... 3HPF5ZM8H80fLnN8Pgn2rIC7CZQ46y4PnoV1nXMCgYBBwCUCF8rkDEWa/ximKo8a ... oNJmAypC98xEa7j1x3KBgnYoHcrbusok9ajTe7F5UZEbZnItmnsuG4/Nm/RBV1OY ... uNgBb573YzjHl6q93IX9EkzCMXc7NS7JrzaNOopOj6OFAtwTR3m89oHMDu8W9jfi ... KgaIHdXkJ4+AuugrstE4gQKBgFK0d1/8g7SeA+Cdz84YNaqMt5NeaDPXbsTA23Qx ... UBU0rYDxoKTdFybv9a6SfA83sCLM31K/A8FTNJL2CDGA9WNBL3fOSs2GYg88AVBG ... pUJHeDK+0748OcPUSPaG+pVIETSn5RRgffq16r0nWYUvSdAn8cuTqw3y+yC1pZS6 ... AU8dAoGBAL5QCi0dTWKN3kf3cXaCAnYiWe4Qg2S+SgLE+F1U4Xws2rqAuSvIiuT5 ... i5+Mqk9ZCGdoReVbAovJFoRqe7Fj9yWM+b1awGjL0bOTtnqx0iljob6uFyhpl1xg ... W3a3ICJ/ZYLvkgb4IBEteOwWpp37fX57vzhW8EmUV2UX7ve1uNRI ... -----END RSA PRIVATE KEY----- ... """) >>> x_privNum = x.key.private_numbers() >>> x_pubNum = x.pubkey.public_numbers() >>> type(x) is PrivKeyRSA True ###(013)=[passed] PrivKey class : Checking public attributes >>> assert x_pubNum.n == 19231328316532061413420367242571475005688288081144416166988378525696075445024135424022026378563116068168327239354659928492979285632474448448624869172454076124150405352043642781483254546569202103296262513098482624188672299255268092629150366527784294463900039290024710152521604731213565912934889752122898104556895316819303096201441834849255370122572613047779766933573375974464479123135292080801384304131606933504677232323037116557327478512106367095125103346134248056463878553619525193565824925835325216545121044922690971718737998420984924512388011040969150550056783451476150234324593710633552558175109683813482739004163 >>> x_pubNum.e == 65537 True ###(014)=[passed] PrivKey class : Checking private attributes >>> assert x_privNum.p == 140977881300857803928857666115326329496639762170623218602431133528876162476487960230341078724702018316260690172014674492782486113504117653531825010840338251572887403113276393351318549036549656895326851872473595350667293402676143426484331639796163189182788306480699144107905869179435145810212051656274284113969 >>> assert x_privNum.q == 136413798668820291889092636919077529673097927884427227010121877374504825870002258140616512268521246045642663981036167305976907058413796938050224182519965099316625879807962173794483933183111515251808827349718943344770056106787713032506379905031673992574818291891535689493330517205396872699985860522390496583027 >>> assert x_privNum.dmp1 == 46171616708754015342920807261537213121074749458020000367465429453038710215532257783908950878847126373502288079285334594398328912526548076894076506899568491565992572446455658740752572386903609191774044411412991906964352741123956581870694330173563737928488765282233340389888026245745090096745219902501964298369 >>> assert x_privNum.dmq1 == 58077388505079936284685944662039782610415160654764308528562806086690474868010482729442634318267235411531220690585030443434512729356878742778542733733189895801341155353491318998637269079682889033003797865508917973141494201620317820971253064836562060222814287812344611566640341960495346782352037479526674026269 >>> x_privNum.d == 15879630313397508329451198152673380989865598204237760057319927734227125481903063742175442230739018051313441697936698689753842471306305671266572085925009572141819112648211571007521954312641597446020984266846581125287547514750428503480880603089110687015181510081018160579576523796170439894692640171752302225125980423560965987469457505107324833137678663960560798216976668670722016960863268272661588745006387723814962668678285659376534048525020951633874488845649968990679414325096323920666486328886913648207836459784281744709948801682209478580185160477801656666089536527545026197569990716720623647770979759861119273292833 True ###(015)=[passed] PrivKey class : Importing PEM-encoded ECDSA private key >>> y = PrivKey(""" ... -----BEGIN EC PRIVATE KEY----- ... MHQCAQEEIMiRlFoy6046m1NXu911ukXyjDLVgmOXWCKWdQMd8gCRoAcGBSuBBAAK ... oUQDQgAE55WjbZjS/88K1kYagsO9wtKifw0IKLp4Jd5qtmDF2Zu+xrwrBRT0HBnP ... weDU+RsFxcyU/QxD9WYORzYarqxbcA== ... -----END EC PRIVATE KEY----- ... """) >>> type(y) is PrivKeyECDSA True ###(016)=[passed] PrivKey class : Checking public attributes >>> assert y.key.curve.name == "secp256k1" >>> y.key.public_key().public_numbers().y == 86290575637772818452062569410092503179882738810918951913926481113065456425840 True ###(017)=[passed] PrivKey class : Checking private attributes >>> y.key.private_numbers().private_value == 90719786431263082134670936670180839782031078050773732489701961692235185651857 True ###(018)=[passed] PrivKeyECDSA sign & verify >>> a = PrivKeyECDSA() >>> a.fill_and_store() >>> msg = b"Scapy test message" >>> data = a.sign(msg) >>> assert a.verify(msg, data) >>> assert not a.verify(b"Hello", data) ###(019)=[passed] PubKeyECDSA verify >>> assert isinstance(a.pubkey, PubKeyECDSA) >>> >>> b = PubKeyECDSA(cryptography_obj=a.pubkey.pubkey) >>> assert b.verify(msg, data) >>> assert not b.verify(b"Hello", data) ###(020)=[passed] PrivKey class : Importing DER-encoded RSA private key >>> a = PrivKeyRSA(b'0\x82\x04\xa3\x02\x01\x00\x02\x82\x01\x01\x00\x98Wj?\xe9\xd3\x11\x9b\xa4KIK?\xec\xa3\xd6\x03H\x9a\xc1\x08\x7f\xb3\xf6\xc9$\xee\x9d\xc7\x98\xc7\t&\xe1Q9A\x17\x83m\xbd\x8b\xe7\xf1\xcb\x03\xdaO\x98\x87\x90-*\xbf\x06\x03\xb5\x99\xe3\x9cl\xe4\x89\xd9\x85GCo\x0cC\x9e\xbe\xf0*\xdb\xea}\xbc\x8b\'\x17\xe2\x1at\x1fp1D\x08\xe1\xd1\xe7W\xfa\xad\xf2\x8a[\xd8\'\x85\xbd\xfc\xd9\xc8o\xfc\x00g\x04\xb4\xa0\x98\x9f\xfe\xd4\xe4T^\xfb\x1f&\xc0|\x97^\xe4J\x9b\xa7\xe6\xc2(\x8b\xccZv\xa6n\x1fCEL\xa3\xac\x10Y\xa3\x97@\xd6\x8d\xf6\xce\x9b\x85\x06\xb2]#\xc7fR\x9c=\x82\xd7\xf4\x17@Z\xf2Q\x99\x9b\xc5*sA\xb2]\xe5\xce%A6\xbb\xb0\xa22\xed\xcc\xef\xb0L\xe9\x92\xcbM\xca0\xe7\xe6\xd0"i&L\xbdR\x1a\x1c\xf0~)\xcc\x13W\xba\xa7q\xe6\xff\xfaC\x8e\xe2o\x15\xa66\xdaM9.\x02\xee\xca\xa79\xf6\xf1b\x07t\xe8\x95\xdc\xfc\xf8\x06\xcc6;\xf3\x03\x02\x03\x01\x00\x01\x02\x82\x01\x00}\xcax\x96K\xda\x18H\xffQ\x974\xc6\x94\xfc\xf7\xc3\x80Y \x99\x86\xf10\x0f\t*\xeb\'\x9b\xf4\x85\x8f\x100\x04i\xc6#\xa5#\x05zA\x82\x94,\xd8\xda\xa6\xdd\x9b\x1e\x17\xdb\xbc\x86`\x8a\xbch\x82\x11}\x86z\xc0\xa8\xdad\x9f\x99$1\x0f\xa4A\xac\xc4\xeeC\xdfT^\x9cs\x04\x8b\x1c\x16s?f\xbb<\x94\xf0@Dl\xe6\x17i\xc8\xde\xa3\xf1^\xd7\xb1\xe0\x00W\xe6\x8d\x02w\x83_fVc\xa6?z\xb2E(;\xcf\x9bwr88\xf5\x05`QE\xba\xff5.\x84\x90\xe8w\xb0\xd1\xaf1\xb4\x95\xed*@\xe9\xf6\x1dcLa\x949\xcd|\xf5`\x026\x80K\x1fC\x06yZ\x12Q\xf75\xfb\xe4\\\x0bw2\xa5F||\xd3\xf58\xee\x86\x05\xfb\xf4\xe9\xfeh\\D\xb8e\xbcFb\x96\xbe\x9c\'\xcd\xc1\xbe\x95\xda\x05\x9b\x92\xf6\x98\x9b\xb6\x85\x9fB\x96\x18\xd6WKS\xf79\xc5\xaf\xe8\x85\x9d:h6\x08\x8e\xcc0\x12\xc9\xd0\xbc\x96T!\x02\x81\x81\x00\xc8\xc2X\xc3_y\x9a\xf1\xe5\xf1\\\xb1\'q\xe4\xc5\xe4\x1aj\x8c\xd6/\x8a\xa15\r\nk\x0f\xa6\xcc?\xa3a\xd9\x1b\x1d\xbd\xda\x05\x88!\xb2\x01\x03f9\xf29V\xe5\x0b\xb2>\xe2\xc9\xaf\x01\x92KX\x96\x9f\xea\xc6y\x1c\x0c7\xceh\xf5\x89\xb0\xa4_\x1e\xddz\x84\\\xfd\x05\\:)%\xdd\xd1?\xcac\xb4(bM\x88l\xc9fl[E-\xe1N\x89&T\xfb\xb1Ie\xb8\xa7\x9a\x12\x88\xcb\xa9\x14r\x9a\xd7\xc5/\xf01\x02\x81\x81\x00\xc2B{\x893\x94/\xa6\xf8{yP\xb8t\'%\xbb"B\x97~?\xf6\xec \xf3\xfb\x91\xa6\x879\xb7\xb0|z_8\xebHv\xd3xj\xccU\x15\xff\xcf\x81nnZ`e\x96\xa0\x07e\x84u\xe01\x18!\xd2\xfe\x85\xd2\xebv\xf99\x9d\x847a\xf8N\x9e\x9f\xa1hu\x0f\t\xd1"^\xb4Y\xb8e\xe3\x98\xc08WHK\xdcs\xc5\xe5\x93<\x1f\xcd\x1f.s|>\t\xf6\xac\x80\xbb\t\x948\xeb.\x0f\x9e\x85u\x9ds\x02\x81\x80A\xc0%\x02\x17\xca\xe4\x0cE\x9a\xff\x18\xa6*\x8f\x1a\xa0\xd2f\x03*B\xf7\xccDk\xb8\xf5\xc7r\x81\x82v(\x1d\xca\xdb\xba\xca$\xf5\xa8\xd3{\xb1yQ\x91\x1bfr-\x9a{.\x1b\x8f\xcd\x9b\xf4AWS\x98\xb8\xd8\x01o\x9e\xf7c8\xc7\x97\xaa\xbd\xdc\x85\xfd\x12L\xc21w;5.\xc9\xaf6\x8d:\x8aN\x8f\xa3\x85\x02\xdc\x13Gy\xbc\xf6\x81\xcc\x0e\xef\x16\xf67\xe2*\x06\x88\x1d\xd5\xe4\'\x8f\x80\xba\xe8+\xb2\xd18\x81\x02\x81\x80R\xb4w_\xfc\x83\xb4\x9e\x03\xe0\x9d\xcf\xce\x185\xaa\x8c\xb7\x93^h3\xd7n\xc4\xc0\xdbt1P\x154\xad\x80\xf1\xa0\xa4\xdd\x17&\xef\xf5\xae\x92|\x0f7\xb0"\xcc\xdfR\xbf\x03\xc1S4\x92\xf6\x081\x80\xf5cA/w\xceJ\xcd\x86b\x0f<\x01PF\xa5BGx2\xbe\xd3\xbe<9\xc3\xd4H\xf6\x86\xfa\x95H\x114\xa7\xe5\x14`}\xfa\xb5\xea\xbd\'Y\x85/I\xd0\'\xf1\xcb\x93\xab\r\xf2\xfb \xb5\xa5\x94\xba\x01O\x1d\x02\x81\x81\x00\xbeP\n-\x1dMb\x8d\xdeG\xf7qv\x82\x02v"Y\xee\x10\x83d\xbeJ\x02\xc4\xf8]T\xe1|,\xda\xba\x80\xb9+\xc8\x8a\xe4\xf9\x8b\x9f\x8c\xaaOY\x08ghE\xe5[\x02\x8b\xc9\x16\x84j{\xb1c\xf7%\x8c\xf9\xbdZ\xc0h\xcb\xd1\xb3\x93\xb6z\xb1\xd2)c\xa1\xbe\xae\x17(i\x97\\`[v\xb7 "\x7fe\x82\xef\x92\x06\xf8 \x11-x\xec\x16\xa6\x9d\xfb}~{\xbf8V\xf0I\x94We\x17\xee\xf7\xb5\xb8\xd4H') >>> a_privNum = a.key.private_numbers() >>> a_pubNum = a.pubkey.public_numbers() >>> >>> assert x_pubNum.n == x_pubNum.n >>> assert x_pubNum.e == x_pubNum.e >>> >>> assert x_privNum.p == a_privNum.p >>> assert x_privNum.q == a_privNum.q >>> assert x_privNum.dmp1 == a_privNum.dmp1 >>> assert x_privNum.dmq1 == a_privNum.dmq1 >>> assert x_privNum.d == a_privNum.d ###(021)=[passed] PrivKey class: Importing PEM-encoded EdDSA private key >>> y = PrivKey(""" ... -----BEGIN PRIVATE KEY----- ... MC4CAQAwBQYDK2VwBCIEIGu36oadjA6raCmwtImfAWI/DSCENM/uQCsUaClVoUTZ ... -----END PRIVATE KEY----- ... """) ###### ## PrivKey/Pubkey test signatures ###### ###(022)=[passed] PrivKey class : sign tbs cert >>> pkey_sign = PrivKey(""" ... -----BEGIN RSA PRIVATE KEY----- ... MIIEowIBAAKCAQEA1L8KacejlbFJ18bvAz5/W9mF+0GglJs6qyv8pAPPiX1mWaLZ ... Y42Kf/axHYrxUPXEqitRG3VkOy1HONAZhl90rY0jVUyYps94om4S98NECbY3eiVc ... 02ZqQng5HyzBYJQeTh+EYrDaxPUXcVXjthmrt/6vbUHI1Kgk/gok8IBFMSzilxeO ... ZMJJ+dQigeDiaJGwHb3U5KzOm+hFb/IbwjdXJm3CG/58bCQp0rp6RD2qI/D6Xtvj ... pc/ms6q7vfBVpquSLeEIt4Jq2XC9RKGR7TGHaVe8vmU5rb/Y36ReYCw5+fMJqcP4 ... fFlC6iexBDhgy1sqV0o0tu4TzJodn8n3SFResQIDAQABAoIBAHcXEe8w0AOloJ5n ... P7hjLcvusi96BzfoxSi4kM4HTA+84KRgoqw1uUf0giT1eCxHx3Uylk52okr2B55n ... 70HnAVt9XEANho4qKW9Tis6iwd1l4RxA+ftkoyrePauT1BQKFgTJY8QTGAOU5zCM ... UdHIAPYYXX8dihxwm3SRnSf7xb/GSRkj5sMr0ioiBOZ91fwzbtOEbVXE58DyPNJm ... w/tBCFbibpr4iCU/6US8OyCxR/X4heRyKCcANXlHyE/eUO6TY8J2RaKbSQi+c3/y ... Y11ypSboyM3cGJ/URS5wRd0oQMQMANck4w+MlNU5jxsfN9wF32HWII8wq/6n3hHR ... M+H+3YECgYEA79nc8BLzFPrzuJud9JvCFEh0pNb0gLRb/MvIsaVUT7ac8/89tfvQ ... 6qxWgP81ldJ7S+d/uh80CKg0lVwaxF4sQ6yNn/cvebW8tCCm0RkD8q3R9kxOd3Q/ ... kLNeeBS/gPzh2xOmVuTE0ruv7ovYowU8WfJG2z20lv7WNsrN/Jm526kCgYEA4xH+ ... EBVqoPYxzKoa0LNxSPfVOBO7wT19pS5Ny7yjI9oy724cNXn39H5KaCHC3ZnR0mII ... 0znf7cbtbFHLSkR2MNzy1MC1VhIxFQ5yHLRCjZcKkjd+gZuJp0tCgY/r2dNYsBCR ... 7W1vMz/wNsbufkOhi/DqC0Ru7onFbouGBdpID8kCgYEAjamr6NAIarfeA4dGQBdP ... BhPVcRbUyr+8JQ9ntiTkK0C8axCyLi5RMooffYk+6QKseCR/ODr9zK8sf5sq5BiL ... JF1iOL0SeVxx3CH85TtVLZykikh/f+ZVNO38OghnI5Q5AeAVOvVbmuvn+Yj3pzGM ... d8O1PgCwDQ7vDuWxzCQvtiECgYAGWA9YFbEX9CjqBeqf4BOPLVVorqx1NqmW/tcv ... lQKd0s/Pfq0NFW5HB2w+woq2NED3dsO2WwyVkRQ7DYH3fjgrH1EtfoDSecmjQ/cO ... ND8Tw5+I/EHtjxHmeaTPB91YBZ6ZtKzPDFqp/ORSM3agUnVl+oIfdHcA9Rpt/zns ... We/feQKBgGimvdIrurKPTrV49ltAKdkHmglpYeCaDr6aZKwWMcsrLmTZ6a4uRPFF ... TdK+rCyGyjmibTVRjdg5+7KXshSlBleNR3v+AySAxzpjwySVhTfRirCogHRFHrnK ... kXqy5xUkg11ETv6v91n3u5NVBlXVN4iwFRGSKsecw0qxSgKjbP4n ... -----END RSA PRIVATE KEY----- ... """) >>> >>> c_tosign = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIIC/TCCAeWgAwIBAgIJALkQBZa7rCRFMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV ... BAMMCnNlY2Rldi5vcmcwHhcNMTgwMjI3MTY1NjIyWhcNMjgwMjI1MTY1NjIyWjAV ... MRMwEQYDVQQDDApzZWNkZXYub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB ... CgKCAQEA1L8KacejlbFJ18bvAz5/W9mF+0GglJs6qyv8pAPPiX1mWaLZY42Kf/ax ... HYrxUPXEqitRG3VkOy1HONAZhl90rY0jVUyYps94om4S98NECbY3eiVc02ZqQng5 ... HyzBYJQeTh+EYrDaxPUXcVXjthmrt/6vbUHI1Kgk/gok8IBFMSzilxeOZMJJ+dQi ... geDiaJGwHb3U5KzOm+hFb/IbwjdXJm3CG/58bCQp0rp6RD2qI/D6Xtvjpc/ms6q7 ... vfBVpquSLeEIt4Jq2XC9RKGR7TGHaVe8vmU5rb/Y36ReYCw5+fMJqcP4fFlC6iex ... BDhgy1sqV0o0tu4TzJodn8n3SFResQIDAQABo1AwTjAdBgNVHQ4EFgQUf98kGOpM ... CVBFdHxFb8DaL6tPe+8wHwYDVR0jBBgwFoAUf98kGOpMCVBFdHxFb8DaL6tPe+8w ... DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAmw0lTyEVH8YfytbVS9AW ... rTJ1wWhDGf+9jHHEjX/OIq5ii0Ks38WyybhD7cMQNfkZCgIjrutrLHN/m/wn9aDx ... y9vuubWvrcbqhur82YZbVnlvEiqEEyY/ULqCaW2X7UC2K/2NAy14oF6bClLX8LBq ... 3G/lc6GUOToN6i4OuKeB9xxvJaBxsVIdnUW9IqesHatqV4yIhH1/flhqWM47LjHP ... a/uIGboyhl8p5bt3aVbXFwm/NeqsOVPDcQsBdWGldCN6loLE7b4eJDhjHbsuR2C3 ... aomWcyGW1mRxNJUI0GQ5EHB5Vvy4mcxKG1DMYxG/rGf/EHk+xPJXpITIugbispbm ... uA== ... -----END CERTIFICATE----- ... """) >>> tbs_signed = pkey_sign.signTBSCert(c_tosign.tbsCertificate) >>> assert raw(tbs_signed.signatureValue) == b"BH\xdb@>\x82\x08b\xbc\xaf\x04%_\xeaV\xf5_\xa8\xf4\xf3\xd1\x0f\x86\xbd\x1b\xe2U\xfb\xf5/\rN\xc2\r\xbc\xa0Hn\xed\xb7\x18\xb2\xb3\xa5\x08m9\x9fY\xa6\xb32\xcd:\xd7\xab\xac\x8c\xcf@\xbb\x08Gt2\xb7\x93\x95\x92\x17\xa7j\x99\xa7)\xab\xbc\x07HP\xca\x00M$\xfb.\xb9\xb8\xac%i\x8c\xa2+\xe7ny!\xa1\xd2l\x0f>j\xd6\xb0\x9e\xcat)+\xbc\x16'\x9d\x1e\x80\x89\x01.\x9dS\xbb\xa0-\xb8\x0c\xe9\xe9:a\xbe\x14p\xd1\xbb\xf0I\xa2\x8fio`2\x1b7\xb8]\t3\xced`\x86\x97\x01\x82t\xd0\xc3c%\xa7\xda\\[]9\xfa\xba\r\x83\x8b\r\xa2(\x87\xe87C\xb7\\\x11\x163\x8e\xbf\xe2\x80\x7f\xf2\x93\xa4\x04w\xddG\x88\x1e#\xa6l\x15\xa1\xc6\xda\x1f\xd4\xb4$T\xa1\xd0\xe9\xd5t\xc4\xe4q\xbe\xa2\xd2\xba\x1b!/\x1dK\x17}\xc6.\xba\x81;\x00ft\x8du)\x15\n\t\x08\x1b\xb2Ol\xe1\x94g\xc8\xc0\xd6>" ###(023)=[failed] PrivKey class : resign cert >>> correct_sha1_sig = c_tosign.signatureValue >>> c_tosign.x509Cert.signatureValue.val = 512*'0' >>> >>> c_resigned = pkey_sign.resignCert(c_tosign) >>> assert pkey_sign.verifyCert(c_resigned) >>> assert raw(c_resigned.signatureValue) == correct_sha1_sig AssertionError ###### ## PubKey/PrivKey classes crypto tests ###### ###(024)=[passed] PrivKey/PubKey classes : Signing/Verifying with MD5_SHA1 hash >>> m = "Testing our PKCS #1 legacy methods" # ignore this string >>> s = x.sign(m, t="pkcs", h="md5-sha1") >>> assert s == b"\x0cm\x8a\x8f\xae`o\xcdC=\xfea\xf4\xff\xf0i\xfe\xa3!\xfd\xa5=*\x99?\x08!\x03A~\xa3-B\xe8\xca\xaf\xb4H|\xa3\x98\xe9\xd5U\xfdL\xb1\x9c\xd8\xb2{\xa1/\xfcr\x8c\xa7\xd3\xa9%\xde\x13\xa8\xf6\xc6<\xc7\xdb\xe3\xa62\xeb\xe9?\xe5by\xc2\x9e\xad\xec\x92:\x14\xd96\xa8\xc0+\xea8'{=\x91$\xdf\xed\xe1+eF8\x9fI\x1f\xa1\xcb4s\xd1#\xdf\xa11\x88o\x050i Hg\x0690\xe6\xe8?\\<:k\x94\x82\x91\x0f\x06\xc7>ZQ\xc2\xcdn\xdb\xf4\x9d\x7f!\xa9>\xe8\xea\xb3\xd83]\x8d\x90\xd4\xa0b\xe6\xe6$d[\xe4\xb4 |W\xb2t\x8c\xb2\xd5>>+\xf1\xa6W'\xaf\xc2CU\x82\x13\xc4\x0b\xc4vD*\xc3\xef\xa6s\nQ\xe6\rS@B\xd2\xa4V\xdc\xd1D\x7f\x00\xaa\xac\xac\x96i\xf1kg*\xe9*\x90a@\xc8uDy\x16\xe2\x03\xd1\x9fa\xe2s\xdb\xees\xa4\x8cna\xba\xdaE\x006&\xa4" >>> x_pub = PubKey((x._pubExp, x._modulus, x._modulusLen)) >>> x_pub.verify(m, s, t="pkcs", h="md5-sha1") True ###(025)=[passed] PrivKey/PubKey classes : Signing/Verifying with MD5_SHA1 hash with legacy support >>> m = "Testing our PKCS #1 legacy methods" >>> s = x._legacy_sign_md5_sha1(m) >>> assert s == b"\x0cm\x8a\x8f\xae`o\xcdC=\xfea\xf4\xff\xf0i\xfe\xa3!\xfd\xa5=*\x99?\x08!\x03A~\xa3-B\xe8\xca\xaf\xb4H|\xa3\x98\xe9\xd5U\xfdL\xb1\x9c\xd8\xb2{\xa1/\xfcr\x8c\xa7\xd3\xa9%\xde\x13\xa8\xf6\xc6<\xc7\xdb\xe3\xa62\xeb\xe9?\xe5by\xc2\x9e\xad\xec\x92:\x14\xd96\xa8\xc0+\xea8\'{=\x91$\xdf\xed\xe1+eF8\x9fI\x1f\xa1\xcb4s\xd1#\xdf\xa11\x88o\x050i Hg\x0690\xe6\xe8?\\<:k\x94\x82\x91\x0f\x06\xc7>ZQ\xc2\xcdn\xdb\xf4\x9d\x7f!\xa9>\xe8\xea\xb3\xd83]\x8d\x90\xd4\xa0b\xe6\xe6$d[\xe4\xb4 |W\xb2t\x8c\xb2\xd5>>+\xf1\xa6W\'\xaf\xc2CU\x82\x13\xc4\x0b\xc4vD*\xc3\xef\xa6s\nQ\xe6\rS@B\xd2\xa4V\xdc\xd1D\x7f\x00\xaa\xac\xac\x96i\xf1kg*\xe9*\x90a@\xc8uDy\x16\xe2\x03\xd1\x9fa\xe2s\xdb\xees\xa4\x8cna\xba\xdaE\x006&\xa4" >>> x_pub = PubKey((x._pubExp, x._modulus, x._modulusLen)) >>> x_pub._legacy_verify_md5_sha1(m, s) True ###### ## Cert class tests ###### ###(026)=[passed] Cert class : Importing PEM-encoded X.509 Certificate >>> x = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIIFEjCCA/qgAwIBAgIJALRecEPnCQtxMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYD ... VQQGEwJGUjEOMAwGA1UECBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMRcwFQYDVQQK ... Ew5NdXNocm9vbSBDb3JwLjEeMBwGA1UECxMVTXVzaHJvb20gVlBOIFNlcnZpY2Vz ... MSUwIwYDVQQDExxJS0V2MiBYLjUwOSBUZXN0IGNlcnRpZmljYXRlMScwJQYJKoZI ... hvcNAQkBFhhpa2V2Mi10ZXN0QG11c2hyb29tLmNvcnAwHhcNMDYwNzEzMDczODU5 ... WhcNMjYwMzMwMDczODU5WjCBtjELMAkGA1UEBhMCRlIxDjAMBgNVBAgTBVBhcmlz ... MQ4wDAYDVQQHEwVQYXJpczEXMBUGA1UEChMOTXVzaHJvb20gQ29ycC4xHjAcBgNV ... BAsTFU11c2hyb29tIFZQTiBTZXJ2aWNlczElMCMGA1UEAxMcSUtFdjIgWC41MDkg ... VGVzdCBjZXJ0aWZpY2F0ZTEnMCUGCSqGSIb3DQEJARYYaWtldjItdGVzdEBtdXNo ... cm9vbS5jb3JwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFdqP+nT ... EZukS0lLP+yj1gNImsEIf7P2ySTunceYxwkm4VE5QReDbb2L5/HLA9pPmIeQLSq/ ... BgO1meOcbOSJ2YVHQ28MQ56+8Crb6n28iycX4hp0H3AxRAjh0edX+q3yilvYJ4W9 ... /NnIb/wAZwS0oJif/tTkVF77HybAfJde5Eqbp+bCKIvMWnambh9DRUyjrBBZo5dA ... 1o32zpuFBrJdI8dmUpw9gtf0F0Ba8lGZm8Uqc0GyXeXOJUE2u7CiMu3M77BM6ZLL ... Tcow5+bQImkmTL1SGhzwfinME1e6p3Hm//pDjuJvFaY22k05LgLuyqc59vFiB3To ... ldz8+AbMNjvzAwIDAQABo4IBHzCCARswHQYDVR0OBBYEFPPYTt6Q9+Zd0s4zzVxW ... jG+XFDFLMIHrBgNVHSMEgeMwgeCAFPPYTt6Q9+Zd0s4zzVxWjG+XFDFLoYG8pIG5 ... MIG2MQswCQYDVQQGEwJGUjEOMAwGA1UECBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlz ... MRcwFQYDVQQKEw5NdXNocm9vbSBDb3JwLjEeMBwGA1UECxMVTXVzaHJvb20gVlBO ... IFNlcnZpY2VzMSUwIwYDVQQDExxJS0V2MiBYLjUwOSBUZXN0IGNlcnRpZmljYXRl ... MScwJQYJKoZIhvcNAQkBFhhpa2V2Mi10ZXN0QG11c2hyb29tLmNvcnCCCQC0XnBD ... 5wkLcTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQA2zt0BvXofiVvH ... MWlftZCstQaawej1SmxrAfDB4NUM24NsG+UZI88XA5XM6QolmfyKnNromMLC1+6C ... aFxjq3jC/qdS7ifalFLQVo7ik/te0z6Olo0RkBNgyagWPX2LR5kHe9RvSDuoPIsb ... SHMmJA98AZwatbvEhmzMINJNUoHVzhPeHZnIaBgUBg02XULk/ElidO51Rf3gh8dR ... /kgFQSQT687vs1x9TWD00z0Q2bs2UF3Ob3+NYkEGEo5F9RePQm0mY94CT2xs6WpH ... o060Fo7fVpAFktMWx1vpu+wsEbQAhgGqV0fCR2QwKDIbTrPW/p9HJtJDYVjYdAFx ... r3s7V77y ... -----END CERTIFICATE----- ... """) ###(027)=[passed] Cert class : Checking version >>> x.version == 3 True ###(028)=[passed] Cert class : Checking certificate serial number extraction >>> x.serial == 0xB45E7043E7090B71 True ###(029)=[passed] Cert class : Checking signature algorithm >>> x.sigAlg == 'sha1-with-rsa-signature' True ###(030)=[passed] Cert class : Checking issuer extraction in basic format (/C=FR ...) >>> x.issuer_str == '/C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp' True ###(031)=[passed] Cert class : Checking subject extraction in basic format (/C=FR ...) >>> x.subject_str == '/C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp' True ###(032)=[passed] Cert class : Checking start date extraction in simple and tuple formats >>> assert x.notBefore_str_simple == '07/13/06' >>> x.notBefore == (2006, 7, 13, 7, 38, 59, 3, 194, -1) True ###(033)=[passed] Cert class : Checking end date extraction in simple and tuple formats >>> assert x.notAfter_str_simple == '03/30/26' >>> x.notAfter == (2026, 3, 30, 7, 38, 59, 0, 89, -1) True ###(034)=[passed] Cert class : test remainingDays >>> assert abs(x.remainingDays("02/12/11")) > 5000 >>> assert abs(x.remainingDays("Feb 12 10:00:00 2011 Paris, Madrid")) > 1 Bad time string provided, will use localtime() instead. ###(035)=[passed] Cert class : Checking RSA public key >>> assert type(x.pubKey) is PubKeyRSA >>> x_pubNum = x.pubKey.pubkey.public_numbers() >>> assert x_pubNum.n == 19231328316532061413420367242571475005688288081144416166988378525696075445024135424022026378563116068168327239354659928492979285632474448448624869172454076124150405352043642781483254546569202103296262513098482624188672299255268092629150366527784294463900039290024710152521604731213565912934889752122898104556895316819303096201441834849255370122572613047779766933573375974464479123135292080801384304131606933504677232323037116557327478512106367095125103346134248056463878553619525193565824925835325216545121044922690971718737998420984924512388011040969150550056783451476150234324593710633552558175109683813482739004163 >>> x_pubNum.e == 0x10001 True ###(036)=[passed] Cert class : Checking extensions >>> x.show() Serial: 12996949011579079537 Issuer: /C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp Subject: /C=FR/ST=Paris/L=Paris/O=Mushroom Corp./OU=Mushroom VPN Services/CN=IKEv2 X.509 Test certificate/emailAddress=ikev2-test@mushroom.corp Validity: 2006-07-13 07:38:59 UTC to 2026-03-30 07:38:59 UTC >>> x.tbsCertificate.show() ###[ X509_TBSCertificate ]### version = 'v3' 0x2 serialNumber= 0xb45e7043e7090b71 \signature \ |###[ X509_AlgorithmIdentifier ]### | algorithm = | parameters= \issuer \ |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = \validity \ |###[ X509_Validity ]### | not_before= 2006-07-13 07:38:59 UTC | not_after = 2026-03-30 07:38:59 UTC \subject \ |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = |###[ X509_RDN ]### | \rdn \ | |###[ X509_AttributeTypeAndValue ]### | | type = | | value = \subjectPublicKeyInfo\ |###[ X509_SubjectPublicKeyInfo ]### | \signatureAlgorithm\ | |###[ X509_AlgorithmIdentifier ]### | | algorithm = | | parameters= | \subjectPublicKey\ | |###[ RSAPublicKey ]### | | modulus = 0x98576a3fe9...cc363bf303 | | publicExponent= 0x10001 issuerUniqueID= None subjectUniqueID= None \extensions\ |###[ X509_Extension ]### | extnID = | critical = None | \extnValue \ | |###[ X509_ExtSubjectKeyIdentifier ]### | | keyIdentifier= |###[ X509_Extension ]### | extnID = | critical = None | \extnValue \ | |###[ X509_ExtAuthorityKeyIdentifier ]### | | keyIdentifier= | | \authorityCertIssuer\ | | |###[ X509_GeneralName ]### | | | \generalName\ | | | |###[ X509_DirectoryName ]### | | | | \directoryName\ | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | | | |###[ X509_RDN ]### | | | | | \rdn \ | | | | | |###[ X509_AttributeTypeAndValue ]### | | | | | | type = | | | | | | value = | | authorityCertSerialNumber= 0xb45e7043e7090b71 |###[ X509_Extension ]### | extnID = | critical = None | \extnValue \ | |###[ X509_ExtBasicConstraints ]### | | cA = True | | pathLenConstraint= None >>> assert x.cA >>> assert x.authorityKeyID == b'\xf3\xd8N\xde\x90\xf7\xe6]\xd2\xce3\xcd\\V\x8co\x97\x141K' >>> not hasattr(x, "keyUsage") True ###(037)=[passed] Cert class : encrypt >>> assert len(x.encrypt(b"Scapy")) == 256 ###(038)=[passed] Cert class : export >>> import tempfile, os >>> filename = tempfile.mktemp() >>> x.export(filename) 1302 >>> fstat = os.stat(filename) >>> assert fstat.st_size == 1302 >>> os.remove(filename) ###(039)=[passed] Cert class : isIssuerCert >>> assert x.isIssuerCert(x) ###(040)=[passed] Cert class : Importing another PEM-encoded X.509 Certificate >>> y = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw ... CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ... ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg ... RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV ... UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu ... Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq ... hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf ... Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q ... RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ ... BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD ... AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY ... JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv ... 6pZjamVFkpUBtA== ... -----END CERTIFICATE----- ... """) ###(041)=[passed] Cert class : Checking ECDSA public key >>> assert type(y.pubKey) is PubKeyECDSA >>> pubkey = y.pubKey.pubkey >>> assert pubkey.curve.name == 'secp384r1' >>> pubkey.public_numbers().x == 3987178688175281746349180015490646948656137448666005327832107126183726641822596270780616285891030558662603987311874 True ###(042)=[passed] Cert class : Checking ECDSA signature >>> raw(y.signatureValue) == b'0d\x020%\xa4\x81E\x02k\x12KutO\xc8#\xe3p\xf2ur\xde|\x89\xf0\xcf\x91ra\x9e^\x10\x92YV\xb9\x83\xc7\x10\xe78\xe9X&6}\xd5\xe44\x869\x020|6S\xf00\xe5bc:\x99\xe2\xb6\xa3;\x9b4\xfa\x1e\xda\x10\x92q^\x91\x13\xa7\xdd\xa4n\x92\xcc2\xd6\xf5!f\xc7/\xea\x96cjeE\x92\x95\x01\xb4' True ###(043)=[passed] Cert class : Test show >>> awaited = """ ... Serial: 15459312981008553731928384953135426796 ... Issuer: /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Assured ID Root G3 ... Subject: /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Assured ID Root G3 ... Validity: 2013-08-01 12:00:00 UTC to 2038-01-15 12:00:00 UTC ... """ >>> >>> with ContextManagerCaptureOutput() as cmco: ... y.show() ... assert cmco.get_output().strip() == awaited.strip() ... ###(044)=[passed] Cert class : Check split_pem on chained certs with missing end \n >>> from scapy.layers.tls.cert import split_pem >>> ks = split_pem(b""" ... -----BEGIN EC PRIVATE KEY----- ... MHQCAQEEIMiRlFoy6046m1NXu911ukXyjDLVgmOXWCKWdQMd8gCRoAcGBSuBBAAK ... oUQDQgAE55WjbZjS/88K1kYagsO9wtKifw0IKLp4Jd5qtmDF2Zu+xrwrBRT0HBnP ... weDU+RsFxcyU/QxD9WYORzYarqxbcA== ... -----END EC PRIVATE KEY----- ... -----BEGIN EC PRIVATE KEY----- ... MHQCAQEEIMiRlFoy6046m1NXu911ukXyjDLVgmOXWCKWdQMd8gCRoAcGBSuBBAAK ... oUQDQgAE55WjbZjS/88K1kYagsO9wtKifw0IKLp4Jd5qtmDF2Zu+xrwrBRT0HBnP ... weDU+RsFxcyU/QxD9WYORzYarqxbcA== ... -----END EC PRIVATE KEY-----""") >>> assert ks[0][:-1] == ks[1] ###(045)=[passed] Cert class : Import PEM-encoded certificate with ed25519 signature >>> x = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIICqDCCAZCgAwIBAgIUYYDvh160/Q32Q/MuCGSfIYxTwwEwDQYJKoZIhvcNAQEL ... BQAwVDELMAkGA1UEBhMCTU4xFDASBgNVBAcMC1VsYWFuYmFhdGFyMRcwFQYDVQQL ... DA5TY2FweSBUZXN0IFBLSTEWMBQGA1UEAwwNU2NhcHkgVGVzdCBDQTAeFw0yNDA3 ... MTQxOTU4MzNaFw0zNDA3MTUxOTU4MzNaMFgxCzAJBgNVBAYTAk1OMRQwEgYDVQQH ... DAtVbGFhbmJhYXRhcjEXMBUGA1UECwwOU2NhcHkgVGVzdCBQS0kxGjAYBgNVBAMM ... EVNjYXB5IFRlc3QgU2VydmVyMCowBQYDK2VwAyEAB8exZcGWUFeio0aPES732u5l ... GXRUuaktLmSIQB8PoPejaDBmMA8GA1UdEwEB/wQFMAMCAQEwEwYDVR0lBAwwCgYI ... KwYBBQUHAwEwHQYDVR0OBBYEFJOzQR0udLrz7IiLP3q+FehLxijkMB8GA1UdIwQY ... MBaAFGZTlPQV0b1naLBRNzI14aSq3gd8MA0GCSqGSIb3DQEBCwUAA4IBAQCRk6TP ... XKfSy2fwodsYe1bedhL9mlm9xDDOu6ILkDZtCpbOwrjeSf+U7VQYvdlI8QCeQyEK ... ZE/S3S5UzOjEv7fQpyqfG9aJJbH7OQwG25ShiX86Kt/RAkgtjyCmKevhT6uSs5fa ... BsdYWnS9WHWH5ZkWkjZt1K2xYJP4Lqg9VpHy/YNz4b5swXEWf+MdayVSgzPxoviG ... zXnsTrxiTcGvelGFm/lYc42u6cSqrHoLtfniyaGNvPwrfBsiY/cypN4GZLNgEk80 ... /tcAg2TeUGNbMbT4Rko1OMLxMT9zRzgJyjd/XyW/5fCE/Xm0q7VYo1EF1ScywU1B ... XwZH9DJ6Ud0s8/j+ ... -----END CERTIFICATE----- ... """) ###(046)=[passed] Cert class : Change subject public key identifier and resign >>> c = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw ... CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu ... ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg ... RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV ... UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu ... Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq ... hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf ... Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q ... RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ ... BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD ... AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY ... JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv ... 6pZjamVFkpUBtA== ... -----END CERTIFICATE----- ... """) >>> k = PrivKeyECDSA() >>> c.setSubjectPublicKeyFromPrivateKey(k) >>> c.setSubjectPublicKeyFromPrivateKey(k.pubkey) >>> c = Cert(k.resignCert(c)) >>> >>> assert k.verifyCert(c) ###### ## CRL class tests ###### ###(047)=[passed] CRL class : Importing PEM-encoded CRL >>> x = CRL(""" ... -----BEGIN X509 CRL----- ... MIICHjCCAYcwDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMxFzAVBgNVBAoT ... DlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 ... IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw0wNjExMDIwMDAwMDBaFw0wNzAyMTcy ... MzU5NTlaMIH2MCECECzSS2LEl6QXzW6jyJx6LcgXDTA0MDQwMTE3NTYxNVowIQIQ ... OkXeVssCzdzcTndjIhvU1RcNMDEwNTA4MTkyMjM0WjAhAhBBXYg2gRUg1YCDRqhZ ... kngsFw0wMTA3MDYxNjU3MjNaMCECEEc5gf/9hIHxlfnrGMJ8DfEXDTAzMDEwOTE4 ... MDYxMlowIQIQcFR+auK62HZ/R6mZEEFeZxcNMDIwOTIzMTcwMDA4WjAhAhB+C13e ... GPI5ZoKmj2UiOCPIFw0wMTA1MDgxOTA4MjFaMCICEQDQVEhgGGfTrTXKLw1KJ5Ve ... Fw0wMTEyMTExODI2MjFaMA0GCSqGSIb3DQEBBQUAA4GBACLJ9rsdoaU9JMf/sCIR ... s3AGW8VV3TN2oJgiCGNEac9PRyV3mRKE0hmuIJTKLFSaa4HSAzimWpWNKuJhztsZ ... zXUnWSZ8VuHkgHEaSbKqzUlb2g+o/848CvzJrcbeyEBkDCYJI5C3nLlQA49LGJ+w ... 4GUPYBwaZ+WFxCX1C8kzglLm ... -----END X509 CRL----- ... """) ###(048)=[passed] CRL class : Checking version >>> x.version == 1 True ###(049)=[passed] CRL class : Checking issuer extraction in basic format (/C=FR ...) >>> x.issuer_str == '/C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority' True ###(050)=[passed] CRL class : Checking lastUpdate date extraction in tuple format >>> x.lastUpdate == (2006, 11, 2, 0, 0, 0, 3, 306, -1) True ###(051)=[passed] CRL class : Checking nextUpdate date extraction in tuple format >>> x.nextUpdate == (2007, 2, 17, 23, 59, 59, 5, 48, -1) True ###(052)=[passed] CRL class : Checking number of revoked certificates >>> len(x.revoked_cert_serials) == 7 True ###(053)=[passed] CRL class : Checking presence of one revoked certificate >>> (94673785334145723688625287778885438961, '030109180612') in x.revoked_cert_serials True ###(054)=[passed] Cert/CRL class : Checking isRevoked >>> cx = X509_Cert() >>> cx.tbsCertificate.serialNumber.val = 59577943160751197113872490992424857032 >>> cx.tbsCertificate.issuer = x.x509CRL.tbsCertList.issuer >>> cx = Cert(raw(cx)) >>> assert cx.isRevoked([x]) ###(055)=[passed] CRL class : Test show >>> awaited = """ ... Version: 1 ... sigAlg: sha1-with-rsa-signature ... Issuer: /C=US/O=VeriSign, Inc./OU=Class 1 Public Primary Certification Authority ... lastUpdate: 2006-11-02 00:00:00 UTC ... nextUpdate: 2007-02-17 23:59:59 UTC ... """ >>> >>> with ContextManagerCaptureOutput() as cmco: ... x.show() ... assert cmco.get_output().strip() == awaited.strip() ... ###(056)=[passed] Cert class : Checking isIssuerCert() >>> c0 = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIIFVjCCBD6gAwIBAgIJAJmDv7HOC+iUMA0GCSqGSIb3DQEBCwUAMIHGMQswCQYD ... VQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEl ... MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEzMDEGA1UECxMq ... aHR0cDovL2NlcnRzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvMTQwMgYD ... VQQDEytTdGFyZmllbGQgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy ... MB4XDTE1MTAxMzE2NDIzOFoXDTE2MTEzMDIzMzQxOVowPjEhMB8GA1UECxMYRG9t ... YWluIENvbnRyb2wgVmFsaWRhdGVkMRkwFwYDVQQDDBAqLnRvb2xzLmlldGYub3Jn ... MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseE36OuC1on62/XCS3fw ... LErecm4+E2DRqGYexK09MmDl8Jm19Hp6SFUh7g45EvnODcr1aWHHBO1uDx07HlCI ... eToOMUEW8bECZGilzfVKCsqZljUIw34nXdCpz/PnKK832LZ73fN+rm6Xf/fKaU7M ... 0AbfXSebOxLn5v4Ia1J7ghF8crNG68HoeLgPy+HrvQZEWNyDULKgYlvcgbg24558 ... ebKpU4rgC8lKKhM5MRO9LM+ocM+MjT0Bo4iuEgA2HR4kK9152FMBJu0oT8mGlINO ... yOEULoWzr9Ru3WlGr0ElDnqti/KSynnZezJP93fo+bRPI1zUXAOu2Ks6yhNfXV1d ... oQIDAQABo4IBzDCCAcgwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcD ... AQYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMDwGA1UdHwQ1MDMwMaAvoC2GK2h0 ... dHA6Ly9jcmwuc3RhcmZpZWxkdGVjaC5jb20vc2ZpZzJzMS0xNy5jcmwwWQYDVR0g ... BFIwUDBOBgtghkgBhv1uAQcXATA/MD0GCCsGAQUFBwIBFjFodHRwOi8vY2VydGlm ... aWNhdGVzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkvMIGCBggrBgEFBQcB ... AQR2MHQwKgYIKwYBBQUHMAGGHmh0dHA6Ly9vY3NwLnN0YXJmaWVsZHRlY2guY29t ... LzBGBggrBgEFBQcwAoY6aHR0cDovL2NlcnRpZmljYXRlcy5zdGFyZmllbGR0ZWNo ... LmNvbS9yZXBvc2l0b3J5L3NmaWcyLmNydDAfBgNVHSMEGDAWgBQlRYFoUCY4PTst ... LL7Natm2PbNmYzArBgNVHREEJDAighAqLnRvb2xzLmlldGYub3Jngg50b29scy5p ... ZXRmLm9yZzAdBgNVHQ4EFgQUrYq0HAdR15KJB7C3hGIvNlV6X00wDQYJKoZIhvcN ... AQELBQADggEBAAxfzShHiatHrWnTGuRX9BmFpHOFGmLs3PtRRPoOUEbZrcTbaJ+i ... EZpjj4R3eiLITgObcib8+NR1eZsN6VkswZ+rr54aeQ1WzWlsVwBP1t0h9lIbaonD ... wDV6ME3KzfFwwsZWqMBgLin8TcoMadAkXhdfcEKNndKSMsowgEjigP677l24nHf/ ... OcnMftgErmTm+jEdW1wUooJoWgbt8TT2uWD8MC62sIIgSQ6miKtg7LhCC1ScyVuN ... Erk3YzF8mPwouOcnNOKsUnkDXLA2REMedVp48c4ikjLClu6AcIg03ZU+o8fLNqcZ ... zd1s7DbacrRSSQ+nXDTodqw1HB+77u0RFs0= ... -----END CERTIFICATE----- ... """) >>> c1 = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIIFADCCA+igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx ... EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT ... HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ... ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAw ... MFoXDTMxMDUwMzA3MDAwMFowgcYxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 ... b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj ... aG5vbG9naWVzLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydHMuc3RhcmZpZWxk ... dGVjaC5jb20vcmVwb3NpdG9yeS8xNDAyBgNVBAMTK1N0YXJmaWVsZCBTZWN1cmUg ... Q2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB ... DwAwggEKAoIBAQDlkGZL7PlGcakgg77pbL9KyUhpgXVObST2yxcT+LBxWYR6ayuF ... pDS1FuXLzOlBcCykLtb6Mn3hqN6UEKwxwcDYav9ZJ6t21vwLdGu4p64/xFT0tDFE ... 3ZNWjKRMXpuJyySDm+JXfbfYEh/JhW300YDxUJuHrtQLEAX7J7oobRfpDtZNuTlV ... Bv8KJAV+L8YdcmzUiymMV33a2etmGtNPp99/UsQwxaXJDgLFU793OGgGJMNmyDd+ ... MB5FcSM1/5DYKp2N57CSTTx/KgqT3M0WRmX3YISLdkuRJ3MUkuDq7o8W6o0OPnYX ... v32JgIBEQ+ct4EMJddo26K3biTr1XRKOIwSDAgMBAAGjggEsMIIBKDAPBgNVHRMB ... Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUJUWBaFAmOD07LSy+ ... zWrZtj2zZmMwHwYDVR0jBBgwFoAUfAwyH6fZMH/EfWijYqihzqsHWycwOgYIKwYB ... BQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNo ... LmNvbS8wOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zdGFyZmllbGR0ZWNo ... LmNvbS9zZnJvb3QtZzIuY3JsMEwGA1UdIARFMEMwQQYEVR0gADA5MDcGCCsGAQUF ... BwIBFitodHRwczovL2NlcnRzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkv ... MA0GCSqGSIb3DQEBCwUAA4IBAQBWZcr+8z8KqJOLGMfeQ2kTNCC+Tl94qGuc22pN ... QdvBE+zcMQAiXvcAngzgNGU0+bE6TkjIEoGIXFs+CFN69xpk37hQYcxTUUApS8L0 ... rjpf5MqtJsxOYUPl/VemN3DOQyuwlMOS6eFfqhBJt2nk4NAfZKQrzR9voPiEJBjO ... eT2pkb9UGBOJmVQRDVXFJgt5T1ocbvlj2xSApAer+rKluYjdkf5lO6Sjeb6JTeHQ ... sPTIFwwKlhR8Cbds4cLYVdQYoKpBaXAko7nv6VrcPuuUSvC33l8Odvr7+2kDRUBQ ... 7nIMpBKGgc0T0U7EPMpODdIm8QC3tKai4W56gf0wrHofx1l7 ... -----END CERTIFICATE----- ... """) >>> c2 = Cert(""" ... -----BEGIN CERTIFICATE----- ... MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx ... EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT ... HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ... ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw ... MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 ... b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj ... aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp ... Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ... ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg ... nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 ... HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N ... Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN ... dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 ... HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO ... BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G ... CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU ... sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 ... 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg ... 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K ... pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 ... mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ... -----END CERTIFICATE----- ... """) >>> c0.isIssuerCert(c1) and c1.isIssuerCert(c2) and not c0.isIssuerCert(c2) True ###(057)=[passed] Cert class : Checking isSelfSigned() >>> c2.isSelfSigned() and not c1.isSelfSigned() and not c0.isSelfSigned() True ###(058)=[passed] PubKey class : Checking verifyCert() >>> c2.pubKey.verifyCert(c2) and c1.pubKey.verifyCert(c0) True ###(059)=[passed] Chain class : Checking chain construction >>> assert len(Chain([c0, c1, c2])) == 3 >>> assert len(Chain([c0], c1)) == 2 >>> len(Chain([c0], c2)) == 1 True ###(060)=[passed] Chain class : repr >>> expected_repr = """__ /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Root Certificate Authority - G2 [Self Signed] ... _ /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certs.starfieldtech.com/repository//CN=Starfield Secure Certificate Authority - G2 ... _ /OU=Domain Control Validated/CN=*.tools.ietf.org""" >>> assert str(Chain([c0, c1, c2])) == expected_repr ###(061)=[passed] Chain class : Checking chain verification >>> assert Chain([], c0).verifyChain([c2], [c1]) >>> not Chain([c1]).verifyChain([c0]) True ###(062)=[passed] Chain class: Checking chain verification with file >>> import tempfile >>> >>> tf_folder = tempfile.mkdtemp() >>> >>> try: ... os.makedirs(tf_folder) ... except: ... pass ... >>> tf = os.path.join(tf_folder, "trusted") >>> utf = os.path.join(tf_folder, "untrusted") >>> >>> tf '/tmp/tmpcy18gzy8/trusted' >>> utf '/tmp/tmpcy18gzy8/untrusted' >>> >>> trusted = open(tf, "w") >>> trusted.write(""" ... -----BEGIN CERTIFICATE----- ... MIIFADCCA+igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx ... EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT ... HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ... ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAw ... MFoXDTMxMDUwMzA3MDAwMFowgcYxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 ... b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj ... aG5vbG9naWVzLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydHMuc3RhcmZpZWxk ... dGVjaC5jb20vcmVwb3NpdG9yeS8xNDAyBgNVBAMTK1N0YXJmaWVsZCBTZWN1cmUg ... Q2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB ... DwAwggEKAoIBAQDlkGZL7PlGcakgg77pbL9KyUhpgXVObST2yxcT+LBxWYR6ayuF ... pDS1FuXLzOlBcCykLtb6Mn3hqN6UEKwxwcDYav9ZJ6t21vwLdGu4p64/xFT0tDFE ... 3ZNWjKRMXpuJyySDm+JXfbfYEh/JhW300YDxUJuHrtQLEAX7J7oobRfpDtZNuTlV ... Bv8KJAV+L8YdcmzUiymMV33a2etmGtNPp99/UsQwxaXJDgLFU793OGgGJMNmyDd+ ... MB5FcSM1/5DYKp2N57CSTTx/KgqT3M0WRmX3YISLdkuRJ3MUkuDq7o8W6o0OPnYX ... v32JgIBEQ+ct4EMJddo26K3biTr1XRKOIwSDAgMBAAGjggEsMIIBKDAPBgNVHRMB ... Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUJUWBaFAmOD07LSy+ ... zWrZtj2zZmMwHwYDVR0jBBgwFoAUfAwyH6fZMH/EfWijYqihzqsHWycwOgYIKwYB ... BQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vb2NzcC5zdGFyZmllbGR0ZWNo ... LmNvbS8wOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zdGFyZmllbGR0ZWNo ... LmNvbS9zZnJvb3QtZzIuY3JsMEwGA1UdIARFMEMwQQYEVR0gADA5MDcGCCsGAQUF ... BwIBFitodHRwczovL2NlcnRzLnN0YXJmaWVsZHRlY2guY29tL3JlcG9zaXRvcnkv ... MA0GCSqGSIb3DQEBCwUAA4IBAQBWZcr+8z8KqJOLGMfeQ2kTNCC+Tl94qGuc22pN ... QdvBE+zcMQAiXvcAngzgNGU0+bE6TkjIEoGIXFs+CFN69xpk37hQYcxTUUApS8L0 ... rjpf5MqtJsxOYUPl/VemN3DOQyuwlMOS6eFfqhBJt2nk4NAfZKQrzR9voPiEJBjO ... eT2pkb9UGBOJmVQRDVXFJgt5T1ocbvlj2xSApAer+rKluYjdkf5lO6Sjeb6JTeHQ ... sPTIFwwKlhR8Cbds4cLYVdQYoKpBaXAko7nv6VrcPuuUSvC33l8Odvr7+2kDRUBQ ... 7nIMpBKGgc0T0U7EPMpODdIm8QC3tKai4W56gf0wrHofx1l7 ... -----END CERTIFICATE----- ... """) 1794 >>> trusted.close() >>> >>> untrusted = open(utf, "w") >>> untrusted.write(""" ... -----BEGIN CERTIFICATE----- ... MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx ... EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT ... HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs ... ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw ... MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 ... b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj ... aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp ... Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ... ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg ... nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 ... HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N ... Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN ... dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 ... HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO ... BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G ... CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU ... sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 ... 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg ... 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K ... pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 ... mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ... -----END CERTIFICATE----- ... """) 1400 >>> untrusted.close() >>> >>> assert Chain([], c0).verifyChainFromCAFile(tf, untrusted_file=utf) >>> assert Chain([], c0).verifyChainFromCAPath(tf_folder, untrusted_file=utf) ###(063)=[passed] Clear files >>> try: ... os.remove("./certs_test_ca/trusted") ... os.remove("./certs_test_ca/untrusted") ... except: ... pass ... >>> try: ... os.rmdir("././certs_test_ca") ... except: ... pass ... ###(064)=[passed] Test __repr__ >>> repr_str = Chain([], c0).__repr__() >>> assert repr_str == '__ /OU=Domain Control Validated/CN=*.tools.ietf.org [Not Self Signed]\n' ###(065)=[passed] Test GeneralizedTime >>> data = b"MHAwXAIBADANBgkqhkiG9w0BAQ0FADAAMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMAAwHDANBgkqhkiG9w0BAQEFAAMLADAIAgEAAgMBAAGjAjAAMA0GCSqGSIb3DQEBDQUAAwEA" >>> import tempfile, os >>> _, filename = tempfile.mkstemp() >>> fd = open(filename, "wb") >>> fd.write(b"-----BEGIN CERTIFICATE-----\n") 28 >>> fd.write(data) 152 >>> fd.write(b"-----END CERTIFICATE-----\n") 26 >>> fd.close() >>> cert = Cert(filename) >>> assert "2011" in cert.notBefore_str and "2046" in cert.notAfter_str UTscapy ended with error code 1 RPM build warnings: RPM build errors: error: Bad exit status from /var/tmp/rpm-tmp.3G9R7N (%check) The %py3_build macro is deprecated and will likely stop working in Fedora 44. See the current Python packaging guidelines: https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ The %py3_install macro is deprecated and will likely stop working in Fedora 44. See the current Python packaging guidelines: https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ Bad exit status from /var/tmp/rpm-tmp.3G9R7N (%check) Finish: rpmbuild scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm Finish: build phase for scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-i686-1752725198.853093/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names ERROR: Exception(/var/lib/copr-rpmbuild/results/scapy-2.5.0-1.20250717040547795248.pr2.586.g0bf80167.fc43.src.rpm) Config(fedora-rawhide-i686) 5 minutes 47 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_failure=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot ERROR: Command failed: # /usr/bin/systemd-nspawn -q -M 736a3626f089480e9a7d6786b544e01a -D /var/lib/mock/fedora-rawhide-i686-1752725198.853093/root -a -u mockbuild --capability=cap_ipc_lock --rlimit=RLIMIT_NOFILE=10240 --capability=cap_ipc_lock --bind=/tmp/mock-resolv.7hy78y11:/etc/resolv.conf --bind=/dev/btrfs-control --bind=/dev/mapper/control --bind=/dev/fuse --bind=/dev/loop-control --bind=/dev/loop0 --bind=/dev/loop1 --bind=/dev/loop2 --bind=/dev/loop3 --bind=/dev/loop4 --bind=/dev/loop5 --bind=/dev/loop6 --bind=/dev/loop7 --bind=/dev/loop8 --bind=/dev/loop9 --bind=/dev/loop10 --bind=/dev/loop11 --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/builddir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin '--setenv=PROMPT_COMMAND=printf "\033]0;\007"' '--setenv=PS1= \s-\v\$ ' --setenv=LANG=C.UTF-8 --resolv-conf=off bash --login -c '/usr/bin/rpmbuild -bb --target i686 --nodeps /builddir/build/originals/scapy.spec' Copr build error: Build failed